首页 > 其他分享 >2-建立时间与保持时间 & 修复Violation

2-建立时间与保持时间 & 修复Violation

时间:2023-01-14 12:55:05浏览次数:43  
标签:修复 Violation setup cell violation 时间 time hold 时钟

建立时间、保持时间

Setup Time: 时钟沿到来之前输入信号D必须保持稳定的最小时间

Hold Time: 时钟沿到来之后输入信号D必须保持稳定的最小时间

Clk-to-q Time: 输入D满足setup/hold time要求,从时钟沿到来时刻到输出端Q变化至稳定的时间

那么当输入信号D无法满足setup time 或者hold time的要求,我们称之为产生了setup time / hold time violation, Flop Q的输出这个时候是0还是1是不确定的,需要一定的时间才能够稳定在0或者1。所以如果当Q端在clk-to-q时间之后才变得稳定的话,我们就说这个触发器产生了亚稳态Metastability

为什么D触发器会有setup和hold的要求?

D触发器的内部是一个主从锁存器(master-slave latch):

Latch能够存储住状态,靠的是上面的背靠背的反相器。而这个背靠背的反相器能够锁住状态是需要时间的。由此,我们可以分析出

setup time: 在clk的上升沿到来之前,D要传输到Z的时间。因为当Z的值还没有稳定的时候,D如果变化,那么这个背靠背的反相器就无法锁住值。

hold time: 第一个传输门关闭需要的时间,在传输门关闭期间,D->W要保持稳定,这样在传输门关闭之后,W稳定才不会导致背靠背反相器锁住的值发生变化。

所以我们可以看出,当D在setup/hold time window内发生变化,锁存器可能无法锁住一个稳定的值,会导致:

  • Q的值可能不是正确的D

  • 随着D的变化越靠近时钟沿,Q变稳定的时间越长

最后Q稳定到的值可能是随机的(一条线上不可能既传0又传1),注:Q的值最后一定会稳定下来,稳定在高电平或者低电平,这是由于背靠背的反相器会产生正反馈,最终一定会稳定下来。但是当这个稳定的时间超出了clk-to-q的限制,我们就说产生了亚稳态。

经典题目:

总之,Setup违例可以理解为信号传输相对时钟太慢了(组合逻辑太慢),而hold违例可以理解为信号传输相对时钟太快了(组合逻辑太快)

如何修复违例:

Fix setup violation

既然Setup违例可以理解为信号传输相对时钟太慢了,所以修复Setup违例的方法就是要么加快信号传输速度,要么增加时钟到达的时间

  1. 换驱动强的cell
  2. 换速度快的cell(LVT Cell)
  3. 用寄存器切割组合逻辑path、retimin(平衡寄存器输入输出的组合逻辑时间)
  4. 时钟延迟,在capture register的CK pin插入buffer或者inverter以增加capture clock delay。增加capture clock path delay 需要注意:加buf在capture clock endpoint前面,并且检查: 下一级path是不是有setup slack margin 该级register的input pin上的有没有hold margin
  5. 减少扇出(扇出越大,延迟越长)
  6. 调整floorplan(减小线延迟)

Fix hold violation

  1. 在数据路径加buffer或者delay cell。加哪个?Violation较大时,优先使用delay cell;较小时,优先使用buffer。 Delay cell面积上占优势,但是驱动能力较弱。加在什么位置?在逻辑和物理上都应该尽量靠近capture端,也就是endpoint。在逻辑上更靠近endpoint能够保证插入的cells只会影响到有violation的path,物理上更靠近endpoint能够有效避免DRV,因为修hold时加入的cell普遍驱动能力较弱。
  2. 可以换速度慢的cell(HVT Cell)
  3. 调整floorplan(增加线延迟)

注:芯片设计完成后会进行综合,完成后将综合得到的门级网表和设计约束交给后端工具做布局、时钟树综合和布线等工作。由于hold条件比较容易满足,只需要加buffer即可,所以一般我们把保持时间的修复放在这些工作完成之后。

Fix DRV(Design rule violation)

除了修复建立时间和保持时间外,还需对drv进行修复。设计规则实际上也影响着时序,其主要包括max transition,max capacitance, max fanout

我们主要来看max transition,通常也称为slew。有很多原因会造成slew的violation,但最主要的分为以下几类:

  1. cell的驱动能力太弱(换大cell)这是最常见的一类slew的violation,如果某个cell的驱动能力太弱,无法驱动下一级的cell,则比较容易产生比较大的delay。
  2. fanout数目过大(加buffer分组 or 复制寄存器)
  3. net长度太长(加buffer分割这条net)

在setup和hold都满足的情况下,我们为什么还要把transition time做的很小?

  1. 满足一些极端情况。
  2. trans大,导致短路电流大,进而增加动态功耗。trans大信号上升时间长更容易收到干扰。

是否存在一条路径既有setup违例,又有hold违例?有

Case1(在同一个工作条件下,同时发生setup/hold的violation):属于相同start-point和endpoint 

来自:https://zhuanlan.zhihu.com/p/91111805

IMG_256IMG_256

在这条时序路径中:

IN -> A -> C -> OUT 为hold critical

IN -> B -> C -> OUT 为setup critical

IN -> A -> D-> OUT 为setup critical

IN -> B-> D -> OUT 为setup critical

如果我们要修复IN -> A -> C -> OUT这条路径的hold time violation,我们可以:

1、在C上插入buffer,但是这会增加B -> C的延时,加剧B ->C的setup violation

2、在A 上插入buffer,但是这会增加A -> D的延时,加剧A -> D的setup violation

怎么修复IN -> A -> C -> OUT这条路径的hold time violation呢,我们可以:

IMG_256

再复制一个与门,在修复IN -> A -> C -> OUT路径上的hold violation的同时,而没有增加A -> D和B-C的延时。

Case2(在不同工作条件下,同时发生setup/hold的violation):

来自:https://blog.csdn.net/m0_49540263/article/details/121114194

一般在clock gate的检查时,会出现这样的path。工艺越细,SS corner(Slow) 和 FF corner(Fast)下cell的delay偏差越大。由于是高频时钟setup要求路径尽量短,但是路径短了之后,放到FF corner下hold check就过不去了。出现setup和hold同时不过。

解决方案可以是:

  1. 先保hold(因为hold与时钟周期无关),增加data path延时,然后setup降频
  2. 如果不能降频,允许的话,可以将工作条件(PVT)限制在更窄的范围内,比如保证SS corner下的setup,用TT corner(Typical)下的hold check代替了传统FF corner下的hold check。

标签:修复,Violation,setup,cell,violation,时间,time,hold,时钟
From: https://www.cnblogs.com/fukq/p/17051540.html

相关文章