Blocs de contrôle Verilog
Le comportement matériel ne peut pas être mis en œuvre sans instructions conditionnelles et autres moyens de contrôler le flux de la logique. Verilog dispose d'un ensemble de blocs de flux de contrôle et de mécanismes pour y parvenir.
si-sinon-si
Cette instruction conditionnelle est utilisé pour décider si certaines instructions doivent être exécutées ou non. Ceci est très similaire au if-else-if
instructions en C. Si l'expression est évaluée à true, la première instruction sera exécutée. Si l'expression est évaluée à false et si un else
pièce existe, le else
partie sera exécutée.
// 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]
Le else
une partie d'un if-else est facultative et peut prêter à confusion si un else
est omis dans une séquence if imbriquée. Pour éviter cette confusion, il est plus facile de toujours associer le else au précédent s'il manque un else. Une autre façon consiste à inclure des déclarations dans un begin-end
bloquer. Le dernier else
part gère aucun des cas ci-dessus ou par défaut où aucune des autres conditions n'a été satisfaite.
Cliquez ici pour en savoir plus sur if-else-if
Les boucles permettent d'exécuter une ou plusieurs instructions dans un bloc une ou plusieurs fois. Il existe quatre types différents d'instructions en boucle dans Verilog.
boucle éternelle
Cela exécutera en continu les instructions dans le bloc.
forever
[statement]
forever begin
[multiple statements]
end
Exemple
module my_design;
initial begin
forever begin
$display ("This will be printed forever, simulation can hang ...");
end
end
endmodule
Journal de simulation 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.
répéter la boucle
Cela exécutera les instructions un nombre fixe de fois. Si l'expression est évaluée à X ou Z, elle sera traitée comme zéro et ne sera pas exécutée du tout.
repeat ([num_of_times]) begin
[statements]
end
repeat ([num_of_times]) @ ([some_event]) begin
[statements]
end
Exemple
module my_design;
initial begin
repeat(4) begin
$display("This is a new iteration ...");
end
end
endmodule
Journal de simulation 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.
boucle while
Cela exécutera les instructions tant qu'une expression est vraie et se terminera une fois que la condition devient fausse. Si la condition est fausse dès le début, les instructions ne seront pas exécutées du tout.
while (expression) begin
[statements]
end
Exemple
module my_design;
integer i = 5;
initial begin
while (i > 0) begin
$display ("Iteration#%0d", i);
i = i - 1;
end
end
endmodule
Journal de simulation ncsim> run Iteration#5 Iteration#4 Iteration#3 Iteration#2 Iteration#1 ncsim: *W,RNQUIE: Simulation is complete.
boucle for
for ( initial_assignment; condition; increment_variable) begin
[statements]
end
Cela contrôlera les instructions à l'aide d'un processus en trois étapes :
- Initialiser une variable de compteur de boucle
- Évaluer l'expression, impliquant généralement la variable de compteur de boucle
- Incrémentez la variable du compteur de boucle afin que l'expression devienne fausse ultérieurement et que la boucle se termine.
Exemple
module my_design;
integer i = 5;
initial begin
for (i = 0; i < 5; i = i + 1) begin
$display ("Loop #%0d", i);
end
end
endmodule
Journal de simulation ncsim> run Loop #0 Loop #1 Loop #2 Loop #3 Loop #4 ncsim: *W,RNQUIE: Simulation is complete.
Cliquez ici pour en savoir plus sur les boucles for.
Verilog