setup time和hold time的计算

  • Post author:
  • Post category:其他


(以下内容仅仅为了方便记忆)

Setup time: Tsu 建立时间


时钟沿到来之前数据稳定不变的时间

Hold time: Th 保持时间


时钟沿到来之后数据稳定不变的时间

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAc2RkaHls,size_12,color_FFFFFF,t_70,g_se,x_16
watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAc2RkaHls,size_17,color_FFFFFF,t_70,g_se,x_16

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAc2RkaHls,size_20,color_FFFFFF,t_70,g_se,x_16

时间偏移Clock Skew: Tskew=Tc2-Tc1

一般来说data arrive time>data require time(上面一段时间长,下面一段时间短)

Tsu<Tc2-(Tc1+Tck+Tcmb)+T      (下一段路-上一段路+时钟周期)(小-大+T)

=Tskew-Tck-Tcmb+T(这个式子可以更清楚的知道违例了该怎么修)


*这里为什么要加一个时钟周期T呢?因为setup 是前一级寄存器发出的数据,过一个周期,后一级寄存器才去采样。

Th<(Tc1+Tck+Tcmb)-Tc2        (上一段路-下一段路)(大-小)

=Tck+Tcmb-Tskew(这个式子可以更清楚的知道违例了该怎么修)

建立时间裕量Setup Slack=算出来的实际的Tsu-规定的Tsu

保持时间裕量Hold Slack=算出来的实际的Th-规定的Th

如果slack(时间裕量)为正,说明这条路径的延时是满足要求的;如果计算出某条路径的 slack 是负数,则表示路径上的延时太大了,就会有violation(违例),必须做出修改(修改设计 or 修改约束 or 换芯片)


*setup violation修复方法包括

(发生了setup violation说明Tsu太大了,就要把Tsu不等式右边也加大,来迎合更大的Tsu,使得不等式成立):

① 增大时钟周期T,也就是降频

② 减小Tcmb,优化组合逻辑延时,具体包括:

a. 增加一个中间触发器来切割Timing Path,分割组合逻辑延时(流水线结构)

b. 对于有较大负载的节点可以考虑插buffer、逻辑复制的方法来优化扇出,减少关键路径上的负载(插Buffer,逻辑复制)

c. 小Cell换成大Cell,更换更大驱动的Cell,增强驱动能力

d. 更换SVT/LVT的Cell

③ 减小Tskew:采用positive skew(Tskew >0),但是要注意可能引入的hold问题,以及前后级的margin问题

④ 减小Tck:更换更快的时序逻辑单元,如HVT->LVT


*hold violation修复方法包括:

(发生了hold violation说明Th太大了,就要把Th不等式右边也加大,来迎合更大的Th,使得不等式成立)

① 增大Tcmb:增加组合路径延时,通过插buffer、插delay cell、更换驱动、更换阈值的方法(组合逻辑深度的增加会增加芯片的面积、布线资源、功耗,可能产生在慢速工艺库条件下建立时间违例)

② 减小Tskew,甚至采用negative skew,但需做好时钟树的balance。

③ 插入低电平有效的锁存器(Lock-up Latch):高电平期间,锁存器输出保持不变,相当于人为将数据推迟了半个时钟周期,以保证满足hold时间要求。



版权声明:本文为sddhyl原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。