Verilog-Kontrollblöcke
Hardwareverhalten kann nicht ohne bedingte Anweisungen und andere Möglichkeiten zur Steuerung des Logikflusses implementiert werden. Verilog verfügt über eine Reihe von Kontrollflussblöcken und -mechanismen, um dasselbe zu erreichen.
wenn-sonst-wenn
Diese bedingte Anweisung wird verwendet, um zu entscheiden, ob bestimmte Anweisungen ausgeführt werden sollen oder nicht. Dies ist dem if-else-if
sehr ähnlich Anweisungen in C. Wenn der Ausdruck wahr ist, wird die erste Anweisung ausgeführt. Wenn der Ausdruck als falsch ausgewertet wird und wenn ein else
Teil existiert, die else
Teil wird ausgeführt.
// if statement without else part
if (expression)
[statement]
// if statment with an else part
if (expression)
[statement]
else
[statement]
// if else for multiple statements should be
// enclosed within "begin" and "end"
if (expression) begin
[multiple statements]
end else begin
[multiple statements]
end
// if-else-if statement
if (expression)
[statement]
else if (expression)
[statement]
else
[statement]
Die else
Teil eines if-else ist optional und kann bei einem else
zu Verwirrung führen wird in einer verschachtelten if-Sequenz weggelassen. Um diese Verwirrung zu vermeiden, ist es einfacher, das else immer mit dem vorherigen zu verknüpfen, wenn diesem ein else fehlt. Eine andere Möglichkeit besteht darin, Anweisungen in begin-end
einzuschließen Block. Die letzten else
Teil behandelt keine der oben genannten oder Standardfälle, in denen keine der anderen Bedingungen erfüllt sind.
Klicken Sie hier, um mehr über if-else-if zu erfahren
Schleifen bieten eine Möglichkeit, einzelne oder mehrere Anweisungen innerhalb eines Blocks ein- oder mehrmals auszuführen. Es gibt vier verschiedene Arten von Schleifenanweisungen in Verilog.
Endlosschleife
Dadurch werden die Anweisungen innerhalb des Blocks kontinuierlich ausgeführt.
forever
[statement]
forever begin
[multiple statements]
end
Beispiel
module my_design;
initial begin
forever begin
$display ("This will be printed forever, simulation can hang ...");
end
end
endmodule
Simulationsprotokoll ncsim> run This will be printed forever, simulation can hang ... This will be printed forever, simulation can hang ... ... ... This will be printed forever, simulation can hang ... This will be printed forever, simulation can hang ... This will be printed forever, simulation can hang ... This will be printed forever, simulation can hang ... Result reached the maximum of 5000 lines. Killing process.
Wiederholungsschleife
Dadurch werden Anweisungen eine festgelegte Anzahl von Malen ausgeführt. Wenn der Ausdruck ein X oder Z ergibt, wird er als Null behandelt und überhaupt nicht ausgeführt.
repeat ([num_of_times]) begin
[statements]
end
repeat ([num_of_times]) @ ([some_event]) begin
[statements]
end
Beispiel
module my_design;
initial begin
repeat(4) begin
$display("This is a new iteration ...");
end
end
endmodule
Simulationsprotokoll ncsim> run This is a new iteration ... This is a new iteration ... This is a new iteration ... This is a new iteration ... ncsim: *W,RNQUIE: Simulation is complete.
while-Schleife
Dies führt Anweisungen aus, solange ein Ausdruck wahr ist, und wird beendet, sobald die Bedingung falsch wird. Wenn die Bedingung von Anfang an falsch ist, werden Anweisungen überhaupt nicht ausgeführt.
while (expression) begin
[statements]
end
Beispiel
module my_design;
integer i = 5;
initial begin
while (i > 0) begin
$display ("Iteration#%0d", i);
i = i - 1;
end
end
endmodule
Simulationsprotokoll ncsim> run Iteration#5 Iteration#4 Iteration#3 Iteration#2 Iteration#1 ncsim: *W,RNQUIE: Simulation is complete.
for-Schleife
for ( initial_assignment; condition; increment_variable) begin
[statements]
end
Dadurch werden Anweisungen mithilfe eines dreistufigen Prozesses gesteuert:
- Initialisieren Sie eine Schleifenzählervariable
- Werten Sie den Ausdruck aus, der normalerweise die Schleifenzählervariable einbezieht
- Zählvariable der Schleife erhöhen, damit der Ausdruck zu einem späteren Zeitpunkt falsch wird und die Schleife beendet wird.
Beispiel
module my_design;
integer i = 5;
initial begin
for (i = 0; i < 5; i = i + 1) begin
$display ("Loop #%0d", i);
end
end
endmodule
Simulationsprotokoll ncsim> run Loop #0 Loop #1 Loop #2 Loop #3 Loop #4 ncsim: *W,RNQUIE: Simulation is complete.
Klicken Sie hier, um mehr über for-Schleifen zu erfahren.
Verilog