Gate Delays
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 gate-Verzögerung
| Allgemeine Verzögerung | gate-Verzögerung | |
|---|---|---|
| Syntax | #10 a = b; | and #5 (out, a, b); |
| Position | # vor einer Anweisung | # innerhalb des gate-Primitivs |
| Zweck | Vor der Ausführung warten | Die gate-Ausbreitungszeit modellieren |
Syntax:
gate_type #(delay) (output, input1, input2, ...);#(delay) gibt an, wie viele Zeiteinheiten das Gate benötigt, um zu reagieren.
Einfaches Beispiel
and #5 (out, a, b);Dieses AND-Gatter benötigt 5 time-Einheiten, um seinen output zu ändern, nachdem sich a oder b geändert hat.
Gate-Verzögerung mit mehreren Eingängen
nand #8 (out, a, b, c, d); // 4-Eingangs-NAND mit 8 Zeiteinheiten VerzögerungWichtige Regeln
| Regel | Erklärung |
|---|---|
| Verzögerung steht nach dem Gatternamen | and #5 (out, a, b) |
| Verzögerungswert in Zeiteinheiten | Basiert auf der timescale-Direktive |
| Alle inputs beeinflussen output | Jede Änderung eines inputs löst die Verzögerung aus |
| Nicht synthesefähig | Gatterverzögerungen dienen nur der Simulation |
Aufgabe
Add die fehlenden gate delays zu diesem module hinzu. Verwende unterschiedliche delays für jedes gate.
Was zu tun ist:
- AND gate: 5 time unit delay
- OR gate: 3 time unit delay
- NOT gate: 2 time unit delay
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 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