微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 微电子和IC设计 > 微电子学习交流 > 请教一个VCS仿真的timescale的问题

请教一个VCS仿真的timescale的问题

时间:12-12 整理:3721RD 点击:
VCS仿真生成VCD文件用于测试 由于测试仪精度的问题,timescale只能设置成1ns/1ns, 但是这样设置会使PLL误差过大,PLL要求1ns/100fs  请问有没有方法可以在仿真的不同模块使用不同的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

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top