Gatterverzögerungen
Teil des Abschnitts Grundlagen der Verilog-Journey von Coddy. Lektion 68 von 90.
In der vorherigen Lektion haben wir allgemeine Verzögerungen behandelt, die wie #10 a = b; verwendet werden. Sie warten, bevor eine Anweisung ausgeführt wird.
In dieser Lektion behandeln wir Verzögerungen von Gattern, die für integrierte Gatterprimitiven wie and, or und not spezifisch sind. Eine Gatterverzögerung modelliert, wie lange ein Hardwaregatter benötigt, um einen Ausgang zu erzeugen, nachdem sich seine Eingänge geändert haben.
In echter Hardware reagieren Gatter nicht sofort. Es gibt eine kleine Verzögerung. Wenn du integrierte Gatterprimitive verwendest, kannst du eine Verzögerung hinzufügen, um die Ausbreitungszeit des Gatters zu simulieren. Der output ändert sich erst nach der angegebenen Verzögerung.
Unterschied zwischen allgemeiner Verzögerung und Gatterverzögerung
| Allgemeine Verzögerung | Gatterverzögerung | |
|---|---|---|
| Syntax | #10 a = b; | and #5 (out, a, b); |
| Position | # vor einer Anweisung | # innerhalb eines Gatterprimitivs |
| Zweck | Vor der Ausführung warten | Die Gatterausbreitungszeit modellieren |
Syntax:
gate_type #(delay) (output, input1, input2, ...);#(delay) gibt an, wie viele Zeiteinheiten das Gatter benötigt, um zu reagieren.
Einfaches Beispiel
and #5 (out, a, b);Dieses AND-Gatter benötigt 5 Zeiteinheiten, um seinen Ausgang zu ändern, nachdem sich a oder b geändert hat.
Gatterverzögerung mit mehreren Eingängen
nand #8 (out, a, b, c, d); // 4-Eingangs-NAND mit 8 Zeiteinheiten VerzögerungWichtige Regeln
| Regel | Erklärung |
|---|---|
| Die Verzögerung steht nach dem Gatternamen | and #5 (out, a, b) |
| Verzögerungswert in Zeiteinheiten | Basiert auf der Direktive timescale |
| Alle Eingänge beeinflussen den Ausgang | Jede Änderung eines Eingangs löst die Verzögerung aus |
| Nicht synthetisierbar | Gatterverzögerungen dienen nur der Simulation |
Aufgabe
Füge die fehlenden Gatterverzögerungen zu diesem Modul hinzu. Verwende für jedes Gatter eine andere Verzögerung.
Aufgabe:
- AND-Gatter: Verzögerung von 5 Zeiteinheiten
- OR-Gatter: Verzögerung von 3 Zeiteinheiten
- NOT-Gatter: Verzögerung von 2 Zeiteinheiten
Probier es selbst
module gate_delay_challenge;
reg a, b;
wire and_out, or_out, not_out;
// TODO: AND-Gatter mit 5 Zeiteinheiten Verzögerung hinzufügen (Eingänge a, b)
// TODO: OR-Gatter mit 3 Zeiteinheiten Verzögerung hinzufügen (Eingänge a, b)
// TODO: NOT-Gatter mit 2 Zeiteinheiten Verzögerung hinzufügen (Eingang a)
initial begin
$monitor("Time %0t: a=%b, b=%b | and=%b, or=%b, not=%b",
$time, a, b, and_out, or_out, not_out);
a = 1; b = 1;
#10 $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 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