Menu
Coddy logo textTech

Instruction Disable

Fait partie de la section Fondamentaux du Journey Verilog de Coddy — leçon 62 sur 90.

L'instruction disable arrête l'exécution d'un bloc nommé (comme une boucle forever, un bloc begin-end ou une tâche). Elle est utile pour sortir de boucles qui s'exécuteraient autrement de manière infinie.

Syntaxe :

disable block_name;

Le bloc doit être étiqueté avec un nom.

Disable avec boucle Forever

initial begin : counter // counter donne au bloc le nom counter.
  forever begin
    #10 count = count + 1;
    if (count == 5) begin
      disable counter;   // disable counter arrête tout ce bloc nommé.
    end
  end
end

La boucle forever se trouve à l'intérieur d'un bloc nommé counter. L'instruction disable counter est placée à l'intérieur de la boucle. Lorsque count atteint 5, disable counter s'exécute et arrête le bloc entier counter — ce qui arrête également immédiatement la boucle forever.

Désactiver dans un bloc séparé

initial begin : counter
  forever begin
    #10 count = count + 1;
  end
end

initial begin
  #50;
  disable counter;   // Arrête le bloc counter de l'extérieur
end

Ici, la boucle forever s'exécute en continu à l'intérieur du bloc nommé counter. L'instruction disable counter est placée dans un bloc initial séparé. Après 50 unités de temps, disable counter s'exécute et arrête le bloc counter — ce qui termine la boucle forever depuis l'extérieur.

Règles importantes

RègleExplication
Block must be namedbegin : block_name
Disable stops execution immediatelyCode stops at that moment
Can be used from anywhereFrom any block in the module
Useful for stopping forever loopsOtherwise they never stop
challenge icon

Défi

Vous recevez un module avec un compteur qui s'exécute indéfiniment. 

Ce qu'il faut faire :

Remplissez le bloc vide en remplaçant chaque commentaire par le code approprié :

  1. Ajoutez #50; pour attendre 50 unités de temps
  2. Ajoutez disable counter; pour arrêter le bloc counter
  3. Ajoutez $display("Counter stopped"); pour afficher le message
  4. Ajoutez $finish; pour terminer la simulation

Essayez vous-même

module disable_challenge;
  integer count;
  
  initial begin
    count = 0;
    fork
      begin : counter
        forever begin
          #10 count = count + 1;
          $display("count = %d", count);
        end
      end
      
      begin
        // Étape 1 : Attendre 50 unités de temps
        
        // Étape 2 : Désactiver le bloc counter
        
        // Étape 3 : Afficher "Counter stopped"
        
        // Étape 4 : Terminer la simulation
        
      end
    join
  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