icc进行cts时如何控制buffer的插入点
时间:10-02
整理:3721RD
点击:
在top上定义了clock,create_clock CLK
从CLK出来的时钟经过一个mux和一个clock_gated_cell(rtl例化的ICG)之后,连接到了reg的ck端口。
在做cts时,如何控制buffer或者invert的插入是在clock_gated_cell的后面?
从CLK出来的时钟经过一个mux和一个clock_gated_cell(rtl例化的ICG)之后,连接到了reg的ck端口。
在做cts时,如何控制buffer或者invert的插入是在clock_gated_cell的后面?
在clock gate cell 的输出pin 定义成root 点做CTS
那就是用create_clock的定义点定义在clock_gate cell的输出是一样的么?
但是这样的时序会有影响么?因为丢掉了一个mux的时序
此外,如果我的clock_gatecell比较多,这样分别定义也是比较麻烦的。
要不你就把mux 到icg 的输入端的所有net 设置donttouch net试试如果有transition 的话需要解transition,然后再全局报timing
好的,我记得icc说过,在做cts时会自动忽略dont_touch属性的clocknetwork。我去试一下吧。
如果不想在CTS 阶段动net , 用这个option 试试呢?set_clock_tree_exceptions -dont_buffer_nets
我回头试试看,但是不知道为什么工具会给我输入的clk 加入一个大驱动的buffer。
工具可能是为了满足某个要求(我猜测是transition的要求,因为默认的icc会设置max_transition为0.5ns),加入了较大的buffer来保证爬坡或者驱动能力。
后来我为了验证这个问题,设置了set_drive 0 [get_ports CLK_NAME_PORTS],cts之后的结果仍然是加入了lib里面可使用的最大buffer
我不知道是不是因为在cts时工具自动去掉了ideal net相关的属性才导致的问题。