我们原来聊过TB中的一些写法,会让VCS涌现仿真缺点。详情见我的这个视频:VCS仿真的把稳事变,把稳,不雅观众评论区提出的方法也很主要,视频方法和评论区的方法都能办理问题。
但是,如果是TB风格导致的VCS仿错,而是RTL的设计思路不被VCS所理解,那该怎么办呢?

我们来说个详细案例:我有两个时钟,clkA,clkB。clkB是慢的,clkA是快的,clkB是clkA的分频。那么,按理说,clkB下面的旗子暗记和clkA下面的旗子暗记是同步的。但是,仿真的时候,VCS分不清楚,clkA下面的数据,上升沿,常常被clkB采到。这是不符合我们仿真哀求的,我们仿真是不能采集一个数据的上升沿的,对吧。我过去的办法是把clkA向后挪几个ps,但是这个不是长久之计。我希望VCS能够知道clkA和clkB的同步关系,这样它就不会涌现这种事情了。叨教VCS有没有什么设置语法,可以明确见告他这一点的?
上面的问题如下图所示,datA属于clkA域,datA在A点上升,clkB与clkA完备同步,按理说它采样datA后,得到的datB该当在B点上升,但仿真中,datB也在A点上升,这是不对的。流出来片,一定是在B点上升的。
那这个前仿问题怎么解呢?我咨询了synopsys和cadence的AE,他们都说这种征象会发生,而且没有好的办法。我查了eetop等专业网站,也没有干系问题的帖子。以是就须要我们人为在RTL上做点事情,让仿真精确。
精确思路是:便是找到clkA和clkB交互过程中的关键旗子暗记,比如,clkA发出了一个sig,clkB会采这个sig。那就把sig延迟1ps(clkA发出的时候就延迟),这样就没问题了。
以上图为例,便是将datA在clkA打拍之后,在RTL上延迟1ps。这个延迟是不会被综合的,大家可以放心。
比较不好的办法是:如果延迟clkA,或者延迟clkB,让它俩存在1ps相位差的话,比较危险,会涌现很窄的1ps的脉冲被采样到的情形。在时序剖析上是不许可的。以是,我终极还是用延迟数据的办法,而不是延迟时钟,来办理这个问题。










