VCS什么时候会采到前一拍的数据?
不大可能吧
工具应该没问题 只是把RTL设计文件换成网表。DC综合的网表 咋就有问题呢 崩溃啊
你rtl里面肯定有人为插入的delay了。dc去掉了这这部分,所以就不对了。
rtl里插入delay是好的代码风格,更接近真实逻辑关系。
那你去掉试试,说不定就出现网表一样的问题了。肯定是代码的问题。要相信工具
开发人员写bench很喜欢出现这样的语句
#20
a=1
如果沿在20处就成了沿前变20了
每年的应届生都有人这么写
网表后仿要带sdf。。。
rtl带delay的写法是在模拟寄存器延时 dc综合会无视
这些我都知道。楼主的问题是,相同的仿真环境,用rtl和用rtl综合的网表不一致。即便没有加反标,也不应该不一致。两者唯一的区别,就在于rtl里面肯定人为的加了delay。所以我劝他,去掉那些delay再跑跑,说不定也会有问题。
其实,工具发展到现在,寄存器赋值加delay,不是给工具看的,而是给人看波形的时候更加直观。工具是不推荐加的。
窝窝头不是很牛的嘛
你这个应该是假的
算了, 各自体会吧。
我自己都不加delay的,目前为止没出问题呀。
兄台,讨论而已。
是的 是不会有问题 前面我说了rtl加delay,dc会无视
所以网表仿真有问题时,把rtl的delay去掉是不能解决
网表仿真问题的
他说的意思是说
不是网表仿真问题,而是RTL仿真因为加delay有问题,也会造成不一致吧?
好吧,其实,我认为网表的仿真结果才是真实的,问题出在rtl上面。在bench里造输入的时候引入了一些人为的delay,同时寄存器又引入了delay。也许就导致某个信号出现了问题。
我的想法只是做个实验,去掉寄存器的delay,也许rtl就会和网表一致了。猜想而已。
汗,楼上一帮设计在歪楼。。。
门级这种情况没啥奇怪的,仔细分析原因即可。分析时需要熟悉以下几点:
DFF库的具体实现,UDP,race condition。
举个简单的例子,IBM的DFF库中用到UDP,在clk和D端同时跳变时就有可能发生竞争,造成vcs仿真采样到前一拍数据。
我觉得窝头分析的有道理,出现这种问题一般跟工具、网表无关,绝大部分是由于Bench写法不当造成的。所以楼主Rtl没发现问题证明Rtl中采错那部分逻辑多半有人为的delay加入,导致激励的变化时间不影响Dff的采样!楼主不妨按照窝头的建议检查Rtl中出错逻辑是否有加delay,然后去掉再Rtl仿真一次,如果是bench的问题的话,Rtl级绝对也会出现同样的采错现象的。遇到过很多次这种问题然后彻底搞清楚的苦逼飘过
出现这种问题一般是两种情况,1)netlist的前仿,2)clock tree上有std cell的rtl前仿,这种问题很常见(缺省条件下std cell都有延迟,这个延迟和实际延迟完全不一样),就是hold time违例。所以,rlt的规范一般都要求写<=#`DLY。
其实门级仿真会有各种各样的问题,比如同步复位“失效”,DFF的各种非正常行为。
以前遇到过一个问题,一个DFF在时钟无效时候跳变,debug的结果就是一个0延迟的时钟毛刺造成的。
2年前,我定位过一个VCS采到值不正确的问题。
但这是rtl仿真出现的,个人认为后仿真应该是不会出现这个问题的。
建议再用cadence的仿真工具再仿真一下,我们当时cadence工具的结果就没有问题。
VCS如果不加delay,好像是会出现这类问题,我的印象另一个同事也遇到过。
我也碰到过VCS仿真RTL出错的情况
VCS也只是个软件工具,bug肯定也是一大堆
自己和同事的脑子才是最值得信赖的
没碰到过时钟控制用std cell实现的情况吧?只要有std cell都会加上一个延迟(有时候#0也会出问题,麻烦的是在波形上还看不出来),如果rtl不加delay仿真很容易出错。另外,#1确实不是好的style,正确的应该是#`DLY。
前面已经有人说过了,这个是因为std cell自带虚假延迟导致的,和vcs没有半毛钱的关系。
对于绝大多数的纯逻辑模块来说,都是同步电路。在rtl级别,时钟只是一个输入信号,不存在时钟控制的std cell问题。即便对于异步电路来讲,时钟也只是非常单纯的输入信号。
对于你说的时钟控制用std cell的情况。在我们单位,会有一个专门的时钟模块,负责产生各种各样的时钟,完成诸如时钟切换,时钟倍频,时钟分频等等。我们这样做的原因是,对于时钟模块来说,rtl级别的仿真是没有意义的。所以我们把所有和时钟相关的逻辑独立出来,然后,在testbench中,我们会写一个时钟模块的仿真模型,替换掉真实时钟模块。这样做可以大大方便和加快除时钟模块以外的纯逻辑模块的仿真验证。各种杂七杂八的毛刺阿,不稳态阿,都被忽略掉了。
但是这样做是有风险的,你必须保证真实的时钟模块和时钟模块的仿真模型一致。不过那就是另外的故事,由另外的东西来保证了。
我扯这么多的目的,是想说明,对于一个复杂系统,会对应多个testbench,每个bench的目的是不同的,不要把所有设计都一股脑的塞到一个bench里面验证。会比较麻烦。
年纪大了,就是喜欢唠叨。大家原谅