Verilog-besturingsblokken
Hardwaregedrag kan niet worden geïmplementeerd zonder voorwaardelijke instructies en andere manieren om de stroom van logica te beheersen. Verilog heeft een reeks controlestroomblokken en mechanismen om hetzelfde te bereiken.
if-else-if
Deze voorwaardelijke verklaring wordt gebruikt om een beslissing te nemen over het al dan niet uitvoeren van bepaalde uitspraken. Dit lijkt erg op de if-else-if
statements in C. Als de expressie waar is, wordt het eerste statement uitgevoerd. Als de uitdrukking onwaar is en als een else
deel bestaat, de else
deel zal worden uitgevoerd.
// 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]
De else
een deel van een if-else is optioneel en kan verwarring veroorzaken als een else
wordt weggelaten in een geneste if-reeks. Om deze verwarring te voorkomen, is het gemakkelijker om de else altijd met de vorige te associëren als een else ontbreekt. Een andere manier is om statements in te sluiten binnen een begin-end
blok. De laatste else
part behandelt geen van de bovenstaande of standaardgevallen waarbij aan geen van de andere voorwaarden werd voldaan.
Klik hier om meer te lezen over if-else-if
Lussen bieden een manier om één of meerdere instructies binnen een blok een of meerdere keren uit te voeren. Er zijn vier verschillende soorten looping-instructies in Verilog.
forever loop
Dit zal continu de instructies binnen het blok uitvoeren.
forever
[statement]
forever begin
[multiple statements]
end
Voorbeeld
module my_design;
initial begin
forever begin
$display ("This will be printed forever, simulation can hang ...");
end
end
endmodule
Simulatielogboek 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.
herhaal lus
Hiermee worden instructies een vast aantal keren uitgevoerd. Als de uitdrukking resulteert in een X of Z, wordt deze als nul behandeld en helemaal niet uitgevoerd.
repeat ([num_of_times]) begin
[statements]
end
repeat ([num_of_times]) @ ([some_event]) begin
[statements]
end
Voorbeeld
module my_design;
initial begin
repeat(4) begin
$display("This is a new iteration ...");
end
end
endmodule
Simulatielogboek 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.
terwijl-lus
Dit voert instructies uit zolang een expressie waar is en wordt afgesloten zodra de voorwaarde onwaar wordt. Als de voorwaarde vanaf het begin onwaar is, worden instructies helemaal niet uitgevoerd.
while (expression) begin
[statements]
end
Voorbeeld
module my_design;
integer i = 5;
initial begin
while (i > 0) begin
$display ("Iteration#%0d", i);
i = i - 1;
end
end
endmodule
Simulatielogboek ncsim> run Iteration#5 Iteration#4 Iteration#3 Iteration#2 Iteration#1 ncsim: *W,RNQUIE: Simulation is complete.
for-lus
for ( initial_assignment; condition; increment_variable) begin
[statements]
end
Dit regelt uitspraken met behulp van een proces in drie stappen:
- Initialiseer een lustellervariabele
- Evalueer de uitdrukking, meestal met de lustellervariabele
- Verhoog de lustellervariabele zodat op een later tijdstip de uitdrukking onwaar wordt en de lus wordt afgesloten.
Voorbeeld
module my_design;
integer i = 5;
initial begin
for (i = 0; i < 5; i = i + 1) begin
$display ("Loop #%0d", i);
end
end
endmodule
Simulatielogboek ncsim> run Loop #0 Loop #1 Loop #2 Loop #3 Loop #4 ncsim: *W,RNQUIE: Simulation is complete.
Klik hier om meer te lezen over for loops.
Verilog
- C#-expressies, statements en blokken (met voorbeelden)
- Java-uitdrukkingen, verklaringen en blokken
- Verilog-zelfstudie
- Verilog-aaneenschakeling
- Verilog-opdrachten
- Verilog blokkeren en niet-blokkeren
- Verilog-besturingsblokken
- Verilog-functies
- Verilog-taak
- Verilog-vertragingsregeling
- Verilog-klokgenerator