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 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 dir, Ereignisse über die Zeit zu verteilen
- Sie helfen dabei, zeitkritische Designs wie Taktgeber und Zustandsautomaten zu testen
Arten von Verzögerungen
| Verzögerungstyp | Zweck |
|---|---|
| Gate-Verzögerungen | Verzögerung durch Logikgatter |
| Assignment-Verzögerungen | Verzögerung beim Zuweisen von Werten |
| Timescale-Direktive | Legt 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 zuDie 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
endZeitliche Abfolge:
- Zeit 0:
a = 0 - Zeit 10:
a = 1 - Zeit 15:
a = 0
Verzögerungen in Always-Blöcken
always #5 clk = ~clk; // Takt alle 5 Zeiteinheiten umschaltenDies erzeugt ein kontinuierliches Taktsignal (vorausgesetzt, clk wurde in einem initial-Block zunächst mit 0 initialisiert. Andernfalls bleibt ~x x).
Wichtige Regeln
| Regel | Erklärung |
|---|---|
#-Symbol | Kennzeichnet eine Verzögerung |
Zahl nach # | Wie viele Zeiteinheiten gewartet werden soll |
| Verzögerungen sind kumulativ | #10, dann #20 ergibt insgesamt 30 Warteeinheiten |
| Nicht synthetisierbar | Verzögerungen sind nur für die Simulation vorgesehen |
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
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. SoftwareIhr erstes ModulKommentareAbstraktionsebenen des Designs4Operatoren Teil 1
Arithmetische OperatorenModulo-OperatorVergleichsoperatorenWiederholung – einfache MathematikBitweise Operatoren7Zuweisungen und Gatter
Kontinuierliche ZuweisungZuweisung mit OperatorenIntegrierte Gatter-GrundelementeUND-, ODER- und NICHT-GatterXOR- und XNOR-GatterRückblick – Logikgatter-Schaltung10Entscheidungsfindung
If-AnweisungIf – ElseRückblick – Einfacher KomparatorCase-AnweisungCasex und CasezRückblick – ALU-Entwurf13Zeitsteuerung und Verzögerungen
Was sind Verzögerungen?GatterverzögerungenZuweisungsverzögerungenTimescale-DirektiveTakterzeugungZusammenfassung – Zeitsteuerung2Datentypen
Wire-TypReg-TypInteger und RealVektorenArraysParameterZusammenfassung – Signale deklarieren5Operatoren Teil 2
Logische OperatorenReduktionsoperatorenSchiebeoperatorenVerkettungsoperatorBedingter OperatorRückblick – Operatoren-Herausforderung11Schleifen
For-SchleifeWhile-SchleifeWiederholungsschleifeEndlosschleifeAnweisung deaktivierenRückblick – Schleifenmuster3Zahlensystem
Binäre DarstellungZahlen mit fester BreiteZahlen ohne feste BreiteNegative ZahlenSpezialwerte X und ZZusammenfassung – Zahlenformate6Module
ModulstrukturInput- und Output-PortsInout-PortsModulinstanziierungPortzuordnung nach NamenPortzuordnung nach ReihenfolgeRückblick – Ein Modul erstellenÜbe selbstständig: Online-Verilog-Compiler