在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 24924|回复: 28

[求助] 对老生常谈的话题hold time violation的个人理解还有疑惑

[复制链接]
发表于 2013-5-18 14:06:55 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
本帖最后由 39123811 于 2013-5-18 14:24 编辑

好吧,hold time violation这个话题基本上已经味同嚼蜡了,但是怎么能解决这个问题呢?紧紧从timing issue的角度考虑?
以下是我对hold time violation的认识
1> 如果只是考虑一级pipeline的话,也是最常见的面试题啦
1.png
(画得不好不要笑,新人另外求画图软件),在这种情况下,如果发生hold time violation的话,那我们就要想办法延长clk上升沿之后data的保持时间。有两种方法,
1> 加大输出data的combination logic 的延迟,使得data整体右移;
2> 想办法把clk左移,怎么弄呢,减少clock skew(这个是物理现象貌似是不可改变的),减小时间周期?或是在后端设计时把连这个clk的buffer去掉?
此种情况解决hold time violation的方法欢迎讨论,这里仅仅是抛砖引玉。
第一种情况是大家都讨论烂了的,第二种情况我至今没有想到解决方法,

下面是第二种情况,多级pipeline,我们以两级reg为例                            1.png
在这种情况下,我们把注意力集中在第二个dff,由于Q1同时也是D2,而D2的hold time其实完全是由clk->Q1来决定的,这样的话上述两个方法都无法解决此种情况下的hold violation。

请高人解决下这个问题,难道library 里的Dff 都默认hold time < clk to Q delay  ?
@
陈涛
发表于 2013-5-18 16:28:58 | 显示全部楼层
一般来说clk的延迟不容易变,那就修改数据就可以了。一般来说延后一点就可以了。
D2的holdtime是由clk->Q1,组合逻辑延迟,两个dff的时钟走线差,三者决定的。
画时序可以使用 time designer或者visio
发表于 2013-5-18 16:33:35 | 显示全部楼层
两个寄存器之间的时钟延迟差,是由寄存器的位置决定的,可以通过约束两个寄存器的位置来改变。
发表于 2013-5-18 18:37:53 | 显示全部楼层
本帖最后由 wang09123 于 2013-5-18 18:57 编辑

哥们你好,不知道你是在那一步去解决的这个问题,综合 还是pr的时候,一般我的做法是在pr的时候,将该d触发器的时钟树做短一些
发表于 2013-5-18 19:20:06 | 显示全部楼层
Clock Mesh基本没有Hold Time问题,FPGA里的Global Clock也是Clock Mesh。


Clock Tree的话,Hold is not Setup这篇Paper已经讲的很完整了。。。除了Scan Reorder部分略坑爹以外。
 楼主| 发表于 2013-5-19 12:35:37 | 显示全部楼层
本帖最后由 39123811 于 2013-5-19 12:41 编辑


一般来说clk的延迟不容易变,那就修改数据就可以了。一般来说延后一点就可以了。
D2的holdtime是由clk->Q1,组合逻辑延迟,两个dff的时钟走线差,三者决定的。
画时序可以使用 time designer或者visio
tianguau 发表于 2013-5-18 16:28



在第二个例子中,
   我觉得D2的holdtime, 你所提到的组合逻辑延迟(也就是两个flipflop之间的logic)是跟它是没有任何关系的,如果combination logical 延迟过大,那D2的setup time都满足不了,而setup time的满足是分析hold time的前提。
   而clock skew 和clock jitter也跟hold time没有任何关系,因为D2的由1->0的时间完全取决于clk->Q1的delay,而skew和jitter只是让整个d2的变化往左或者往右平移而已,并不能加长原有hold time的宽度。
欢迎讨论。
发表于 2013-5-19 23:53:25 | 显示全部楼层


Clock Mesh基本没有Hold Time问题,FPGA里的Global Clock也是Clock Mesh。


Clock Tree的话,这篇Paper ...
Timme 发表于 2013-5-18 19:20




    clock mesh是什么意思?请指点
发表于 2013-5-19 23:56:16 | 显示全部楼层


clock mesh是什么意思?请指点
arccosx 发表于 2013-5-19 23:53




多驱动的时钟网络,可以达到更低的Skew(特别是由于OCV造成的Skew),但费电。
 楼主| 发表于 2013-6-16 15:38:54 | 显示全部楼层
补充第三点,3>在data path 后加buffer,是clock 上升沿后old data保持的时间更久。
发表于 2013-6-16 22:02:07 | 显示全部楼层


补充第三点,3>在data path 后加buffer,是clock 上升沿后old data保持的时间更久。
39123811 发表于 2013-6-16 15:38



第三种方法其实就是第一种方法。

解决hold villation问题,无非是你所说的前两种方法,一个方法是加大数据延时,一种方法是减少clock延时。

这两种方法从理论上来讲都是可行的,但应对的情况有所不同。
对于一个新的设计,综合的网表送给后端之后,layout需要做的一个重要步骤就是CTS(clock tree 生成),对于简单的时钟,工具能够很容易应对,但如果时钟关系比较多,比如中间有很多gate clock,那么CTS生成的tree质量就不是那么好了,这时候比较容易产生hold,所以CTS之后都要检查clock的skew,如果太大只能重建CTS。

在进行STA分析的时候,一般是先解决setup问题,后解决hold问题,hold问题解决完的时候一般都是到了要tapout的时候了,最后一段时间如果发现有hold问题,一般会选择在满足setup的情况下将数据往后推,只有万不得已的情况下才会选择动时钟,因为时钟改变不仅影响本级DFF的时序,还会影响下一级DFF的时序。

回答你的一个问题,“难道library 里的Dff 都默认hold time < clk to Q delay  ?”
这个答案一般是成立的,比如使用 standard cell搭建一个移位寄存器链,一般情况下,是不需要在两个DFF之间插入额外的cell来保证hold,只要CTS做的比较balance,就不会有问题。(有个别的厂家,e.g. UMC,提供的库是做不到这一点的,需要在DFF之间插入DEL cell将data推迟来保证hold,这样的并不多见)
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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


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

GMT+8, 2024-12-29 18:28 , Processed in 0.030013 second(s), 9 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表