Menu
Coddy logo textTech

Was sind Verzögerungen

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

In Verilog steuern Verzögerungen, wann eine Anweisung ausgeführt wird oder wann sich ein Signal ändert. Sie werden verwendet, um das reale Timing-Verhalten von Hardware zu modellieren.

Warum Verzögerungen benötigt werden

Echte Hardware benötigt Zeit, damit Signale durch Drähte und Gatter fließen können. 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 über die Zeit zu verteilen
  • Sie helfen dabei, zeitkritische Designs wie Taktgeber und Zustandsautomaten zu testen

Arten von Verzögerungen

VerzögerungstypZweck
Gatter-VerzögerungenVerzögerung durch Logikgatter
ZuweisungsverzögerungenVerzögerung bei der Zuweisung von Werten
Timescale-DirektiveLegt Zeiteinheiten für die Simulation fest

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

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

Verzögerungen in Always-Blöcken

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

Dies erzeugt ein kontinuierliches Taktsignal.

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ügen Sie die fehlenden Verzögerungen hinzu, damit dieser Code Nachrichten zu den Zeiten 0, 10, 25 und 40 ausgibt.

Spickzettel

In Verilog verwenden Verzögerungen (delays) das Zeichen # gefolgt von Zeiteinheiten, um zu steuern, wann Anweisungen ausgeführt werden:

#10 a = 1;   // Wait 10 time units, then assign

Verzögerungen sind kumulativ — jede Verzögerung addiert sich zur aktuellen Zeit:

initial begin
  a = 0;      // Time 0
  #10 a = 1;  // Time 10
  #5  a = 0;  // Time 15
end

Verwendung in always-Blöcken zur Erzeugung von Taktsignalen:

always #5 clk = ~clk;  // Toggle every 5 units

Hinweis: Verzögerungen sind nur für die Simulation gedacht — sie sind nicht synthetisierbar.

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