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