Menu
Coddy logo textTech

Direttiva timescale

Fa parte della sezione Fondamenti del percorso Verilog di Coddy. Lezione 70 di 90.

La direttiva timescale imposta l'unità di tempo e la precisione temporale per la simulazione. Indica al simulatore come interpretare valori di ritardo come #10.

Nelle lezioni precedenti, abbiamo usato ritardi come #10 senza specificare cosa significhi "10". Sono 10 nanosecondi? 10 picosecondi? La direttiva timescale risponde a questa domanda.

Sintassi:

`timescale time_unit / time_precision
ParteSignificatoEsempio
time_unitL'unità di base per i ritardi1ns
time_precisionLa precisione della simulazione1ps

Il backtick ` prima di timescale indica che si tratta di una direttiva del compilatore.

Esempio

`timescale 1ns / 1ps
  • time_unit = 1ns → #10 significa 10 nanosecondi
  • time_precision = 1ps → La simulazione arrotonda al picosecondo più vicino

Valori comuni della scala temporale

Unità di tempoPrecisioneCaso d'uso
1ns / 1nsNanosecondoSimulazioni semplici
1ns / 1psPicosecondoMaggiore precisione
1ps / 1psPicosecondoProgetti ad alta velocità
1us / 1nsMicrosecondoSimulazioni lente

Come influisce sui ritardi

`timescale 1ns / 1ps

initial begin
  #10 a = 1;   // Attende 10 nanosecondi
end

Senza timescale, alcuni simulatori assumono un valore predefinito (spesso 1ns). È meglio specificarlo sempre.

Regole importanti

RegolaSpiegazione
Deve trovarsi fuori dai moduliInserita prima di qualsiasi definizione di modulo
Simbolo del backtick`timescale non 'timescale 
L’unità di tempo ≥ la precisione temporale1ns / 1ps va bene, 1ps / 1ns no
Influisce su tutti i ritardi nel fileRitardi generici, ritardi dei gate, ritardi delle assegnazioni
challenge icon

Sfida

Cosa fare:

Aggiungi la direttiva timescale mancante per fare in modo che i ritardi rappresentino 10ns, 20ns e 30ns.

Provalo tu

// TODO: Aggiungi la direttiva timescale (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 iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Fondamenti

Esercitati da solo: Compilatore Verilog online