|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
x
在verilog中是没有默认timescale的。一个没有指定timescale的verilog模块就有可能错误的继承了前面编译模块的无效timescale参数。
所以在verilog的LRM中推荐“在每个module的前面指定`timescale,并且相应的在最后加一个`resetall来确保timescale的局部有效”
为了确认这种用法,我编写了一个小小的包含两个模块module_a和module_b的testbench,其中module_a,module_b与testbench指定了不同的timescale精度。通过simulation的波形可以发现,Simulator的确在不同的module中使用了不同的times精度。
代码如下:
文件名:module_a.v
`timescale 100ps/1ps
module a (clk) ;
input clk;
wire clk_a ;
assign #5 clk_a = clk;
endmodule
`resetall
文件名:module_b.v
`timescale 10ps/1ps
module b (clk) ;
input clk;
wire clk_b ;
assign #5 clk_b = clk;
endmodule
`resetall
文件名:testbench.v
`timescale 1ns/10ps
module tb();
reg clk;
initial begin
clk = 0;
end
initial
begin
$fsdbDumpvars;
#12500 $finish;
end
always begin
#10 clk = ~clk;
end
a a_inst(clk);
b b_inst(clk);
endmodule
波形如下:
结论:
从上面的波形中可以看出,虽然使用了相同的delay表述:
assign #5 clk_a(b) = clk;
但由于在module中指定的timescale精度不同,在实际的simulation中delay的长度是不同的,但都是等于5×timescale最小精度。 |
|