Boucle For
Fait partie de la section Fondamentaux du Journey Verilog de Coddy — leçon 58 sur 90.
Les boucles en Verilog vous permettent d'exécuter un bloc de code plusieurs fois. Elles sont particulièrement utiles dans les testbenches pour générer des motifs de test répétitifs, initialiser la mémoire (memory) et itérer sur des tableaux. Contrairement aux descriptions matérielles qui s'exécutent en parallèle, les boucles s'exécutent de manière séquentielle, ce qui les rend idéales pour la simulation et les tests.
La boucle la plus couramment utilisée est la boucle for, qui se répète un nombre précis de fois. Une boucle for exécute un bloc de code de manière répétée, avec une variable de boucle qui change à chaque itération. Vous contrôlez exactement le nombre de fois qu'elle s'exécute.
Syntaxe :
for (initialization; condition; increment) begin
// Code à répéter
end| Partie | Ce que cela fait | Exemple |
|---|---|---|
initialization | Définit la valeur de départ | i = 0 |
condition | Quand s'arrêter | i < 10 |
increment | Change à chaque boucle | i = i + 1 |
Exemple simple
integer i;
for (i = 0; i < 5; i = i + 1) begin
$display("i = %d", i);
endSortie :
i = 0
i = 1
i = 2
i = 3
i = 4La boucle s'exécute 5 fois (i = 0, 1, 2, 3, 4).
Boucle For dans les Testbenches
Les boucles for sont fréquemment utilisées pour tester toutes les combinaisons d'entrées :
integer test_value;
for (test_value = 0; test_value < 16; test_value = test_value + 1) begin
$display("test_value = %d", test_value);
endCeci teste les 16 valeurs possibles d'un signal de 4 bits.
For Loop with Arrays
reg [7:0] memory [0:9];
integer i;
initial begin
for (i = 0; i < 10; i = i + 1) begin
memory[i] = i * 8;
end
endCeci initialise 10 emplacements memory.
Règles importantes
| Règle | Explication |
|---|---|
| La variable de `loop` doit être `integer` ou `reg` | Ne peut pas être `wire` |
| Utilisez `begin`/`end` pour plusieurs instructions | Requis pour plus d'une ligne |
| Évitez les boucles infinies | Assurez-vous que la `condition` devienne finalement fausse |
| A utiliser de préférence dans les testbenches | La plupart des boucles ne sont pas synthétisables |
Défi
Ce qu'il faut faire :
Ajoutez la boucle for manquante pour afficher les nombres de 0 à 3.
Essayez vous-même
module for_challenge;
integer i;
initial begin
$display("Printing 0 to 3:");
// TODO: Ajouter une boucle for
// Initialiser i = 0
// Boucler tant que i < 4
// Incrémenter i = i + 1
// À l'intérieur, afficher i
$finish;
end
endmoduleCette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de Fondamentaux
1Introduction
Qu'est-ce que VerilogHardware vs SoftwareNiveaux d'abstraction de conceptionVotre premier moduleCommentaires4Opérateurs - Partie 1
Opérateurs arithmétiquesOpérateur moduloOpérateurs de comparaisonRécapitulatif - Mathématiques simplesOpérateurs bit à bit7Assignation et portes logiques
Assignation continueAssignation avec opérateursPrimitives de portes intégréesPortes AND OR NOTPortes XOR XNORRécapitulatif - Circuit à portes logiques10Prise de décision
Instruction IfIf - ElseRécapitulatif - Comparateur simpleInstruction CaseCasex et CasezRécapitulatif - Conception d'ALU2Types de données
Type WireType RegEntiers et RéelsVecteursTableauxParamètresRécapitulatif - Déclarer des signaux5Opérateurs - Partie 2
Opérateurs logiquesOpérateurs de réductionOpérateurs de décalageOpérateur de concaténationOpérateur conditionnelRécapitulatif - Défi sur les opérateurs11Boucles
Boucle ForBoucle WhileBoucle RépéterBoucle InfinieInstruction DisableRécapitulatif - Modèles de boucles3Système de numération
Représentation binaireNombres avec tailleNombres sans tailleNombres négatifsValeurs spéciales X et ZRécapitulatif - Formats de nombres6Modules
Structure d'un modulePorts d'entrée et de sortiePorts InoutInstanciation de moduleMappage de ports par nomMappage de ports par ordreRécapitulatif - Créer un module9Blocs procéduraux
Bloc AlwaysBloc InitialListe de sensibilitéAffectation bloquanteAffectation non bloquanteRécapitulatif - Always vs Initial12Projet Multiplexeur
Conception d'un Mux 2 vers 1Conception d'un Mux 4 vers 115Contrôleur de feux de circulation
Définition des étatsLogique de la machine à états