1. `timescale
`timescale是Verilog中的預編譯指令,指定位於它后邊的module的時間單位和時間精度,直到遇到新的`timescale指令或者`resetall指令。它的語法如下:
`timescale time_unit / time_precision
假如我們延時x個時間單位,那延時的總時間time = x*time_unit,但最后真正延時的時間是根據time_precision對time進行四舍五入后的結果,如下面的代碼所示。
1 `timescale 100ns / 10ns // 時間單位100ns,時間精度10ns 2 module tb; 3 reg [4:0] set; 4 parameter d1 = 20, 5 d2 = 1.5, 6 d3 = 1.54, 7 d4 = 1.55; 8 9 initial begin 10 #d1 set = 0; // real_delay = round(20*100) = 2000ns, 以10ns為精度做四舍五入 11 #d2 set = 1; // real_delay = round(1.5*100) = 150ns 12 #d3 set = 2; // real_delay = round(1.54*100) = 150ns 13 #d4 set = 3; // real_delay = round(1.55*100) = 160ns 14 end 15 16 endmodule
注意事項:
1)時間單位和時間精度只能是1、10和100這三種整數,單位有s、ms、us、ns、ps和fs;
2)時間精度必須小於等於時間單位
2. `timescale時間精度對仿真時間的影響
`timescale的時間精度設置是會影響仿真時間的,如下面幾種設置。最后一種設置可能是第一種的一倍還多,並且占用更多的內存,所以如果沒有必要,應盡量將時間精度設置得更大一些。
1 `timescale 1ns / 1ns 2 `timescale 1ns / 100ps 3 `timescale 1ns / 10ps 4 `timescale 1ns / 1ps
轉載至:https://blog.csdn.net/qq_16923717/article/details/81099833