在Verilog HDL 模型中,所有時延都用單位時間表述。使用`timescale
編譯器指令將時間單位與實際時間相關聯。該指令用於定義時延的單位和時延精度。
`timescale編譯器指令格式為:
timescale time_unit / time_precision
- time_unit 單位時間
- time_precision 時間精度
time_unit 和time_precision 由值1、10、和100以及單位s、ms、us、ns、ps和fs組成。
`timescale 1ns/ 100ps
module AndFunc (Z, A, B);
output Z;
input A, B;
and # (5.22, 6.17 ) Al (Z, A, B);
//規定了上升及下降時延值。
endmodule
編譯器指令定義時延以ns為單位,並且時延精度為 0.1 ns(100 ps)。因此,時延值(#5.22)即代表5.22ns,5.22對應5.2 ns, 時延6.17對應6.2 ns。如果用如下的`timescale程序指令代替上例中的編譯器指令,
`timescale 10ns/1ns
則基礎的時間單位為10ns,精度1ns。5.22代表52.2ns,固定到精度上就是52ns。同理,6.17轉換為62ns。
在編譯過程中,timescale指令影響這一編譯器指令后面所有模塊中的時延值,直至遇到另一timescale指令或resetall指令。當一個設計中的多個模塊帶有自身的`timescale編譯指令時將發生什么?在這種情況下,模擬器總是定位在所有模塊的最小時延精度上,並且所有時延都相應地換算為最小時延精度。
在verilog中是沒有默認timescale的。一個沒有指定timescale的verilog模塊就有可能錯誤的繼承了前面編譯模塊的無效timescale參數。所以在verilog的LRM中推薦在每個module的前面指定timescale,並且相
resetall來確保timescale的局部有效。
應的在最后加一個