Menu
CoddyTech

Boucle Forever

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, indéfiniment. 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.

Syntaxe :

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

Exemple simple

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

Cela 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 consiste à générer une horloge :

initial begin
  clk = 0;
  forever begin
    #5 clk = ~clk;   // Inverser l’état toutes les 5 unités de temps
  end
end

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

Forever avec Disable

Tu peux 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

La boucle infinie et les autres boucles

BoucleS’arrête ?Quand l’utiliser
forOui (après un nombre fixe d’itérations)Nombre de répétitions connu
whileOui (lorsque la condition est fausse)Condition d’arrêt inconnue
repeatOui (après un nombre fixe d’itérations)Nombre de répétitions connu
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 sans progression du temps
Arrêtez la boucle avec disable ou terminez la simulation avec $finishSinon, la simulation ne se termine jamais
À utiliser de préférence dans les bancs de testNon synthétisable
challenge icon

Défi

Que faire :

Ajoute 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 inverser 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