Menu
Coddy logo textTech

Forever Loop

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, forever. Elle ne s’arrête jamais d’elle-même.

Une boucle forever s’exécute de manière répétée sans end. Elle est utile pour générer des horloges et d’autres signaux continus dans des bancs de test.

Syntaxe :

forever begin
  // Code qui se répète indéfiniment
end

Exemple simple

forever begin
  $display("This prints forever");
end

Cela s’affichera indéfiniment et fera planter votre simulation. Ajoutez toujours un délai ou une condition d’arrêt.

Générer 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
end

Cela crée une horloge qui fonctionne pendant toute la simulation.

Forever avec Disable

Vous pouvez arrêter une boucle forever à l’aide d’une instruction disable :

initial begin : clock_gen   // Nom ajouté ici
  clk = 0;
  forever begin
    #5 clk = ~clk;
  end
end
initial begin
  #100;
  disable clock_gen;   // Maintenant ça fonctionne
end

forever par rapport aux autres boucles

BoucleS’arrête ?Quand l’utiliser
forOui (après un nombre fixe d’itérations)Nombre connu de repeats
whileOui (lorsque la condition est fausse)Condition d’arrêt inconnue
repeatOui (après un nombre fixe d’itérations)Nombre connu de repeats
foreverNon (jamais)Signaux continus (horloge)

Règles importantes

RègleExplication
Doit inclure un délai#10 ou @(posedge clk)
Sans délai, la simulation se bloqueBoucle infinie avec aucune avance temporelle
Utiliser avec disable pour arrêterSinon, la simulation ne se termine jamais
S'utilise principalement dans les bancs de testNon synthétisable
challenge icon

Défi

Que faire :

Ajoutez la boucle forever manquante pour générer une horloge qui bascule every 10 time units.

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
endmodule
quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Fondamentaux

Entraînez-vous par vous-même : Compilateur Verilog en ligne