Timescale-Direktive
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 Nanosekunden? 10 Pikosekunden? Die Direktive timescale 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 Zeitskalenwerte
| Zeiteinheit | Präzision | Anwendungsfall |
|---|---|---|
1ns / 1ns | Nanosekunde | Einfache Simulationen |
1ns / 1ps | Pikosekunde | Präzisere Simulationen |
1ps / 1ps | Pikosekunde | 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 | Wird vor jeder Moduldefinition platziert |
| Backtick-Symbol | `timescale, nicht 'timescale |
| Zeiteinheit ≥ Zeitpräzision | 1ns / 1ps ist zulässig, 1ps / 1ns nicht |
| Wirkt sich auf alle Verzögerungen in der Datei aus | Allgemeine Verzögerungen, Gatterverzögerungen, Zuweisungsverzögerungen |
Aufgabe
Was zu tun ist:
Füge die fehlende timescale-Direktive 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 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