Menu
Coddy logo textTech

Disable-Anweisung

Teil des Abschnitts Grundlagen der Verilog-Journey von Coddy — Lektion 62 von 90.

Die disable-Anweisung stoppt die Ausführung eines named block (wie einer forever-Schleife, eines begin-end-Blocks oder einer Task). Sie ist nützlich, um Schleifen zu verlassen, die sonst ewig laufen würden.

Syntax:

disable block_name;

Der block muss mit einem Namen versehen werden.

Disable mit Forever-Schleife

initial begin : counter // counter gibt dem Block den Namen counter.
  forever begin
    #10 count = count + 1;
    if (count == 5) begin
      disable counter;   // disable counter stoppt diesen gesamten benannten Block.
    end
  end
end

Die forever-Schleife befindet sich innerhalb eines benannten Blocks counter. Die Anweisung disable counter ist innerhalb der Schleife platziert. Wenn count 5 erreicht, wird disable counter ausgeführt und stoppt den gesamten counter-Block — was auch die forever-Schleife sofort beendet.

Disable in a Separate Block

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

initial begin
  #50;
  disable counter;   // Stoppt den counter-Block von außen
end

Hier läuft die forever-Schleife kontinuierlich innerhalb des benannten Blocks counter. Die Anweisung disable counter befindet sich in einem separaten initial-Block. Nach 50 Zeiteinheiten (time units) wird disable counter ausgeführt und stoppt den Block counter — was die forever-Schleife von outside beendet.

Wichtige Regeln

RegelErklärung
Block muss benannt werdenbegin : block_name
Disable beendet die Ausführung sofortCode stoppt genau in diesem Moment
Kann von überall verwendet werdenAus jedem beliebigen Block im Modul
Nützlich zum Stoppen von forever-SchleifenAndernfalls stoppen sie nie
challenge icon

Aufgabe

You are given a module with a counter that runs forever. 

What to do:

Complete the empty block by replacing each comment with the correct code:

  1. Füge #50; hinzu, um 50 time units zu warten
  2. Füge disable counter; hinzu, um den counter block zu stoppen
  3. Füge $display("Counter stopped"); hinzu, um die Nachricht auszugeben
  4. Füge $finish; hinzu, um die simulation zu beenden

Probier es selbst

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
        // Schritt 1: Warte 50 Zeiteinheiten
        
        // Schritt 2: Deaktiviere den counter-Block
        
        // Schritt 3: Gib "Counter stopped" aus
        
        // Schritt 4: Beende die Simulation
        
      end
    join
  end
endmodule
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Grundlagen