Zuweisungsverzögerungen
Teil des Abschnitts Grundlagen der Verilog-Journey von Coddy — Lektion 69 von 90.
In vorherigen Lektionen haben wir General Delays (#10 a = b;) und Gate Delays (and #5 (out, a, b);) behandelt. Nun behandeln wir Assignment Delays, also Verzögerungen, die innerhalb eines prozeduralen Blocks (wie initial oder always) als Teil einer Zuweisungsanweisung auftreten.
Eine Zuweisungsverzögerung wartet eine bestimmte Zeit und führt dann die Zuweisung aus. Die Verzögerung wird nach dem #-Symbol und vor der Zuweisung platziert.
Syntax:
variable = #delay expression;Im Gegensatz zu einer allgemeinen delay #10 a = b; (delay dann assign) nimmt eine assignment delay a = #10 b; den Wert von b in diesem Moment auf, waits 10 time units und assigns ihn dann an a.
Assignment Delay vs General Delay
| General Delay | Assignment Delay | |
|---|---|---|
| Syntax | #10 a = b; | a = #10 b; |
| When is value read? | At time of assignment (after delay) | Immediately (before delay) |
| What value is assigned? | Value of b at that moment | Value of b at time 0 (or read time) |
| When is value assigned? | After delay | After 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 liefern hier dasselbe Ergebnis. Der Unterschied zeigt sich, wenn sich b während der Verzögerung ändert.
Key Difference Example
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
Mit einer allgemeinen Verzögerung #10 a2 = b; in einem separaten Block würde b zum Zeitpunkt 10 gelesen werden (Wert 0).
Wichtige Regeln
| Regel | Erklärung |
|---|---|
= steht vor # | a = #10 b; nicht a #10 = b; |
| Wert wird sofort gelesen | Rechte Seite wird sofort ausgewertet |
| Assignment geschieht after delay | Linke Seite gets Wert später |
| Nur für prozedurale blocks | Verwendet in initial oder always |
Aufgabe
Was zu tun ist:
Füge die fehlende assignment delay hinzu, sodass a den Wert von b after 15 time units gets, aber b sofort reads.
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. 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