jxli99的个人空间 https://blog.eetop.cn/baofeng [收藏] [复制] [分享] [RSS]

空间首页 动态 记录 日志 相册 主题 分享 留言板 个人资料

日志

post-simulation相关问题及解决方法

热度 4已有 8082 次阅读| 2017-10-25 18:26 |个人分类:验证|系统分类:硬件设计

1.PR后的timing rpt没有时序违反,那sdf里负的hold 是什么意思,是好是坏?
   setup,hold的本质是数据不能在clock变化的周围变化, 否则会出错, 把在clock前的叫setup, clock后的叫hold, 其实是一个窗口 (violation window). 但是由于一个触发器内部本身也有delay, 假如data path没delay, clock path有delay, 那么这个窗口从触发器外部看起来的话, 就是往左移了, 移得太多, 就可能让hold timingcheck的值变成负值. 是正确的. 说的比较复杂, 其实画画时序图很容易理解.hold为负值的意思是信号在时钟沿之前指定时间内(那个负值的绝对值)翻转都不会出问题。

2 有error,提示要加+neg_thck,这个和负的hold有什么关系吗?加+neg_tchk貌似把负的hold修成0了?
   +neg_tchk是让工具知道你有负的hold/setup值, 以前的clock比较慢, 所以没出现过负值, 现在有了, 必须要加上这个option,不然就不准了. +这个option不是变成0, 是支持负值了, 你说反了. 我认为加“+neg_tchk”把负值改为0可能是因为工具不支持负值,所以把负值改为0来计算,这样相当于仿真时hold check更苛刻了。

3.+notimingcheck就相当于不检查负的hold?那影响仿真所加时序吗?这个命令在仿真时候需要加吗?
   +notimingcheck就是字面意思, 不做timing check, 对于后仿来说, 加和不加的都要跑一跑。不加的话就是纯功能仿真,不考虑时序。

4.notimingcheck在RTL仿真和后仿真中的意义?如果后仿真中加了这个参数会有什么影响?
   notimingcheck在RTL级仿真中,可以避免如sram、flash以及你RTL中例化的std cell报出时序违背,而影响你的仿真结果。后仿真一般仅将notimingcheck设置在跨时钟域处理的第一级DFF上,以规避其报时序违背,导致仿真出现X态。第二级的时序是需要解决的(也就是说第二级不能出现时序问题,因为他属于同一个时钟域)。

5.怎么将“notimingcheck”这个参数只加到跨时钟域的第一级呢?
  假设你有两个dff (分别为“u1/u2/u3”,“u1/u2/u4”) 不做时序。检查创建一个文件,我在这里命名为notimingcheck.cfg
文件内容为:
instance {
    u1/u2/u3,
    u1/u2/u4
} {noTiming};
然后在仿真编译中加入 “+optconfigfile+notimingcheck.cfg
执行仿真即可。
instance也可以是module和tree。noTiming也可以是noIopath,noSpecify等等。

6.我现在遇到个问题,DC综合后的netlist和sdf拿来后仿,波形到一个地方所有输出pin全变x态了,后续就全是不定了。而将综合后的sdc和netlist进行APR,然后输出PR后的netlist和sdf文件拿来后仿,波形就没有问题。这是为什么呢?DC和PR都没有timing violation。vcs命令都是用的vcs -gui -R top_testbench.v +neg_tchk 烦请大神看看,可能是哪的问题?
  DC不修Hold啊,一般综合后的网表只跑#0 delay的就可以了,DC综合以后的sdf不准确的,可能有些大delay。你只跑#0 delay的综合后网表就可以了。

7. VCS的时序选项nospecify,+delay_mode_zero,+notimingcheck和+no_notifier之间有什么区别
 以一个简单的与非门为例
module ND(X,A1,A2)
   output X ;
   input A1,A2 ;
   specify
     (A1 => X) = 50 ;
     (A2 => X) = 50 ;
   endspecify
endmodule
在标准单元中,定义输入A1到输出X的路径延时为50 time unit。

+nospeicy:vcs不加入50 time unit的延时
+delay_mode_zero:将标准单元中定义的延时替换为0
+notimingcheck :时序检查开关,比如setup/hold/width检查等等,如使用开关,则仿真时不检查时序,如后仿真,时序检查不满足,可能导致X扩散。
+no_notifier:在库里面有一些检 查,width,setup,removal等等,一旦有violation,它就将notifier寄存器翻转,这样就出现X态,为了不让仿真中出现这 个情况,可以再仿真时加上 +no_notifier,这样仿真不会翻转notifier寄存器,也不会出现X态,不过会display出各种违例。
2

点赞

刚表态过的朋友 (2 人)

发表评论 评论 (2 个评论)

回复 李九阳 2021-7-13 16:37
棒棒哒,学习了!感谢!!!
回复 luofei2021 2022-1-14 14:56
感谢,很不错的经验分享

facelist

您需要登录后才可以评论 登录 | 注册

  • 关注TA
  • 加好友
  • 联系TA
  • 0

    周排名
  • 0

    月排名
  • 0

    总排名
  • 0

    关注
  • 3

    粉丝
  • 0

    好友
  • 2

    获赞
  • 2

    评论
  • 521

    访问数
关闭

站长推荐 上一条 /2 下一条


小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-12-20 15:56 , Processed in 0.018594 second(s), 9 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
返回顶部