Menu
Coddy logo textTech

Forever Loop

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

Die forever loop wiederholt einen Codeblock kontinuierlich, forever. Sie stoppt nie von selbst.

Eine forever-Schleife wird ohne end wiederholt ausgeführt. Sie ist nützlich zum Erzeugen von Taktsignalen und anderen kontinuierlichen Signalen in Testbenches.

Syntax:

forever begin
  // Code, der sich für immer wiederholt
end

Einfaches Beispiel

forever begin
  $display("This prints forever");
end

Dies wird endlos ausgegeben und deine Simulation zum Absturz bringen. Füge immer eine Verzögerung oder eine Abbruchbedingung hinzu.

Eine Uhr erzeugen (häufige Verwendung)

Die häufigste Verwendung von forever besteht darin, eine Uhr zu erzeugen:

initial begin
  clk = 0;
  forever begin
    #5 clk = ~clk;   // Umschalten alle 5 Zeiteinheiten
  end
end

Dies erstellt eine Uhr, die während der gesamten Simulation läuft.

forever mit disable

Du kannst eine forever-Schleife mit einer disable-Anweisung stoppen:

initial begin : clock_gen   // Name hier hinzugefügt
  clk = 0;
  forever begin
    #5 clk = ~clk;
  end
end
initial begin
  #100;
  disable clock_gen;   // Jetzt funktioniert das
end

forever im Vergleich zu anderen loop

loopStoppt?Wann verwenden?
forJa (nach einer festgelegten Anzahl von Iterationen)Bekannte Anzahl von repeats
whileJa (wenn die Bedingung falsch ist)Unbekannte Abbruchbedingung
repeatJa (nach einer festgelegten Anzahl von Iterationen)Bekannte Anzahl von repeats
foreverNein (niemals)Kontinuierliche Signale (Takt)

Wichtige Regeln

RegelErklärung
Muss eine Verzögerung enthalten#10 oder @(posedge clk)
Ohne Verzögerung hängt die SimulationEndlosschleife ohne time advancement
Mit disable verwenden, um zu stoppenOder die Simulation endet nie
Am besten in Testbenches verwendenNicht synthesizierbar
challenge icon

Aufgabe

Was zu tun ist:

Füge die fehlende forever-Schleife hinzu, um eine Uhr zu erzeugen, die sich every 10 time units umschaltet.

Probier es selbst

module forever_challenge;
  reg clk;
  
  initial begin
    clk = 0;
    // TODO: forever-Schleife hinzufügen, um clk alle 10 Zeiteinheiten umzuschalten
  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