Endlosschleife
Teil des Abschnitts Grundlagen der Verilog-Journey von Coddy — Lektion 61 von 90.
Die forever-Schleife wiederholt einen Codeblock kontinuierlich, für immer. Sie hört niemals von selbst auf.
Eine forever-Schleife wird endlos wiederholt ausgeführt. Sie ist nützlich für die Erzeugung von Taktsignalen und anderen kontinuierlichen Signalen in Testbenches.
Syntax:
forever begin
// Code, der endlos wiederholt wird
endEinfaches Beispiel
forever begin
$display("This prints forever");
endDies wird endlos ausgegeben und bringt deine Simulation zum Absturz. Füge immer eine Verzögerung oder eine Abbruchbedingung hinzu.
Erzeugen eines Takts (Häufige Verwendung)
Die häufigste Verwendung von forever ist das Erzeugen eines Takts:
initial begin
clk = 0;
forever begin
#5 clk = ~clk; // Alle 5 Zeiteinheiten umschalten
end
endDies erstellt eine Uhr, die während der gesamten Simulation läuft.
Forever mit Disable
Sie können eine forever-Schleife mit einer disable-Anweisung stoppen:
initial begin : clock_gen // Name hier hinzugefügt
clk = 0;
forever begin
#5 clk = ~clk;
end
endinitial begin
#100;
disable clock_gen; // Jetzt funktioniert dies
endForever vs. andere Schleifen
| Schleife | Stoppt? | Verwendung |
|---|---|---|
for | Ja (nach festen Iterationen) | Bekannte Anzahl an Wiederholungen |
while | Ja (wenn Bedingung falsch ist) | Unbekannte Stoppbedingung |
repeat | Ja (nach festen Iterationen) | Bekannte Anzahl an Wiederholungen |
forever | Nein (niemals) | Kontinuierliche Signale (Takt) |
Wichtige Regeln
| Regel | Erklärung |
|---|---|
| Muss eine Verzögerung enthalten | #10 oder @(posedge clk) |
| Ohne Verzögerung hängt die Simulation | Endlosschleife ohne Zeitfortschritt |
Zusammen mit disable verwenden, um zu stoppen | Oder die Simulation endet nie |
| Am besten in Testbenches verwenden | Nicht synthetisierbar |
Aufgabe
Was zu tun ist:
Fügen Sie die fehlende forever-Schleife hinzu, um einen Takt (Clock) zu erzeugen, der alle 10 Zeiteinheiten umschaltet.
Spickzettel
Die forever-Schleife wiederholt einen Codeblock kontinuierlich ohne Unterbrechung. Fügen Sie immer eine Verzögerung hinzu, um ein Aufhängen der Simulation zu verhindern.
initial begin
clk = 0;
forever begin
#5 clk = ~clk; // Toggle every 5 time units
end
endStoppen Sie eine forever-Schleife mit disable in Verbindung mit einem benannten Block:
initial begin : clock_gen
clk = 0;
forever begin
#5 clk = ~clk;
end
end
initial begin
#100;
disable clock_gen;
endWichtige Regeln:
- Muss eine Verzögerung enthalten (
#10oder@(posedge clk)), andernfalls hängt sich die Simulation auf - Verwenden Sie
disablezum Stoppen, da die Simulation sonst nie endet - Nicht synthetisierbar — nur für die Verwendung in Testbenches
Probier es selbst
module forever_challenge;
reg clk;
initial begin
clk = 0;
// TODO: Füge eine forever-Schleife hinzu, um clk alle 10 Zeiteinheiten umzuschalten
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