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
endDie 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
endHier 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
| Regel | Erklärung |
|---|---|
| Block muss benannt werden | begin : block_name |
| Disable stoppt die Ausführung sofort | Der Code stoppt in diesem Moment |
| Kann von überall verwendet werden | Von jedem Block im Modul |
Nützlich zum Stoppen von forever-Schleifen | Andernfalls stoppen sie nie |
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:
- Fügen Sie
#50;hinzu, um 50 Zeiteinheiten zu warten - Fügen Sie
disable counter;hinzu, um den counter-Block zu stoppen - Fügen Sie
$display("Counter stopped");hinzu, um die Nachricht auszugeben - 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
endDeaktivieren 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
endProbier 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
endmoduleDiese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Grundlagen
1Einführung
Was ist VerilogHardware vs. SoftwareAbstraktionsebenen im DesignDein erstes ModulKommentare4Operatoren Teil 1
Arithmetische OperatorenModulo-OperatorVergleichsoperatorenWiederholung – Einfache MathematikBitweise Operatoren7Zuweisung und Gatter
Kontinuierliche ZuweisungZuweisung mit OperatorenIntegrierte Gatter-PrimitiveAND OR NOT GatterXOR XNOR GatterZusammenfassung - Logikgatterschaltung10Entscheidungsfindung
If-AnweisungIf - ElseWiederholung - Einfacher KomparatorCase-AnweisungCasex und CasezWiederholung - ALU-Design5Operatoren Teil 2
Logische OperatorenReduktionsoperatorenShift-OperatorenVerkettungsoperatorBedingter OperatorZusammenfassung – Operator-Challenge11Schleifen
For-SchleifeWhile-SchleifeRepeat-SchleifeEndlosschleifeDisable-AnweisungRückblick – Schleifenmuster3Zahlensystem
Binäre DarstellungZahlen mit GrößenangabeZahlen ohne GrößenangabeNegative ZahlenSpezialwerte X und ZZusammenfassung – Zahlenformate6Module
ModulstrukturEingangs- und Ausgangs-PortsInout-PortsModul-InstanziierungPort-Mapping nach NamePort-Mapping nach ReihenfolgeZusammenfassung – Ein Modul erstellen