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 bancs d'essai (testbenches) pour générer des motifs de test répétitifs, initialiser la mémoire 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 <strong>for</strong>, qui se répète un nombre spécifique 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 combien de fois elle s'exécute.
Syntaxe :
for (initialization; condition; increment) begin
// Code à répéter
end| Partie | Rôle | 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);
endRésultat :
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 bancs d'essai (Testbenches)
Les boucles for sont couramment utilisées pour tester toutes les combinaisons d'entrées :
reg [3:0] 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.
Boucle For avec des Tableaux
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 de mémoire.
Règles importantes
| Règle | Explication |
|---|---|
La variable de boucle 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 finit par devenir fausse |
| À utiliser de préférence dans les bancs d'essai | 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.
Aide-mémoire
La boucle for en Verilog répète un bloc de code un nombre spécifique de fois :
for (initialization; condition; increment) begin
// Code à répéter
endExemple affichant de 0 à 4 :
integer i;
for (i = 0; i < 5; i = i + 1) begin
$display("i = %d", i);
endRègles clés :
- La variable de boucle doit être de type
integeroureg(paswire) - Utilisez
begin/endpour plusieurs instructions - Assurez-vous que la condition finit par devenir fausse pour éviter les boucles infinies
- Les boucles sont principalement utilisées dans les bancs d'essai (testbenches) (généralement non synthétisables)
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