解决setup和hold违例加buffer的原理是怎样啊
fix hold是延迟data path,当然在datapath上插入buffer或者delay cell
fix setup path是缩短data path,有时候插入buffer有修复transition的效果
transtion修好了,路径自然就快了,
violation就是显示为负。
插buffer可以解决hold time violation的问题。因为hold time就是指数据需要保持一定时间才能让输出稳定,即在这段时间内不能有新的数据到达。所以hold time violation就是说新数据来得太快,所以插入buffer到data path可以可以让新数据来得慢一点。就解决了violation的问题。
setup time就是说数据在时钟到来前一定要建立一段时间,所以在数据就要在时钟来之前就已经到达锁存器的D端,所以这个时候如果要插入buffer就插到该锁存器的clk端口就可以解决violation的问题了
buffer driven strenge not the same,!
建立时间和保持时间违例都能用插入buffer来解决吗?
插buffer修setup是加大buffer size/strength, 目的减少delay
插buffer修hold是增加buffer数量, 目的是增大delay
其中原因, 请自己揣摩一下。
修复setup violation 在clk端插入buffer,就是cts里面做的吧
不是的,从cts阶段插buffer不是为了修setup,当然优化的时候会考虑setup/hold,但是cts主要是为了做clock tree,关注的是latency,skew,transition。修setup的方法一般有1)缩短datapath,根据net delay 和cell delay,插buffer或者换用delay值小的逻辑,反正目的是缩短datapath,但是要注意同路径的hold。 2)delay capture clock 或者 early launch clock,这个主要是根据后一条路径 和前一条路径是否有setup margin如果有的话 可以借。
8楼高手!
可以
cts中加buffer目的是减小clock skew, clock latency。在cts之前,clock被设计成理想状态,没skew,latency,理想transition time等等。
补充一点,对于fix setup vio,加驱动大的buffer的初衷是缩短transition time,增大load能力,从而使整个data path delay减小程度远大于增加buffer自身带来的delay。反之,修hold,加合适buffer初衷是使自身增加的delay,大于其使整个datapath delay的减小程度。
很崇拜大家!
fix setup violation 的加 buffer 跟 upsize 是完全相等吗?
上面几楼的观点按一般情况是行得通的,如若该cell的回路为反馈回路,如分频器,则在ck端添加buffer是几乎没有作用的,只能考虑加大BUF本身的size,以增大driving减小transition和delay。
完美解决了 插buffer 对于 fix setup和hold vio的问题
请教在怎样插入buffer
有的时候hold修好了,但是setup violation又来了,修hold 的同时要关注setup的violation slack,最好对所插入buffer或delay cell的延时有一个预估,hold修好后,setup violation的slack要小于margin流出来的余量就可以了。
2楼已经解释的比较详细了
请问,为什么在CK端加buffer是没有用的?