Timescale Directive
Teil des Abschnitts Grundlagen der Verilog-Journey von Coddy. Lektion 70 von 90.
Die timescale-Direktive legt die Zeiteinheit und die Zeitpräzision für die Simulation fest. Sie teilt dem Simulator mit, wie Verzögerungswerte wie #10 zu interpretieren sind.
In vorherigen Lektionen haben wir Verzögerungen wie #10 verwendet, ohne anzugeben, was „10“ bedeutet. Sind es 10 nanoseconds? 10 Pikosekunden? Die timescale-Direktive beantwortet diese Frage.
Syntax:
`timescale time_unit / time_precision| Teil | Bedeutung | Beispiel |
|---|---|---|
time_unit | Die grundlegende Einheit für Verzögerungen | 1ns |
time_precision | Wie präzise die Simulation sein soll | 1ps |
Der Backtick ` vor timescale bedeutet, dass es sich um eine Compiler-Direktive handelt.
Beispiel
`timescale 1ns / 1pstime_unit = 1ns→#10bedeutet 10 Nanosekundentime_precision = 1ps→ Die Simulation wird auf die nächste Pikosekunde gerundet
Übliche Timescale-Werte
| Zeiteinheit | Präzision | Anwendungsfall |
|---|---|---|
1ns / 1ns | Nanosekunde | Einfache Simulationen |
1ns / 1ps | Picosekunde | Höhere Präzision |
1ps / 1ps | Picosekunde | Hochgeschwindigkeitsdesigns |
1us / 1ns | Mikrosekunde | Langsame Simulationen |
Wie es Verzögerungen beeinflusst
`timescale 1ns / 1ps
initial begin
#10 a = 1; // Wartet 10 Nanosekunden
endOhne timescale nehmen einige Simulatoren einen Standardwert an (häufig 1ns). Am besten gibst du ihn immer an.
Wichtige Regeln
| Regel | Erklärung |
|---|---|
| Muss außerhalb von Modulen stehen | Vor jeder module-Definition platziert |
| Backtick-Symbol | `timescale nicht 'timescale |
| time unit ≥ time precision | 1ns / 1ps ist korrekt, 1ps / 1ns nicht |
| Betrifft alle Verzögerungen in der Datei | Allgemeine Verzögerungen, Gatterverzögerungen, Zuweisungsverzögerungen |
Aufgabe
Was zu tun ist:
Füge die fehlende timescale-directive hinzu, damit die Verzögerungen 10ns, 20ns und 30ns darstellen.
Probier es selbst
// TODO: Timescale-Direktive hinzufügen (1ns / 1ps)
module timescale_challenge;
initial begin
$display("Time %0t", $time);
#10 $display("Time %0t (10ns = 10000ps)", $time);
#10 $display("Time %0t (20ns = 20000ps)", $time);
#10 $display("Time %0t (30ns = 30000ps)", $time);
$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