Menu
Coddy logo textTech

Directive Timescale

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 (time_unit) et la précision temporelle (time_precision) pour la simulation. Elle indique au meilulateur comment interpréter les valeurs de délai comme #10.

Dans les leçons précédentes, nous avons utilisé des délais comme #10 sans préciser ce que "10" signifie. S'agit-il de 10 nanosecondes ? 10 picosecondes ? La directive timescale répond à cette question.

Syntaxe :

`timescale time_unit / time_precision
PartieSignificationExemple
time_unitL'unité de base pour les délais1ns
time_precisionLa précision que la simulation doit avoir1ps

L'accent grave ` avant timescale signifie qu'il s'agit d'une directive de 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

Time UnitPrécisionCas d'utilisation
1ns / 1nsNanosecondeSimulations simples
1ns / 1psPicosecondePlus précis
1ps / 1psPicosecondeDesigns à haute vitesse
1us / 1nsMicrosecondeSimulations lentes

Impact sur les délais

`timescale 1ns / 1ps

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

Sans timescale, certains simulateurs prennent 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 valide, 1ps / 1ns ne l'est pas
Affecte tous les délais dans le fichierDélais généraux, délais de porte, délais d'affectation
challenge icon

Défi

Ce qu'il faut faire :

Ajoutez la directive timescale manquante pour 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