建立保持时间
寄存器锁存数据需满足建立、保持时间。
建立时间(setup time)是指在触发器的时钟信号上升沿到来以前,数据稳定不变的时间。
保持时间(hold time)是指在触发器的时钟信号上升沿到来以后,数据稳定不变的时间。
以下是个人对于建立、保持时间的理解。
理解需要的一些参数:
Tco :触发器延时,时钟到来采集数据到Q端输出数据所需时间(触发器固有属性)。
Tde:组合逻辑和布线产生的时延。
Tsu:触发器所需建立时间。
Tsu_r:建立时间裕量(Tsu_r ≥ 0)。
Thd:触发器所需保持时间。
Thd_r:保持时间裕量(Thd_r ≥ 0)。
触发器组合
上图是最常见的触发器组合,两个触发器1、2经过组合逻辑(时延Tde)连接,两个触发器采用相同时钟源,取不同的名字A_clk、B_clk。
无时钟偏移(skew)的建立/保持时间
数据经过DATA、B、C、D点的波形图如下所示。
建立时间
当A_clk与B_clk同步时,A_clk到来时,触发器1采集数据,经过Tco到达B端,经过Tde到达C端。当B_clk到来,触发器2从C点采集数据,经过Tco传到D点,触发器2采集数据之前,需要数据保持Tsu的建立时间。两次采集数据的时间差就是周期T,周期中剩下的时间就是建立时间裕量Tsu_r。由图可知:
Tco + Tde + Tsu_r + Tsu = T
保持时间
触发器1采集第二次数据后,经过Tco + Tde到达C端,改变C端数据,在这之前,触发器2的第一次数据必须走完保持时间Thd。由图可知:
Tco + Tde = Thd + Thd_r
Tco 和 Tde是真实产生的时间,而建立/保持时间及其裕量都是用来对比的时间,并不会真实产生。有skew时更好理解保持时间(下一节)。
有时钟偏移(skew)的建立/保持时间
建立时间
直接上图:
A_clk到来时,触发器1采集数据,经过Tco到达B端,经过Tde到达C端。当B_clk到来,触发器2从C点采集数据(红点),A_clk与B_clk存在skew的时间差,再经过Tco传到D点。同样触发器2采集数据之前,也需要数据保持Tsu的建立时间,但是这次多给了建立时间skew(skew可正可负)的裕量。触发器1两次采集的时间差为T(两条绿线之间)。所以:
Tco + Tde + Tsu_r + Tsu = T + skew
保持时间
继续上图
同理,触发器1采集第二次数据后(绿点),经过Tco + Tde就会到达C点,此时触发器2必须从C点采集完第一次的数据(红点),并走完保持时间,这样才能有效锁存第一次的数据。所以:
Tco + Tde = Thd + Thd_r + skew
结论
若skew为正,时序会对建立时间裕量(Tsu_r )更加宽松,对保持时间裕量(Thd_r)更加严格。
一般情况保持时间违例较难发生,因为取极限,只需满足Tco ≥ Thd即可,这两项都是触发器的固有属性,制造时就可以满足。当保持时间违例时,一般建立时间也就违例了。