Boucle Infinie
Fait partie de la section Fondamentaux du Journey Verilog de Coddy — leçon 61 sur 90.
La boucle forever répète un bloc de code en continu, pour toujours. Elle ne s'arrête jamais d'elle-même.
Une boucle forever s'exécute de manière répétée et sans fin. Elle est utile pour générer des horloges et d'autres signaux continus dans les bancs de test.
Syntaxe :
forever begin
// Code qui se répète indéfiniment
endExemple simple
forever begin
$display("This prints forever");
endCeci s'affichera à l'infini et fera planter votre simulation. Ajoutez toujours un délai ou une condition d'arrêt.
Génération d'une horloge (utilisation courante)
L'utilisation la plus courante de forever est de générer une horloge :
initial begin
clk = 0;
forever begin
#5 clk = ~clk; // Bascule toutes les 5 unités de temps
end
endCela crée une horloge qui s'exécute pendant toute la simulation.
Forever avec Disable
Vous pouvez arrêter une boucle forever en utilisant une instruction disable :
initial begin : clock_gen // Nom ajouté ici
clk = 0;
forever begin
#5 clk = ~clk;
end
endinitial begin
#100;
disable clock_gen; // Maintenant ça fonctionne
endForever vs autres boucles
| Boucle | S'arrête ? | Quand l'utiliser |
|---|---|---|
for | Oui (après des itérations fixes) | Nombre de répétitions connu |
while | Oui (quand la condition est fausse) | Condition d'arrêt inconnue |
repeat | Oui (après des itérations fixes) | Nombre de répétitions connu |
forever | Non (jamais) | Signaux continus (horloge) |
Règles importantes
| Règle | Explication |
|---|---|
| Doit inclure un délai | #10 ou @(posedge clk) |
| Sans délai, la simulation se bloque | Boucle infinie sans progression du temps |
Utiliser avec disable pour arrêter | Sinon la simulation ne s'arrête jamais |
| À utiliser de préférence dans les testbenches | Non synthétisable |
Défi
Ce qu'il faut faire :
Ajoutez la boucle forever manquante pour générer une horloge qui bascule toutes les 10 unités de temps.
Essayez vous-même
module forever_challenge;
reg clk;
initial begin
clk = 0;
// TODO: Ajouter une boucle forever pour basculer clk toutes les 10 unités de temps
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