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ö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
endZeitsteuerung:
- 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 umschaltenDies erzeugt ein kontinuierliches Taktsignal (vorausgesetzt, clk wurde mit first in einem initial-Block auf 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 Designs4Operators Part 1
Arithmetic OperatorsModulo OperatorComparison OperatorsRecap - Simple MathBitwise Operators7Assign And Gates
Continuous AssignmentAssign With OperatorsBuilt In Gate PrimitivesAND OR NOT GatesXOR XNOR GatesRecap - Logic Gate Circuit10Decision Making
If StatementIf - ElseRecap - Simple ComparatorCase StatementCasex And CasezRecap - ALU Design13Timing And Delays
What Are DelaysGate DelaysAssignment DelaysTimescale DirectiveClock GenerationRecap - Timing Control5Operators Part 2
Logical OperatorsReduction OperatorsShift OperatorsConcatenation OperatorConditional OperatorRecap - Operator Challenge3Number System
Binary RepresentationSized NumbersUnsized NumbersNegative NumbersSpecial Values X And ZRecap - Number Formats6Modules
Module StructureInput And Output PortsInout PortsModule InstantiationPort Mapping By NamePort Mapping By OrderRecap - Build A Module9Procedural Blocks
Always BlockInitial BlockSensitivity ListBlocking AssignmentNon Blocking AssignmentRecap - Always vs Initial15Traffic Light Controller
Defining The StatesState Machine LogicÜbe selbstständig: Online-Verilog-Compiler