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

Exemple simple

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

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

Cela 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
end
initial begin
  #100;
  disable clock_gen;   // Maintenant ça 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 (quand 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 s'arrête jamais
À utiliser de préférence dans les testbenchesNon 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.

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