Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Industrial programming >> Verilog

Maîtriser le Flux de Contrôle Verilog : IF-ELSE, Case, Boucles et Plus

Le comportement matériel ne peut être implémenté sans instructions conditionnelles et autres moyens de contrôler le flux de logique. Verilog dispose d'un ensemble de blocs et mécanismes de contrôle de flux pour y parvenir.

if-else-if

Cet énoncé conditionnel est utilisé pour décider si certaines instructions doivent être exécutées ou non. Cela ressemble beaucoup aux instructions if-else-if en C. Si l'expression s'évalue à vrai, la première instruction sera exécutée. Si l'expression s'évalue à faux et s'il existe une partie else, cette partie sera exécutée.

Syntaxe
// instruction if sans partie else
if (expression) [instruction]
// instruction if avec une partie else
if (expression) [instruction] else [instruction]
// if else pour plusieurs instructions doit être
// enclôt entre "begin" et "end"
if (expression) begin [instructions multiples] end else begin [instructions multiples] end
// instruction if-else-if
if (expression) [instruction] else if (expression) [instruction] else [instruction]

La partie else d'un if-else est optionnelle et peut causer une confusion si un else est omis dans une séquence if imbriquée. Pour éviter cette confusion, il est plus facile d'associer toujours le else au if précédent qui n'a pas de else. Une autre façon est d'enclore les instructions dans un bloc begin-end. La dernière partie else gère le cas "aucun des précédents" ou cas par défaut où aucune des autres conditions n'a été satisfaite.

Cliquez ici pour en savoir plus sur if-else-if

Les boucles fournissent un moyen d'exécuter une ou plusieurs instructions dans un bloc une ou plusieurs fois. Il existe quatre types d'instructions de boucle en Verilog.

Boucle forever

Cela exécute continuellement les instructions dans le bloc.

forever [instruction]
forever begin [instructions multiples] end

Exemple

module my_design;
  initial begin
    forever begin
      $display ("Ceci s'affichera pour toujours, la simulation peut bloquer ...");
    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 ...
Result reached the maximum of 5000 lines. Killing process.

Boucle repeat

Cela exécute les instructions un nombre fixe de fois. Si l'expression s'évalue à X ou Z, elle sera traitée comme zéro et ne sera pas exécutée du tout.

repeat ([nombre_de_fois]) begin [instructions] end
repeat ([nombre_de_fois]) @ ([quelque_evenement]) begin [instructions] end

Exemple

module my_design;
  initial begin
    repeat(4) begin
      $display("Ceci est une nouvelle itération ...");
    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écute les instructions aussi longtemps qu'une expression est vraie et sort 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 [instructions] end

Exemple

module my_design;
  integer i = 5;
  initial begin
    while (i > 0) begin
      $display ("Itération#%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 (affectation_initiale; condition; incrément_variable) begin [instructions] end

Cela contrôle les instructions en utilisant un processus en trois étapes :

Exemple

module my_design;
  integer i = 5;
  initial begin
    for (i = 0; i < 5; i = i + 1) begin
      $display ("Boucle #%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

  1. Expressions, instructions et blocs C# : Guide complet avec exemples pratiques
  2. Comprendre les expressions, instructions et blocs en Java
  3. Maîtriser Verilog : Tutoriel complet pour la conception de circuits numériques
  4. Maîtriser la concaténation Verilog : Guide pratique
  5. Comprendre les affectations Verilog : Types, Syntaxe et Bonnes Pratiques
  6. Verilog Blocking vs Non-Blocking : Différences Clés Expliquées
  7. Maîtriser le Flux de Contrôle Verilog : IF-ELSE, Case, Boucles et Plus
  8. Maîtriser les Fonctions Verilog pour une Conception RTL Efficace
  9. Comprendre les Tasks Verilog : Fonctions vs Tasks, Syntaxe et Utilisation