![请添加图片描述](https://i-blog.csdnimg.cn/blog_migrate/e6b63aa87ac6b9910d4f0f4a1467a9cd.png)
![请添加图片描述](https://i-blog.csdnimg.cn/blog_migrate/29224a6a473ea4275b19bb0ebd2fdc3f.png)
如下图所示,这是典型的时序结构。 解释图中的符号:
我们分析这个电路,由下图可看出: 解释上图,第二个触发器要想满足setup time,就必须要满足:
由此,我们可以推迟公式: 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和时钟频率之间是没有关系,故降低时钟速度不能解决保持时间不满足的问题,很多面试题喜欢在这里挖坑。