Portée de l'échelle de temps Verilog
Échelle de temps par défaut
Bien que les modules Verilog soient censés avoir une échelle de temps définie avant le module, les simulateurs peuvent insérer une échelle de temps par défaut. L'échelle de temps réelle appliquée à n'importe quelle étendue dans une hiérarchie élaborée par Verilog peut être imprimée à l'aide de la tâche système $printtimescale
qui accepte la portée comme argument.
module tb;
initial begin
// Print timescale of this module
$printtimescale(tb);
// $printtimescale($root);
end
endmodule
Voyez que même si une directive d'échelle de temps n'a pas été placée avant ce module, le simulateur a fini par appliquer une valeur d'échelle de temps de 1ns/1ns.
Journal de simulationxcelium> run Time scale of (tb) is 1ns / 1ns xmsim: *W,RNQUIE: Simulation is complete.
Périmètre de l'échelle de temps standard
Par défaut, une directive d'échelle de temps placée dans un fichier est appliquée à tous les modules qui suivent la directive jusqu'à la définition d'une autre directive d'échelle de temps.
`timescale 1ns/1ps
module tb;
des m_des();
alu m_alu();
initial begin
$printtimescale(tb);
$printtimescale(tb.m_alu);
$printtimescale(tb.m_des);
end
endmodule
module alu;
endmodule
`timescale 1ns/10ps
module des;
endmodule
Dans l'exemple ci-dessus, tb et alu se retrouvent avec une échelle de temps de 1ns/1ns tandis que des obtient une échelle de temps de 1ns/10ps en raison du placement de directive avant la définition de module de des
Journal de simulationxcelium> run Time scale of (tb) is 1ns / 1ps Time scale of (tb.m_alu) is 1ns / 1ps Time scale of (tb.m_des) is 1ns / 10ps xmsim: *W,RNQUIE: Simulation is complete.
Étendue entre les fichiers Verilog
D'autres fichiers peuvent être inclus dans le fichier courant en utilisant un `include
directive qui est une directive de pré-processeur et oblige le compilateur à placer le contenu du fichier inclus avant la compilation. Donc, cela équivaut à simplement coller tout le contenu de l'autre fichier dans ce fichier principal.
// main.v
`timescale 1ns/1ps
module tb;
des m_des();
alu m_alu();
initial begin
$printtimescale(tb);
$printtimescale(tb.m_alu);
$printtimescale(tb.m_des);
end
endmodule
`include "file_alu.v"
`include "file_des.v"
// file_alu.v
module alu;
endmodule
// file_des.v
`timescale 1ns/10ps
module des;
endmodule
Voir que les résultats sont exactement les mêmes que dans l'exemple précédent. alu obtient une échelle de temps de 1ns/1ps car c'est la dernière directive qui est restée valide jusqu'à ce que le compilateur trouve la définition alu malgré son placement dans un fichier différent. des obtient une échelle de temps de 1ns/10ps car la directive a été remplacée avant sa définition.
Journal de simulationxcelium> run Time scale of (tb) is 1ns / 1ps Time scale of (tb.m_alu) is 1ns / 1ps Time scale of (tb.m_des) is 1ns / 10ps xmsim: *W,RNQUIE: Simulation is complete.
L'échange de fichiers peut modifier l'échelle de temps
L'ordre d'inclusion des fichiers joue un rôle important dans la redéfinition des directives d'échelle de temps, ce qui est évident dans l'exemple ci-dessous.
// main.v
`timescale 1ns/1ps
module tb;
des m_des();
alu m_alu();
initial begin
$printtimescale(tb);
$printtimescale(tb.m_alu);
$printtimescale(tb.m_des);
end
endmodule
// NOTE! Swapped order of inclusion
`include "file_des.v"
`include "file_alu.v"
// file_alu.v
module alu;
endmodule
// file_des.v
`timescale 1ns/10ps
module des;
endmodule
Voyez que le module alu obtient maintenant une échelle de temps de 1ns/10ps.
Journal de simulationxcelium> run Time scale of (tb) is 1ns / 1ps Time scale of (tb.m_alu) is 1ns / 10ps Time scale of (tb.m_des) is 1ns / 10ps xmsim: *W,RNQUIE: Simulation is complete.
C'est l'une des raisons d'avoir une directive d'échelle de temps en haut des fichiers afin que tous les modules de ce fichier assument l'échelle de temps correcte indépendamment de l'inclusion du fichier.
Cependant cette approche peut rendre difficile la compilation avec une précision d'échelle de temps différente (valeur suivant l'oblique) sans altérer chaque fichier. De nombreux compilateurs et simulateurs offrent également une option pour remplacer les valeurs d'échelle de temps par défaut qui seront appliquées à tous les modules.
Verilog