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 benannten Blocks (wie eine forever-Schleife, ein begin-end-Block oder ein Task). Sie ist nützlich, um Schleifen zu verlassen, die andernfalls ewig laufen würden.

Syntax:

disable block_name;

Der Block muss mit einem Namen gekennzeichnet sein.

Deaktivieren mit Forever-Schleife

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 innerhalb eines benannten Blocks counter. Die Anweisung disable counter befindet sich innerhalb der Schleife. Wenn count den Wert 5 erreicht, wird disable counter ausgeführt und stoppt den gesamten Block counter – was auch die forever-Schleife sofort beendet.

In einem separaten Block deaktivieren

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 — was die forever-Schleife von außen beendet.

Wichtige Regeln

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

Aufgabe

Ihnen wird ein Modul mit einem Zähler gegeben, der endlos läuft. 

Was zu tun ist:

Vervollständigen Sie den leeren Block, indem Sie jeden Kommentar durch den korrekten Code ersetzen:

  1. Fügen Sie #50; hinzu, um 50 Zeiteinheiten zu warten
  2. Fügen Sie disable counter; hinzu, um den counter-Block zu stoppen
  3. Fügen Sie $display("Counter stopped"); hinzu, um die Nachricht auszugeben
  4. Fügen Sie $finish; hinzu, um die Simulation zu beenden

Spickzettel

Die disable-Anweisung stoppt die Ausführung eines benannten Blocks (z. B. einer forever-Schleife). Der Block muss mit begin : block_name gekennzeichnet sein.

Deaktivieren von innerhalb des Blocks:

begin : counter
  forever begin
    #10 count = count + 1;
    if (count == 5) disable counter;
  end
end

Deaktivieren von einem separaten Block aus:

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

initial begin
  #50;
  disable counter; // stoppt den benannten Block von außen
end

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: 50 Zeiteinheiten warten
        
        // Schritt 2: Den Counter-Block deaktivieren
        
        // Schritt 3: "Counter stopped" ausgeben
        
        // Schritt 4: Die Simulation beenden
        
      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