关于建立时间和保持时间的重要性不必多说,电路的大多的时间的计算都是围绕着这两个时间进行的,他们是时序设计的根本。我们所做的静态时序仿真就是为了保证电路满足建立时间和保持时间。关于建立时间和保持时间的资料很多,一直都不是太理解。最近,自己整理了一下自己的理解,拿来和大家分享一下。 2.1概念建立时间:时钟上升沿到来之前,数据需要在输入端保持稳定的时间。 保持时间:时钟上升沿到来之后,数据需要在输入端保持稳定的时间。 深入理解一下: 因为触发器一般都是由“与非门”或者“或非门”连接成反馈电路组成,而时钟不一定与输入端在同一个门的输入端上 ,如图1所示,
[sub]
图1 触发器
这种情况D需要先从与非门[sup]
G4进入G3,而且通过G4、G1到达G2以后,时钟CP从0跳变为1才能正确采样,而D到达G2、G3所需的时间就是所谓的建立时间。(这个不是跳变,而是为1时对门使能,跳变的原理也差不多)。
CP变为1之后,触发器还需要一定的时间才能通过G5、G6将数据输出到Q,这段时间就是保持时间。 [/sup]
[/sub] [sub][/sub]2.2误区网上很多资料都说建立时间和保持时间之和是一个时钟周期。这是一个错误的说法,很误导人,这应该是能满足建立和保持时间要求的最小的时钟周期。建立时间和保持时间的长短只跟器件本身的特性有关,和时钟无关。而建立时间和保持时间的余量才跟时钟相关。时钟的上升沿也只是建立时间和保持时间的一个参考。好的设计的建立时间和保持时间之和总是小于一个时钟周期的。 对于一个设计,如果时间余量太大,则说明设计还可以提速(在晶振能满足要求的情况下); 2.3时间余量的计算方法
图2 建立时间和保持时间 很明显,Q1数据输出比D1数据输入延迟了TCO,D2数据输入比Q1数据输出又延迟了Tp。所以上升时间TS + TCO + Tp < TCLK 。TSMAX = TCLK - TCO - Tp ;建立时间余量就是TSMAX - TS。而每个时序设计在不出错的情况下允许的保持时间的最大值就是:即使建立时间达到了允许的最大值,保持时间也能满足要求的最大的THMAX 为TCLK - TSMAX。所以结论是保持时间允许的最大值和建立时间允许的最大值之和是一个时钟周期。 对建立时间的另一种理解就是,数据能比下一个钟提前TCLK - TCO - Tp到达输入端,而触发器需要在时钟到达之前完成数据的建立,所以建立时间应该比它小。 D2的保持时间:时钟到达D2之后,数据只能保持TCKO从D1的触发端到D1的输出端再到D2的触发端的时间。可以认为这是时钟到达Q端产生输出,输出再到D2的时间。也就是在下一个时钟到D2之前,D2触发端的数据必须消失。 总体思路不是非要去想数据等时钟多久,可以假设数据已经到了,时间要多久才能到,而在时钟到之前,数据必须完成建立和保持。感觉这样想更容易想明白。 建立时间:如果在时钟上升沿到达的时候,数据没有达到建立时间的要求,也就是没有到达触发器内部制定的门,那么数据肯定不能稳定输出。 保持时间:如果在触发器达不到建立时间的要求,在时钟上升沿的时候就会有下一个时钟的数据与本时钟的数据相互冲突的情况,也不能正确输出。Thold(max)= Tclk - Tsetup。实际的hold值要小于它,才能满足下一个数据来的时候,当前的数据已经正常的输出。 同步电路中,触发器在下一个时钟的上升沿才能检测到上一个时钟上升沿的输入。并不是上一个时钟上升沿的输入在下一个时钟的上升沿才输出。 |