Menu
Coddy logo textTech

What Are Delays

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 Zeitverhalten realer Hardware zu modellieren.

Warum Verzögerungen erforderlich sind

Reale Hardware benötigt Zeit, damit sich Signale durch Leitungen und Gatter bewegen. Verzögerungen ermöglichen es dir, dieses Zeitverhalten zu simulieren.

  • In einer Simulation geschieht ohne Verzögerungen alles zum Zeitpunkt 0
  • Verzögerungen ermöglichen es, Ereignisse über die Zeit zu verteilen
  • Sie helfen dabei, zeitkritische Designs wie clock und Zustandsautomaten zu testen

Arten von Verzögerungen

VerzögerungstypZweck
Gate-VerzögerungenVerzögerung durch Logikgatter
Assignment-VerzögerungenVerzögerung beim Zuweisen von Werten
Timescale-DirektiveLegt die 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 die Clock um
#5 a = b;         // Warte 5 Zeiteinheiten, dann weise a = b zu

Die Zahl nach # gibt die Anzahl der Zeiteinheiten an, 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

Zeitsteuerung:

  • 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 Taktsignal (vorausgesetzt, clk wurde mit first in einem initial-Block auf 0 initialisiert. Andernfalls bleibt ~x x).

Wichtige Regeln

RegelErklärung
#-SymbolKennzeichnet eine Verzögerung
Zahl nach #Wie viele Zeiteinheiten gewartet werden soll
Verzögerungen sind kumulativ#10, dann #20 ergibt insgesamt 30 Warteeinheiten
Nicht synthetisierbarVerzögerungen sind nur für die Simulation vorgesehen
challenge icon

Aufgabe

Was zu tun ist:

Füge die fehlenden Verzögerungen hinzu, damit dieser Code Nachrichten zu den Zeitpunkten 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

Übe selbstständig: Online-Verilog-Compiler