Hi! Ich hab ein Programm geschrieben, das so aussieht: module X (........); reg go = 1'b0; always @(posedge start) begin: // // // go <= 1'b1; end always @(posedge clk) begin if(go==1'b1) begin // // // // go <= 1'b0; end if(go==1'b0) begin // // end endmodule Kann mir bitte jemanden sagen was diese Fehler Meldung bedeutet: Error (10028): Can't resolve multiple constant drivers for net "go" at data_out.v(47) Danke Walter
ich kann zwar kein Verilog, aber so wie ich das interpretiere heißt das, dass das Signal go nicht von zwei verschiedenen Prozessen geändert werden darf. In VHDL darf man sowas jedenfalls nicht :)
Matthias wrote: > ich kann zwar kein Verilog, aber so wie ich das interpretiere heißt das, > dass das Signal go nicht von zwei verschiedenen Prozessen geändert > werden darf. > In VHDL darf man sowas jedenfalls nicht :) Ist in Verilog genauso. @ Walter Versuch mal die Zuweisung an go aus dem ersten always block auch in den zweiten zu bringen.
Wie meine Vorschreiber schon gesagt haben, das geht nicht. Erstens gibt es im Normalfallf nur einen process mit posedge, da das nur für den Takt verwendet wird (bzw mehrere prozesse mit posedge clk). Willst du die steigenden Flanke des start erkennen, tastest du sie mit dem Takt ab, speicherst sie also bei jedem Takt und vergleichst die Werte. In die sensitivity list kommt trotzdem nur posedge clk und nicht start, da nur clk abtastet. Zwei Prozesse dürfen außerdem niemals das gleiche Signal treiben. Prozesse laufen parallel (sind parallele Hardware). Wenn in deinem Bsp. z.B. ein prozess go auf 0 setzt und der andere gleichzeitig auf 1, welches Signal sollte übernommen werden? Daher, schreiben nur in einem Prozess, lesen geht in mehreren.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.