Menu
Coddy logo textTech

Endlosschleife

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

Die forever-Schleife wiederholt einen Codeblock kontinuierlich und für immer. Sie stoppt niemals von selbst.

Eine forever-Schleife wird wiederholt ohne Ende ausgeführt. Sie ist nützlich für die Erzeugung von Clocks 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 drucken und Ihre Simulation zum Absturz bringen. Fügen Sie immer eine Verzögerung oder eine Abbruchbedingung hinzu.

Erzeugen eines Takts (häufige Verwendung)

Die häufigste Verwendung von forever ist das Erzeugen eines Taktsignals:

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

Dies erzeugt einen Takt, der während der gesamten Simulation läuft.

Forever with 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
end
initial begin
  #100;
  disable clock_gen;   // Jetzt funktioniert das
end

Forever vs. andere Schleifen

SchleifeStoppt sie?Wann zu verwenden
forJa (nach festen Iterationen)Bekannte Anzahl von Wiederholungen
whileJa (wenn Bedingung falsch)Unbekannte Stoppbedingung
repeatJa (nach festen Iterationen)Bekannte Anzahl von Wiederholungen
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 Zeitfortschritt
Verwenden Sie disable zum StoppenOder die Simulation endet nie
Am besten in Testbenches verwendetNicht synthetisierbar
challenge icon

Aufgabe

Was zu tun ist:

Add die fehlende forever loop, um einen Takt zu erzeugen, that every 10 time units umschaltet.

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
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