Disable Statement
Teil des Abschnitts Grundlagen der Verilog-Journey von Coddy. Lektion 62 von 90.
Die Anweisung disable stoppt die Ausführung eines named block (wie einer forever-Schleife, eines begin-end-Blocks oder einer Aufgabe). Sie ist nützlich, um Schleifen zu verlassen, die andernfalls für immer laufen würden.
Syntax:
disable block_name;Der Block muss mit einem Namen versehen sein.
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
endDie forever-Schleife befindet sich in einem benannten counter-Block. Die Anweisung disable counter ist innerhalb der Schleife platziert. Wenn count 5 erreicht, wird disable counter ausgeführt und der gesamte counter-Block angehalten, wodurch auch die forever-Schleife sofort angehalten wird.
Disable in einem separaten Block
initial 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, wodurch die forever-Schleife von außerhalb beendet wird.
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 | Aus jedem Block im module |
Nützlich zum Stoppen von forever-Schleifen | Andernfalls stoppen sie nie |
Aufgabe
Du erhältst ein Modul mit einem Zähler, der für immer läuft.
Was zu tun ist:
Vervollständige den leeren Block, indem du jeden Kommentar durch den korrekten Code ersetzt:
- Füge
#50;hinzu, um 50 time units zu warten - Füge
disable counter;hinzu, um den counter-Block zu stoppen - Füge
$display("Counter stopped");hinzu, um die Nachricht auszugeben - 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
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. SoftwareIhr erstes ModulKommentareAbstraktionsebenen des Designs4Operators Part 1
Arithmetic OperatorsModulo OperatorComparison OperatorsRecap - Simple MathBitwise Operators7Assign And Gates
Continuous AssignmentAssign With OperatorsBuilt In Gate PrimitivesAND OR NOT GatesXOR XNOR GatesRecap - Logic Gate Circuit10Decision Making
If StatementIf - ElseRecap - Simple ComparatorCase StatementCasex And CasezRecap - ALU Design5Operators Part 2
Logical OperatorsReduction OperatorsShift OperatorsConcatenation OperatorConditional OperatorRecap - Operator Challenge3Number System
Binary RepresentationSized NumbersUnsized NumbersNegative NumbersSpecial Values X And ZRecap - Number Formats6Modules
Module StructureInput And Output PortsInout PortsModule InstantiationPort Mapping By NamePort Mapping By OrderRecap - Build A Module9Procedural Blocks
Always BlockInitial BlockSensitivity ListBlocking AssignmentNon Blocking AssignmentRecap - Always vs Initial15Traffic Light Controller
Defining The StatesState Machine LogicÜbe selbstständig: Online-Verilog-Compiler