Menu
Coddy logo textTech

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
end

Exemple simple

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

Cela 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
end

Cela 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
end
initial begin
  #100;
  disable clock_gen;   // Maintenant cela fonctionne
end

Forever vs Autres Boucles

BoucleS'arrête ?Quand l'utiliser
forOui (après des itérations fixes)Nombre de répétitions connu
whileOui (lorsque la condition est fausse)Condition d'arrêt inconnue
repeatOui (après des itérations fixes)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
Utiliser avec disable pour arrêterSinon la simulation ne se termine jamais
Idéal pour une utilisation dans les bancs de testNon synthétisable
challenge icon

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
end

Arrê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;
end

Règles clés :

  • Doit inclure un délai (#10 ou @(posedge clk)), sinon la simulation se bloque
  • Utilisez disable pour 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
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