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| Parte | Significato | Esempio |
|---|---|---|
time_unit | L'unità di base per i ritardi | 1ns |
time_precision | La precisione della simulazione | 1ps |
Il backtick ` prima di timescale indica che si tratta di una direttiva del compilatore.
Esempio
`timescale 1ns / 1pstime_unit = 1ns→#10significa 10 nanoseconditime_precision = 1ps→ La simulazione arrotonda al picosecondo più vicino
Valori comuni della scala temporale
| Unità di tempo | Precisione | Caso d'uso |
|---|---|---|
1ns / 1ns | Nanosecondo | Simulazioni semplici |
1ns / 1ps | Picosecondo | Maggiore precisione |
1ps / 1ps | Picosecondo | Progetti ad alta velocità |
1us / 1ns | Microsecondo | Simulazioni lente |
Come influisce sui ritardi
`timescale 1ns / 1ps
initial begin
#10 a = 1; // Attende 10 nanosecondi
endSenza timescale, alcuni simulatori assumono un valore predefinito (spesso 1ns). È meglio specificarlo sempre.
Regole importanti
| Regola | Spiegazione |
|---|---|
| Deve trovarsi fuori dai moduli | Inserita prima di qualsiasi definizione di modulo |
| Simbolo del backtick | `timescale non 'timescale |
| L’unità di tempo ≥ la precisione temporale | 1ns / 1ps va bene, 1ps / 1ns no |
| Influisce su tutti i ritardi nel file | Ritardi generici, ritardi dei gate, ritardi delle assegnazioni |
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
endmoduleQuesta lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Fondamenti
1Introduzione
Cos'è VerilogHardware e software a confrontoIl tuo primo moduloCommentiLivelli di astrazione della progettazione4Operatori - Parte 1
Operatori aritmeticiOperatore moduloOperatori di confrontoRiepilogo - Matematica sempliceOperatori bitwise7Assegnazioni e porte
Assegnazione continuaAssegnazioni con operatoriPrimitive di porte integratePorte AND, OR e NOTPorte XOR e XNORRiepilogo: circuito con porte logiche10Decisioni
Istruzione ifIf-ElseRiepilogo - Comparatore sempliceIstruzione caseCasex e casezRiepilogo - Progettazione di una ALU13Tempi e ritardi
Cosa sono i ritardiRitardi nei gateRitardi nelle assegnazioniDirettiva timescaleGenerazione del clockRiepilogo - Controllo dei tempi5Operatori Parte 2
Operatori logiciOperatori di riduzioneOperatori di scorrimentoOperatore di concatenazioneOperatore condizionaleRiepilogo - Sfida sugli operatori3Sistema numerico
Rappresentazione binariaNumeri con dimensione specificataNumeri senza dimensione specificataNumeri negativiValori speciali X e ZRiepilogo - Formati numerici6Moduli
Struttura di un moduloPorte di input e outputPorte InoutIstanziazione di un moduloMappatura delle porte per nomeMappatura delle porte per ordineRiepilogo - Costruire un modulo9Blocchi procedurali
Blocco alwaysBlocco initialLista di sensibilitàAssegnazione bloccanteAssegnazione non bloccanteRiepilogo: always vs initial12Progetto Multiplexer
Progettazione di un mux da 2 a 1Progettazione di un mux da 4 a 1Esercitati da solo: Compilatore Verilog online