请教一个VCS仿真的timescale的问题
verilog会共享timescale,你可以试试sv里提供的timeprecision
按照编译顺序来设定不同的timescale
比如1.v 1ns/1ns
2.v 1ns/100fs -- PLL
3.v 1ns/1ns
这样应该就可以达到你的要求了
你这个概念是错的,最后仿真的时候取得是最小的timescale
你写一个例子试试看看
无论是vcs还是ncverilog(irun)都这样的行为
因为这种行为还让我花了好多时间去debug 一些bhv model(model自己定义了timescale,导致后面文件的timescale发生改变)
你理解错了。timescale包括两个方面,一个是time unit,这个是按照文件编译顺序确定的。另外一个是精度,是取所有看到的timescale中最小的精度。
你观察到的现象是写在verilog里面的#1之类的延迟受到了前面编译的文件的timescale的影响。但是lz的问题是如果采用更高的精度,VCD文件中就会包含更多的信息不方面应用于他后面的流程。你可以仔细考虑考虑。
呵呵,貌似仿真结果真不像是这样子
1.v 1ns/1ns
#1
#0.1 忽略
2.v 1ns/100ps
#1
#0.1 有效
3.v 1ns/1ns
#1
#0.1 忽略
如果说精度是最小的那个,那貌似1.v 3.v中#0.1不应该被忽略啊
这三个timescale的unit貌似都是1ns啊
你举的例子是没问题的,#1类似的延迟的处理是按照当前模块的timescale来的,但是真正的仿真精度确实按照最小的来的。考虑下面一个例子就可以理解我说的了,也就是为什么你的解决方案不work的原因。希望有讲明白。
`timescale 1ns/1ns
module t1(a);
input [3:0] a;
initial begin
$monitor("a = %d,time=%f",a,$realtime);
end
endmodule
`timescale 1ns/1ps
module t2;
reg [3:0] a;
initial begin
a = 0;
#1;
a = 1;
#0.1;
a =2 ;
end
endmodule