Assignment Delays
Teil des Abschnitts Grundlagen der Verilog-Journey von Coddy. Lektion 69 von 90.
In vorherigen Lektionen haben wir allgemeine Verzögerungen (#10 a = b;) und Gate-Verzögerungen (and #5 (out, a, b);) behandelt. Nun behandeln wir assignment-Verzögerungen, also Verzögerungen, die innerhalb eines prozeduralen block (wie initial oder always) als Teil einer assignment-Anweisung auftreten.
Eine assignment delay wartet eine angegebene Zeit und führt dann die assignment aus. Die delay wird after dem #-Symbol und before der assignment platziert.
Syntax:
variable = #delay expression;Im Gegensatz zu einer allgemeinen Verzögerung #10 a = b; (verzögern, dann zuweisen) nimmt eine Zuweisungsverzögerung a = #10 b; den Wert von b in diesem Moment, wartet 10 Zeiteinheiten und weist ihn dann a zu.
Assignment Delay gegenüber General Delay
| General Delay | Assignment Delay | |
|---|---|---|
| Syntax | #10 a = b; | a = #10 b; |
| Wann wird der Wert gelesen? | Zum Zeitpunkt der Zuweisung (nach delay) | Sofort (vor delay) |
| Welcher Wert wird zugewiesen? | Wert von b zu diesem Zeitpunkt | Wert von b bei time 0 (oder zur read time) |
| Wann wird der Wert zugewiesen? | Nach delay | Nach delay |
Beispiel: Der Unterschied
initial begin
b = 1;
#5 b = 0;
// Allgemeine Verzögerung
#10 a1 = b; // Wartet 10, dann liest b (b=0) → a1=0
// Zuweisungsverzögerung
a2 = #10 b; // Liest b jetzt (b=0), wartet 10, dann weist zu → a2=0
endBeide ergeben hier dasselbe Ergebnis. Der Unterschied zeigt sich, wenn sich b während der Verzögerung ändert.
Beispiel für den entscheidenden Unterschied
To show b changing during the delay, we need two separate initial blocks that run in parallel:
initial begin
b = 1;
a1 = #10 b; // Liest b=1 zum Zeitpunkt 0, weist a1=1 zum Zeitpunkt 10 zu
end
initial begin
#5 b = 0; // Ändert b auf 0 zum Zeitpunkt 5 (während der Verzögerung)
end- Zum Zeitpunkt 0:
a1liestb = 1 - Zum Zeitpunkt 5:
bändert sich zu0(währenda1noch wartet) - Zum Zeitpunkt 10:
a1wird1zugewiesen (der zum Zeitpunkt 0 gelesene Wert), nicht0
Bei einer allgemeinen Verzögerung #10 a2 = b; in einem separaten Block würde b zum Zeitpunkt 10 gelesen (Wert 0).
Wichtige Regeln
| Regel | Erklärung |
|---|---|
= steht vor # | a = #10 b;, nicht a #10 = b; |
| Der Wert wird sofort gelesen | Die rechte Seite wird sofort ausgewertet |
| Assignment happens after delay | Die linke Seite erhält den Wert später |
| Nur für prozedurale block | Wird in initial oder always verwendet |
Aufgabe
Was zu tun ist:
Füge die fehlende Zuweisungsverzögerung hinzu, sodass a nach 15 Zeiteinheiten den Wert von b erhält, aber b sofort liest.
Probier es selbst
module assignment_challenge;
reg a, b;
// Separater Block, um b während der Verzögerung zu ändern
initial begin
b = 1;
// TODO: Zuweisungsverzögerung hinzufügen
// a sollte b nach 15 Zeiteinheiten erhalten
// b jetzt lesen, nach Verzögerung zuweisen
end
initial begin
#5 b = 0; // Ändert b während der Verzögerung
#20 $display("Time %0t: a = %b", $time, a);
$finish;
end
endmoduleDiese 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