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 sie eine Anweisung ausführen.
In dieser Lektion behandeln wir Gatterlaufzeiten, die für eingebaute Gatterprimitive wie and, or und not spezifisch sind. Eine Gatterlaufzeit modelliert, wie lange ein Hardwaregatter benötigt, um eine Ausgabe 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 Laufzeit des Gatters zu simulieren. Der Ausgang ä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 Ausbreitungszeit des Gatters 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 UND-Gatter benötigt 5 Zeiteinheiten, um seinen Ausgang zu ändern, nachdem sich a oder b geändert hat.
Gatterlaufzeit bei mehreren Eingängen
nand #8 (out, a, b, c, d); // NAND mit 4 Eingängen und einer Verzögerung von 8 ZeiteinheitenWichtige Regeln
| Regel | Erklärung |
|---|---|
| Die Verzögerung steht nach dem Namen des Gatters | and #5 (out, a, b) |
| Verzögerungswert in Zeiteinheiten | Basierend auf der timescale-Direktive |
| Alle Eingänge beeinflussen den Ausgang | Eine Änderung an einem beliebigen Eingang kann den Ausgang ändern, aber erst nach der Verzögerung |
| Nicht synthetisierbar | Gatterverzögerungen dienen nur der Simulation |
Aufgabe
Füge diesem Modul die fehlenden Gatterlaufzeiten hinzu. Verwende für jedes Gatter eine andere Laufzeit.
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 einer Verzögerung von 5 Zeiteinheiten hinzufügen (Eingänge a, b)
// TODO: OR-Gatter mit einer Verzögerung von 3 Zeiteinheiten hinzufügen (Eingänge a, b)
// TODO: NOT-Gatter mit einer Verzögerung von 2 Zeiteinheiten 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