Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Industrial programming >> Verilog

Verilog-Zeitskalenumfang

Standardzeitskala

Obwohl von Verilog-Modulen erwartet wird, dass vor dem Modul eine Zeitskala definiert wird, können Simulatoren eine Standardzeitskala einfügen. Die tatsächliche Zeitskala, die auf jeden Bereich in einer von Verilog ausgearbeiteten Hierarchie angewendet wird, kann mit der Systemaufgabe $printtimescale gedruckt werden die den Geltungsbereich als Argument akzeptiert.

  
  
module tb;
	initial begin
		// Print timescale of this module
		$printtimescale(tb);
		// $printtimescale($root);
	end
endmodule

  

Beachten Sie, dass, obwohl keine Zeitskala-Direktive vor diesem Modul platziert wurde, der Simulator am Ende einen Zeitskalenwert von 1 ns/1 ns angewendet hat.

Simulationsprotokoll
xcelium> run
Time scale of (tb) is  1ns /  1ns
xmsim: *W,RNQUIE: Simulation is complete.

Standardzeitraumbereich

Standardmäßig wird eine in einer Datei platzierte Zeitskala-Direktive auf alle Module angewendet, die der Direktive folgen, bis zur Definition einer anderen Zeitskalen-Direktive.

  
  
`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

  

Im obigen Beispiel erhalten tb und alu eine Zeitskala von 1 ns/1 ns, während des eine Zeitskala von 1 ns/10 ps erhält, da die Direktive vor der Moduldefinition von des

platziert wird Simulationsprotokoll
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.

Umfang zwischen Verilog-Dateien

Andere Dateien können mit `include in die aktuelle Datei eingefügt werden -Direktive, die eine Präprozessor-Direktive ist und den Compiler veranlasst, den Inhalt der enthaltenen Datei vor der Kompilierung zu platzieren. Dies entspricht also dem einfachen Einfügen des gesamten Inhalts der anderen Datei in diese Hauptdatei.

  
  
// 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

  

Beachten Sie, dass die Ergebnisse genau die gleichen sind wie im vorherigen Beispiel. alu erhält eine Zeitskala von 1 ns/1 ps, weil es die letzte Anweisung war, die gültig blieb, bis der Compiler die alu-Definition fand, obwohl sie in einer anderen Datei abgelegt wurde. des erhält eine Zeitskala von 1 ns/10 ps, ​​da die Direktive vor ihrer Definition ersetzt wurde.

Simulationsprotokoll
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.

Das Austauschen von Dateien kann die Zeitskala ändern

Die Reihenfolge der Aufnahme von Dateien spielt eine wichtige Rolle bei der Neudefinition von Zeitskalenanweisungen, was im folgenden Beispiel deutlich wird.

  
  
// 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

  

Sehen Sie, dass das Modul alu jetzt eine Zeitskala von 1ns/10ps bekommt.

Simulationsprotokoll
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.

Dies ist einer der Gründe dafür, eine Zeitskala-Direktive am Anfang von Dateien zu haben, damit alle Module in dieser Datei die richtige Zeitskala annehmen, unabhängig von der Aufnahme in die Datei.

Dieser Ansatz kann es jedoch schwierig machen, mit einer anderen Zeitskalengenauigkeit (Wert nach dem Schrägstrich) zu kompilieren, ohne jede Datei zu ändern. Viele Compiler und Simulatoren bieten auch eine Option zum Überschreiben von Standardzeitskalenwerten, die auf alle Module angewendet werden.


Verilog

  1. Verilog-Tutorial
  2. Verilog-Verkettung
  3. Verilog-Aufgaben
  4. Verilog-Blockierung und Nicht-Blockierung
  5. Verilog-Funktionen
  6. Verilog-Aufgabe
  7. Verilog Hierarchischer Referenzbereich
  8. Verilog-Taktgenerator
  9. Verilog Math-Funktionen
  10. Verilog-Zeitformat