Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Industrial programming >> Verilog

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 simulation
xcelium> 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 simulation
xcelium> 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 simulation
xcelium> 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 simulation
xcelium> 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

  1. Tutoriel Verilog
  2. Concaténation Verilog
  3. Affectations Verilog
  4. Verilog bloquant et non bloquant
  5. Fonctions Verilog
  6. Tâche Verilog
  7. Portée de référence hiérarchique Verilog
  8. Générateur d'horloge Verilog
  9. Fonctions mathématiques Verilog