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 continuellement, 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 sans fin. Elle est utile pour générer des horloges et d'autres signaux continus dans les bancs d'essai (testbenches).
Syntaxe :
forever begin
// Code qui se répète indéfiniment
endExemple simple
forever begin
$display("This prints forever");
endCela s'imprimera à 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 fonctionne 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 cela 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 (lorsque 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 se termine jamais |
| Idéal pour une utilisation dans les bancs de test | 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.
Aide-mémoire
La boucle forever répète un bloc de code continuellement sans s'arrêter. Incluez toujours un délai pour éviter que la simulation ne se bloque.
initial begin
clk = 0;
forever begin
#5 clk = ~clk; // Bascule toutes les 5 unités de temps
end
endArrêtez une boucle forever en utilisant disable avec un bloc nommé :
initial begin : clock_gen
clk = 0;
forever begin
#5 clk = ~clk;
end
end
initial begin
#100;
disable clock_gen;
endRègles clés :
- Doit inclure un délai (
#10ou@(posedge clk)), sinon la simulation se bloque - Utilisez
disablepour arrêter, sinon la simulation ne se termine jamais - Non synthétisable — utilisation en banc de test (testbench) uniquement
Essayez vous-même
module forever_challenge;
reg clk;
initial begin
clk = 0;
// À FAIRE : 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