Menu
Coddy logo textTech

Timescale Directive

Fait partie de la section Fondamentaux du Journey Verilog de Coddy. Leçon 70 sur 90.

La directive timescale définit l’unité de temps et la précision temporelle de la simulation. Elle indique au simulateur comment interpréter les valeurs de délai telles que #10.

Dans les leçons précédentes, nous avons utilisé des délais comme #10 sans préciser ce que signifie « 10 ». S’agit-il de 10 nanoseconds ? De 10 picoseconds ? La directive timescale répond à cette question.

Syntaxe :

`timescale time_unit / time_precision
PartieSignificationExemple
time_unitL’unité de base des délais1ns
time_precisionLa précision de la simulation1ps

L’accent grave ` avant timescale signifie qu’il s’agit d’une directive du compilateur.

Exemple

`timescale 1ns / 1ps
  • time_unit = 1ns#10 signifie 10 nanosecondes
  • time_precision = 1ps → La simulation arrondit à la picoseconde la plus proche

Valeurs courantes de timescale

Unité de tempsPrécisionCas d’utilisation
1ns / 1nsNanosecondeSimulations simples
1ns / 1psPicosecondePlus précis
1ps / 1psPicosecondeConceptions à haute vitesse
1us / 1nsMicrosecondeSimulations lentes

Comment cela affecte les délais

`timescale 1ns / 1ps

initial begin
  #10 a = 1;   // Attend 10 nanosecondes
end

Sans timescale, certains simulateurs utilisent une valeur par défaut (souvent 1ns). Il est préférable de toujours la spécifier.

Règles importantes

RègleExplication
Doit être en dehors des modulesPlacé avant toute définition de module
Symbole backtick`timescale et non 'timescale 
Unité de temps ≥ précision temporelle1ns / 1ps est correct, 1ps / 1ns ne l'est pas
Affecte tous les délais du fichierDélais généraux, délais de portes, délais d'affectation
challenge icon

Défi

Que faire :

Ajoutez la directive timescale manquante afin que les délais représentent 10ns, 20ns et 30ns.

Essayez vous-même

// TODO: Ajouter la directive 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 iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Fondamentaux

Entraînez-vous par vous-même : Compilateur Verilog en ligne