Es gibt eine wichtige Unterscheidung: Sie haben Ihre Frage "verilog" und "system-verilog" markiert. Was meinst du? Die Antwort hängt davon ab, was Sie meinen, weil das Verhalten in beiden unterschiedlich ist.
In Verilog:
Beide
reg a;
initial a = 1'b0;
und
reg a = 1'b0;
die gleiche Art und Weise verhalten. In werden beide Fälle a
zur Zeit 0 initialisiert, dh bei Laufzeit. Dies kann zu Simulationsrennen und nicht-deterministischem Verhalten führen. Zum Beispiel:
reg a;
initial a = 1'b1;
initial $display(a);
könnte 0
angezeigt werden oder könnte 1
angezeigt - es ist ein Rennen zwischen den ersten Blöcken.Und genau das gleiche wird mit diesem Code geschehen:
reg a = 1'b1;
initial $display(a);
In-System-Verilog:
reg a;
initial a = 1'b0;
und
reg a = 1'b0;
anders verhalten wird. Im ersten Fall wird a
zum Zeitpunkt 0, dh unter Laufzeit initialisiert, was wiederum zu Simulationsläufen und nicht-deterministischem Verhalten führen kann. Allerdings gibt es kein solches Problem mit diesem Code ist:
reg a = 1'b1;
initial $display(a);
In diesem Fall wird a
bei Kompilierung und daher initialisiert werden gibt es keine Rennen und daher 1
wird immer angezeigt.
Sie haben dies sowohl "verilog" als auch "system-verilog" getaggt. Es gibt einen Unterschied zwischen den beiden (siehe meine Antwort unten). –