Menu
CoddyTech

Anweisung deaktivieren

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

Die Anweisung disable stoppt die Ausführung eines benannten Blocks (wie einer forever-Schleife, eines begin-end-Blocks oder einer Aufgabe). Sie ist nützlich, um Schleifen abzubrechen, die andernfalls für immer laufen würden.

Syntax:

disable block_name;

Der Block muss mit einem Namen gekennzeichnet sein.

Mit einer Endlosschleife deaktivieren

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 den gesamten benannten Block.
    end
  end
end

Die forever-Schleife befindet sich in einem benannten Block counter. Die Anweisung disable counter steht innerhalb der Schleife. Wenn count 5 erreicht, wird disable counter ausgeführt und stoppt den gesamten Block counter, wodurch auch die forever-Schleife sofort beendet wird.

In einem separaten Block deaktivieren

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 wird disable counter ausgeführt und stoppt den counter-Block, wodurch die forever-Schleife von außen beendet wird.

Wichtige Regeln

RegelErklärung
Der Block muss benannt werdenbegin : block_name
Disable beendet die Ausführung sofortDer Code stoppt in diesem Moment
Kann von überall aus verwendet werdenVon jedem Block im Modul aus
Nützlich zum Stoppen von forever-SchleifenAndernfalls hören sie nie auf
challenge icon

Aufgabe

Dir wird ein Modul mit einem Zähler gegeben, der für immer läuft. 

Aufgabe:

Vervollständige den leeren Block, indem du jeden Kommentar durch den passenden Code ersetzt:

  1. Füge #50; hinzu, um 50 Zeiteinheiten zu warten
  2. Füge disable counter; hinzu, um den Zählerblock anzuhalten
  3. Füge $display("Counter stopped"); hinzu, um die Meldung 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 Zählerblock
        
        // 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

Übe selbstständig: Online-Verilog-Compiler