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ögerungstyp | Zweck |
|---|---|
| Gatter-Verzögerungen | Verzögerung durch Logikgatter |
| Zuweisungsverzögerungen | Verzögerung bei der Zuweisung von Werten |
| Timescale-Direktive | Legt 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 zuDie 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
endTiming:
- 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 umschaltenDies erzeugt ein kontinuierliches Taktsignal.
Wichtige Regeln
| Regel | Erklärung |
|---|---|
#-Symbol | Markiert eine Verzögerung |
Zahl nach # | Wie viele Zeiteinheiten gewartet werden soll |
| Verzögerungen sind kumulativ | #10 dann #20 wartet insgesamt 30 |
| Nicht synthetisierbar | Verzögerungen dienen nur der Simulation |
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 assignVerzö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
endVerwendung in always-Blöcken zur Erzeugung von Taktsignalen:
always #5 clk = ~clk; // Toggle every 5 unitsHinweis: 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
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Grundlagen
1Einführung
Was ist VerilogHardware vs. SoftwareAbstraktionsebenen im DesignDein erstes ModulKommentare4Operatoren Teil 1
Arithmetische OperatorenModulo-OperatorVergleichsoperatorenWiederholung – Einfache MathematikBitweise Operatoren7Zuweisung und Gatter
Kontinuierliche ZuweisungZuweisung mit OperatorenIntegrierte Gatter-PrimitiveAND OR NOT GatterXOR XNOR GatterZusammenfassung - Logikgatterschaltung10Entscheidungsfindung
If-AnweisungIf - ElseWiederholung - Einfacher KomparatorCase-AnweisungCasex und CasezWiederholung - ALU-Design13Timing und Verzögerungen
Was sind VerzögerungenGatter-VerzögerungenZuweisungsverzögerungenTimescale-DirektiveTakterzeugungZusammenfassung – Timing-Steuerung5Operatoren Teil 2
Logische OperatorenReduktionsoperatorenShift-OperatorenVerkettungsoperatorBedingter OperatorZusammenfassung – Operator-Challenge11Schleifen
For-SchleifeWhile-SchleifeRepeat-SchleifeEndlosschleifeDisable-AnweisungRückblick – Schleifenmuster3Zahlensystem
Binäre DarstellungZahlen mit GrößenangabeZahlen ohne GrößenangabeNegative ZahlenSpezialwerte X und ZZusammenfassung – Zahlenformate6Module
ModulstrukturEingangs- und Ausgangs-PortsInout-PortsModul-InstanziierungPort-Mapping nach NamePort-Mapping nach ReihenfolgeZusammenfassung – Ein Modul erstellen