Menu
Coddy logo textTech

Was sind Verzögerungen

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

In Verilog steuern Delays (Verzögerungen), wann eine Anweisung ausgeführt wird oder wann sich ein Signal ändert. Sie werden verwendet, um das zeitliche Verhalten realer Hardware zu modellieren.

Warum Verzögerungen benötigt werden

Echte Hardware benötigt Zeit, damit Signale durch Drähte und Gatter laufen. Verzögerungen ermöglichen es Ihnen, dieses Zeitverhalten zu simulieren.

  • In der Simulation passiert ohne Verzögerungen alles zum Zeitpunkt 0
  • Verzögerungen ermöglichen es Ihnen, Ereignisse zeitlich zu staffeln
  • Sie helfen beim Testen zeitsensitiver Designs wie Taktgebern und Zustandsautomaten

Arten von Delays

Delay-TypZweck
Gate DelaysVerzögerung durch Logikgatter
Assignment DelaysVerzögerung beim Zuweisen von Werten
Timescale DirectiveSetzt Zeiteinheiten für die Simulation

Grundlegende Syntax

Eine Verzögerung wird mit einem # gefolgt von einer Zahl geschrieben:

#10 clk = ~clk;   // Warte 10 Zeiteinheiten, dann schalte den Takt um
#5 a = b;         // Warte 5 Zeiteinheiten, dann weise a = b zu

Die Zahl nach # ist die Anzahl der Zeiteinheiten (time units), die gewartet werden soll.

Einfaches Beispiel

initial begin
  a = 0;
  #10 a = 1;   // Nach 10 Zeiteinheiten wird a zu 1
  #5 a = 0;    // Nach weiteren 5 Zeiteinheiten wird a zu 0
end

Timing:

  • Time 0: a = 0
  • Time 10: a = 1
  • Time 15: a = 0

Verzögerungen in Always-Blöcken

always #5 clk = ~clk;   // Takt alle 5 Zeiteinheiten umschalten

Dies erzeugt ein kontinuierliches clock-Signal (unter der Annahme, dass clk first in einem initial-Block auf 0 initialisiert wurde — andernfalls bleibt ~x x).

Wichtige Regeln

RegelErklärung
#-SymbolMarkiert eine Verzögerung
Zahl nach #Wie viele Zeiteinheiten gewartet werden soll
Verzögerungen sind kumulativ#10 dann #20 wartet insgesamt 30
Nicht synthetisierbarVerzögerungen dienen nur der Simulation
challenge icon

Aufgabe

Was zu tun ist:

Füge die fehlenden Verzögerungen hinzu, damit dieser Code Nachrichten zu den Zeiten 0, 10, 25 und 40 ausgibt.

Probier es selbst

module delay_challenge;
  
  initial begin
    $display("Time %0t: Start", $time);
    // TODO: Verzögerung hinzufügen, um Zeit 10 zu erreichen
    $display("Time %0t: After first delay", $time);
    // TODO: Verzögerung hinzufügen, um Zeit 25 zu erreichen
    $display("Time %0t: After second delay", $time);
    // TODO: Verzögerung hinzufügen, um Zeit 40 zu erreichen
    $display("Time %0t: End", $time);
    $finish;
  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