Maîtriser Verilog $timeformat : Contrôle de Précision et d'Affichage
La directive Verilog timescale spécifie l'unité de temps et la précision pour les simulations.
La fonction système Verilog $timeformat spécifie le style de rapport du spécificateur de format %t dans les instructions d'affichage comme $display et $strobe.
Syntaxe
$timeformat(<nombre_unité>, <précision>, <chaîne_suffixe>, <largeur_champ_minimum>);
- nombre_unité est la plus petite précision de temps parmi toutes les directives
`timescaleutilisées dans le code source - précision représente le nombre de chiffres fractionnaires pour le timescale courant
- chaîne_suffixe est une option pour afficher l'échelle à côté des valeurs de temps réel
| Nombre d'unité | Unité de temps |
|---|---|
| -3 | 1ms |
| -6 | 1us |
| -9 | 1ns |
| -12 | 1ps |
| -15 | 1fs |
Exemple #1 : 1ns/1ps
Voici un exemple de comment $timeformat affecte le format d'affichage de l'unité de temps.
`timescale 1ns/1ps
module tb;
bit a;
initial begin
// Attendre un certain temps - noter que parce que la précision est 1/1000 de
// l'échelle principale (1ns), ce délai sera tronqué à la 3ème
// position
#10.512351;
// Afficher le temps courant avec les paramètres timeformat par défaut
$display("[T=%0t] a=%0b", $realtime, a);
// Changer les paramètres timeformat et afficher à nouveau
$timeformat(-9, 2, " ns");
$display("[T=%0t] a=%0b", $realtime, a);
// Enlever l'espace dans le suffixe, et étendre les chiffres fractionnaires à 5
$timeformat(-9, 5, "ns");
$display("[T=%0t] a=%0b", $realtime, a);
// Ici le suffixe est faux, il ne devrait pas être "ns" parce que nous sommes
// en train de régler l'affichage en "ps" (-12)
$timeformat(-12, 3, " ns");
$display("[T=%0t] a=%0b", $realtime, a);
// Corriger le suffixe en ps
$timeformat(-12, 2, " ps");
$display("[T=%0t] a=%0b", $realtime, a);
end
endmodule
Journal de Simulation
xcelium> run [T=10512] a=0 [T=10.51 ns] a=0 [T=10.51200ns] a=0 [T=10512.000 ns] a=0 [T=10512.00 ps] a=0 xmsim: *W,RNQUIE: Simulation is complete.
Exemple #2 : 1ns/100ps
Voici le même exemple que ci-dessus avec un timescale différent.
`timescale 1ns/100ps
Journal de Simulation
xcelium> run [T=105] a=0 [T=10.50 ns] a=0 [T=10.50000ns] a=0 [T=10500.000 ns] a=0 [T=10500.00 ps] a=0 xmsim: *W,RNQUIE: Simulation is complete.
Exemple #3 : 100ns/1ns
`timescale 100ns/1ns
#1 représente 100ns et donc #10 donne 1000ns
Journal de Simulation
xcelium> run [T=1051] a=0 [T=1051.00 ns] a=0 [T=1051.00000ns] a=0 [T=1051000.000 ns] a=0 [T=1051000.00 ps] a=0 xmsim: *W,RNQUIE: Simulation is complete.
Verilog
- Maîtriser Verilog : Tutoriel complet pour la conception de circuits numériques
- Maîtriser la concaténation Verilog : Guide pratique
- Comprendre les affectations Verilog : Types, Syntaxe et Bonnes Pratiques
- Verilog Blocking vs Non-Blocking : Différences Clés Expliquées
- Maîtriser les Fonctions Verilog pour une Conception RTL Efficace
- Comprendre les Tasks Verilog : Fonctions vs Tasks, Syntaxe et Utilisation
- Conception Pratique Verilog Niveau Portes : Portes ET, OU, NON & Multiplexeur 2x1
- Générateur d'Horloge Verilog : Guide de Conception et d'Implémentation
- Maîtriser les Fonctions Mathématiques Verilog pour une Conception Matérielle Efficace