微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 微电子和IC设计 > IC后端设计交流 > clock gating cell的hold time violation问题

clock gating cell的hold time violation问题

时间:10-02 整理:3721RD 点击:







做完P&R以后,抽取完寄生参数,放到PT中做STA,发现clock gating cell中的main gate(and gate)的A,B两个
端口报hold time violation,A口是CLK和EN信号经过一个latch,B口是CLK信号,但是是经过CTS以后的clk,网络
名为CLK_cts_3(请见附图1)。但是A口的信号比B口的信号早到,于是 PT报了hold time violation,请问这种问题
是应该在ICC中加约束把violation修掉,还是有其他的处理呢?先谢过各位各位大侠了

================================= PT给出的具体的Timing Report =============================

Startpoint: Controller/clk_gate_i_reg/latch

(negative level-sensitive latchclocked by clk_4_div)

Endpoint: Controller/clk_gate_i_reg/main_gate

(rising clock gating-checkend-point clocked by clk_4_div)

Path Group: **clock_gating_default**

Path Type: min

PointIncrPath

------------------------------------------------------------------------------

clock clk_4_div (fall edge)140.00140.00

clock network delay (ideal)2.84142.84

Controller/clk_gate_i_reg/latch/GN (lanlq1)0.00142.84f

Controller/clk_gate_i_reg/latch/Q (lanlq1)0.18143.02 r

Controller/clk_gate_i_reg/main_gate/A (an02d4)0.00143.02 r

data arrival time143.02

clock clk_4_div (fall edge)140.00140.00

clock network delay (ideal)3.09143.09

Controller/clk_gate_i_reg/main_gate/B (an02d4)143.09f

clock gating hold time0.00143.09

data required time143.09

------------------------------------------------------------------------------

data required time143.09

data arrival time-143.02

------------------------------------------------------------------------------

slack(VIOLATED)-0.07

没错,这个是典型的 离散icg (discrete) 类型, hold violation是真的
以pt结果为主吧, 再修下就好了, 加buffer

谢谢ICFB大
还想问清楚一点,就是这个在ICC里面怎么具体修呢?是针对报HOLD VIOLATION的几条路径逐条加BUFF, 还是用其他的方法?我在CTS后使用
clock_opt -fix_hold_all_clocks
修过大部分路径了,有可能是其中修CLK_cts_3这条路径加BUFF太多增加了太多DELAY,我现在的修hold的时候加的uncertainty是1ns, 我改小到0.5ns但是不起作用,请教具体该怎么修呢?

在CLK这条path上加buffer.
我是觉得如果你的clock不多,也不复杂的话, clk skew有250ps,已经有点偏大了.

如果用ICG的话,根本就没有这个问题了。因为前面的latch已经保证了main_gate的时序

少量的hold violation,把所有endpoint 找到,直接insert_buffer就行了,很快的
你不能指望icc能把所有的hold clean 掉, 总会有顾此失彼的时候,

小编,他这个PR后怎么clock 还是ideal的?

也是啊,你设了 set_propagated_clock么
从数值看不像是 ideal的,

请教陈大,foundry提供的库里面其实是有专门的clock gating cell,但是在DC综合里面我用以下的脚本:================================================================
set_clock_gating_style -sequential_cell latch -positive_edge_logic {and} -negative_edge_logic {or}
insert_clock_gating
propagate_constraints -gate_clock
================================================================
来做门控时钟的综合约束,所以估计才生成了离散的门控时钟单元,那在DC里面怎么样设置才能使得DC综合时针对
上升沿和下降沿的时钟能够自动调用foundry库里提供的门控时钟呢?

icfb大,我在PT里面设置了set_propagated_clock [all_clocks],但是在这之后又定义了几个create_generated_clock,不知道是不是propagated这个属性没有设置到后面定义的clock上去呢?

当然是先定义所有clock,然后再 set_propagated_clock 啊,

set_clock_gating_style -pos integrated -neg integrated
吧,你看看manual,很清楚的
你选or,and,当然是综合成离散icg啊,

set_clock_gating_style -sequential_cell latch -positive_edge_logic {icg_cell_name}

多谢涛大和ICFB大的解答,我用
set_clock_gating_style -sequential_cell latch -positive_edge_logic {integrated:/lib_name/icg_cell_name}
编译时可以成功调用库中的ICG了,但是set_clock_gating_style中的-negative_edge_logic的设置我不是特别理解, 是用来设置哪种情况的呢?

一般就是用一种icg吧, 就是上升沿或者下降沿来gate, 没有必要pos,neg都用,

谢谢解答,来学习。

换成ICG后 EN端可能就会有setup问题了 这个比hold要难解的多

请问在DC综合的时候,用什么命令让DC把那条路径(小编贴出来的那条有hold violation的路径)report出来呢?

DC的时候,时钟还都是ideal的,估计报不出来吧,就算报出来也没有用啊。这些hold violation都是在DC之后修的呀。

ICG cell可以解决问题。
也可以用timing borrow的方式去解决。

学习中

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top