转载解决建立时间与保持时间不满足的问题_小小verifier的博客-CSDN博客_建立时间和保持时间违例怎么解决
基本概念
建立时间:即setup time,时钟上升沿之前数据要保持稳定的时间。
保持时间:即hold time,时钟上升沿之后数据要保持稳定的时间。
裕量:即Time Slack,如果数据到来的时间点早于建立时间要求的时间点,那么这个时间差称为建立时间的裕量;同理数据变化的点晚于保持时间要求的时间点,那么这个时间差称为保持时间的裕量。裕量≥0,表明数据是可以安全传输的。
建立时间和保持时间的检查
如下图所示,这是典型的时序结构。
解释图中的符号:
Tlaunch:时钟源点到第一个触发器的时钟网络延迟,也就是时钟偏斜(skew);
Tcapture:为时钟源点到第二个触发器的时钟网络延迟,也就是时钟偏斜(skew);
Tck2q:是触发器的延迟,即D端到Q端的延迟,这是由触发器本身的电气特性所决定的;
Tcycle:是时钟周期,即时钟频率 1\fclk;
Tdp:是第一个触发器的输出端到第二个触发器的输入端之间的组合逻辑电路部分的电路延迟;
我们分析这个电路,由下图可看出:
解释上图,第二个触发器要想满足setup time,就必须要满足:
上图中绿色竖线为时钟源点经过延迟,到第二个触发器的时间(对应绿色路径)
对应红色的路径部分,经过组合逻辑,到达第二触发器的Q端,最晚只能到达上图的红色竖线部分,否则就没办法,满足建立时间。
由此,我们可以推迟公式:
Tlaunch + Tck2q + Tdp ≤ Tcapture + Tcycle - Tsetup
因为Tlaunch和Tcapture都表示为时钟偏斜(clock skew),所以我们合并之后就可得:
建立时间约束:Tsetup ≤ Tcycle +Tskew - Tdp - Tck2q
保持时间约束:Thold ≤ Tdp + Tck2q
其中参数意义:
Tclock:也就是时钟偏斜(clock skew);
Tck2q:是触发器D端到Q端的延迟;
Tcycle:是时钟周期,即时钟频率 1\fclk;
Tdp:是组合逻辑电路部分的电路延迟;
PS:这里可能你会觉得建立时间有点难记,我多啰嗦一句:
Tcycle + Tskew 是表示第二个触发器的时钟到达的时间;
Tdp + Tck2q是表示经过第一个触发器+组合逻辑到达的时间;
二者的差值就是建立时间最大的时间要求
解决建立时间和保持时间不满足的情况
由上面推导的不等式,我们可以得出结论:
1.建立时间不满足
当建立时间不满足时,即Tsetup值要大于实际的Tcycle +Tskew - Tdp - Tck2q,为了满足建立时间:
可以通过改进工艺,采取具有更小的Tsetup值的芯片;
采用延迟更低的触发器,降低Tck2q;
增大时钟周期Tcycle和时钟偏斜Tskew,但这会降低电路的性能;
尽量减小两个触发器之间的组合逻辑电路的使用,从而降低Tck2q。
2.保持时间不满足
当保持时间不满足时,也就是Thold要小于Tdp + Tck2q,可以通过:
理论上,可以增加Tdp和Tck2q来解决,也就是增加触发器的D端到Q端的延时,以及两级触发器之间的组合逻辑电路部分。
目前大部分芯片的Thold时间都可以做到0ns。所以当保持时间不满足时,通常采用的做法是在传输路径上插入buffer,在不影响逻辑功能前提下,只具有增加延迟的作用。
PS:尤其注意,保持时间Thold和时钟频率之间是没有关系,故降低时钟速度不能解决保持时间不满足的问题,很多面试题喜欢在这里挖坑。
————————————————
版权声明:本文为CSDN博主「小小verifier」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/summerxrt/article/details/119088018