Menu
Coddy logo textTech

Timescale-Direktive

Teil des Abschnitts Grundlagen der Verilog-Journey von Coddy — Lektion 70 von 90.

Die timescale-Direktive legt die Zeiteinheit (time_unit) und Zeitpräzision (time_precision) für die Simulation fest. Sie gibt dem Simulator an, 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 timescale-Direktive beantwortet diese Frage.

Syntax:

`timescale time_unit / time_precision
TeilBedeutungBeispiel
time_unitDie Grundeinheit für Verzögerungen1ns
time_precisionWie präzise die Simulation sein sollte1ps

Das Gravis-Zeichen ` vor timescale bedeutet, dass es sich um eine Compiler-Direktive handelt.

Beispiel

`timescale 1ns / 1ps
  • time_unit = 1ns#10 bedeutet 10 nanoseconds
  • time_precision = 1ps → Die Simulation rundet auf die nächste Pikosekunde

Gängige Timescale-Werte

Time UnitPrecisionAnwendungsfall
1ns / 1nsNanosekundeEinfache Simulationen
1ns / 1psPikosekundePräziser
1ps / 1psPikosekundeHigh-Speed-Designs
1us / 1nsMikrosekundeLangsame Simulationen

Wie es sich auf Verzögerungen auswirkt

`timescale 1ns / 1ps

initial begin
  #10 a = 1;   // Wartet 10 Nanosekunden
end

Ohne timescale nehmen einige Simulatoren einen Standardwert an (oft 1ns). Es ist am besten, diesen immer anzugeben.

Wichtige Regeln

RegelErklärung
Muss außerhalb von Modulen stehenVor jeglicher Moduldefinition platziert
Backtick-Symbol`timescale nicht 'timescale 
Zeiteinheit ≥ Zeitpräzision1ns / 1ps ist in Ordnung, 1ps / 1ns nicht
Betrifft alle Verzögerungen in der DateiAllgemeine Verzögerungen, Gate-Verzögerungen, Zuweisungsverzögerungen
challenge icon

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
endmodule
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Grundlagen