Menu
CoddyTech

Endlosschleife

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

Die forever-Schleife wiederholt einen Codeblock ununterbrochen, für immer. Sie hört niemals von selbst auf.

Eine forever-Schleife wird endlos wiederholt ausgeführt. Sie ist nützlich, um in Testbenches Takte und andere kontinuierliche Signale zu erzeugen.

Syntax:

forever begin
  // Code, der sich endlos wiederholt
end

Einfaches Beispiel

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

Dadurch wird endlos etwas ausgegeben und deine Simulation stürzt ab. Füge immer eine Verzögerung oder eine Abbruchbedingung hinzu.

Eine Taktfrequenz erzeugen (häufige Verwendung)

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

initial begin
  clk = 0;
  forever begin
    #5 clk = ~clk;   // Alle 5 Zeiteinheiten umschalten
  end
end

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

Endlos mit Disable

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

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

Endlosschleife im Vergleich zu anderen Schleifen

SchleifeWird sie angehalten?Wann wird sie verwendet?
forJa (nach einer festgelegten Anzahl von Durchläufen)Bekannte Anzahl von Wiederholungen
whileJa (wenn die Bedingung falsch ist)Unbekannte Abbruchbedingung
repeatJa (nach einer festgelegten Anzahl von Durchläufen)Bekannte Anzahl von Wiederholungen
foreverNein (nie)Kontinuierliche Signale (Uhr)

Wichtige Regeln

RegelErklärung
Muss eine Verzögerung enthalten#10 oder @(posedge clk)
Ohne Verzögerung hängt die SimulationEndlosschleife ohne Zeitfortschritt
Beende die Schleife mit disable oder beende die Simulation mit $finishAndernfalls endet die Simulation nie
Am besten in Testbenches verwendenNicht synthetisierbar
challenge icon

Aufgabe

Was zu tun ist:

Füge die fehlende forever-Schleife hinzu, um ein Taktsignal zu erzeugen, das alle 10 Zeiteinheiten 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

Übe selbstständig: Online-Verilog-Compiler