PT eco fix block timing 概述。

block 级别的 invs pr 完route_opt 后WNS 100ps 左右 viols path 1000 条左右。 (不同工艺不同design 可能标准有差别) 就可以进去timing eco 阶段。

通常timing eco 是主要修hold的。 辅修max_tran max_cap setup 。 (具体做什么不同flow 标准不一样)

首先pr 选择的corner 都是setup & hold的主corner (例如 setup sm40_cworst hold f125_rcbest fm40_cbest)
但是pt 分析timing的时候是所有corner ( sm40_cworst_setup s125cworst_setup sm40_cworst_hold s125_cworst_hold f125_cbest f125_cworst fm40_cbest fm40_cworst sm40_rcworst_setup s125_rcworst_setup sm40_rcworst_hold s125_rcworst_hold f125_rcbest f125_rcworst fm40_rcbest fm40_rcworst) 具体是哪些corner 参照工艺厂商的要求。
有了corner之后还需要sdc (mode) 如果只做func mode 的timing eco 记得关闭dft 相关的check 在sdc里设置
dft 的cell pin都是有特殊名字的如
image

有一些mode 是只做setup 分析的,比如 sm40_cworst_setup 是只做setup 分析的可以设置命令false path 掉这个mode 下的hold check
如setup 关闭可以


hold 关闭可以

用create_scenario create 相对应的scenario (scenario = mode + corner)然后在每个scenario下面 dmsa做下面的操作 (dmsa 这里不详细说)

另外注意timing derate late early 设置到合理的范围内。

设置 dont_use cell set_dont_use [get_lib_cells xxx/xxx] (关于这一步的意义我稍后说)

对于block level io timing path 是可以先不看的。 可以用set_false_path false 掉

然后设置好path group

然后update_timing
report_clock 报告clock 相关信息
check_timing 报告sdc 和 design 相互交互的一些相互信息
report_case_analysis 报告design case analysis 设置的信息
report_constraints -all_violators -max_transition
report_constraints -all_violators -max_capacitance
报告max_tran max_cap 违例
report_constraints -all_violators 报告max_tran max_cap 和timing viols

report_timing -delay max/min 报告具体timing viols path的详细情况。

report_qor 可以看design 整个全局情况, wns tns viols path

接下来分析这些报告。(通常可以跑一下sta 退出session 后看报告再重新load session 再fix 也可以跑完sta后不退出接着准备timing eco)
进行timing eco fix
fix timing eco时候可能需要插入cell, 插入的cell 可能在pr 中已经没有位置放了。
让pt 通过读def来知道在eco的位置处有空才插入cell 的设置是

如果没有设置的话,pt不会管插入那个地方有没有空

至于设置与否对timing的影响程度,得看实际的情况来定

首先就是要注意max_tran max_cap 这种viols。 先fix 这个
max_tran viols 首先会 很大影响 lib 中timing的插值计算, 另外就是max_tran 会吃setup hold 之间的timing window 会影响setup hold 互卡。 (这部分我其它话题有写)

fix max_tran cmd

这里通过插入buffer和换cell 来fix drc -buffer list 指定如果插入cell时候 必须插入list指定的cell。 当size_cell method选择时候, pt可以对insert的cell做size_cell换的cell 可以到库里选所有 set_dont_use false 的cell

所以当eco不希望使用ulvt的时候前面的设置会吧ulvt 设置set_dont_use true
当只有insert_buffer 选择的时候 pt只可以插入 -buffer list指定的 cell .

关于cell的选择, ULVT LVT SVT 不详细解释
buffer cell delay cell delay cell面积比buffer cell 大修hold时候用。 delay 比buffer 延时大。(简单说,如果你的空挡位置有限用delay cell , 同样的面积会延时比buffer大, 空挡位置充足用buffer cell)

buffer VX (同理,位置充足用V1 的效果好。 位置有限用大小更大的cell V2 V3 等。 ) 这就是一个ppa 的 trade off , V1 更灵活,效果好。但是同样的实现效果它比 V2 V3 面积更大。

下来说下修setup

-slack_less_than 是对小于这个slack的path 做setup fix fix 过程中不可以使得path的 setup slack 和 hold slack 低于设置的setupmargin和 hold margin 否则就不会修。
setup 时候default 只会size cell 详细解释如下

然后是hold fix

前面说了那么多这个命令相信我也不用多解释

fix 完后用我前面描述的report 命令报告一个fix后的post timing 报告分析一下

然后

image

write_change 会写出fix timing 的eco 命令默认都是icc的如果用invs做pr 需要转换成invs 命令然后给invs 吃, 做eco 然后ecoroute route_opt 然后再写出def .v 再次进入pt 进行类似前面同样的操作。直到把timing 刷到一个刷不下去的阶段。

最后就需要人工手动做eco了。 手动eco注意什么这里不是一两句话说的明白的。

首先用到的命令大部分就是 上面icc 下面invs

记得每次setup hold tran 交互着修,修一个的时候同时注意其它的有没有变坏

(方法无非就是 对data path clock path 做 vtchange, size , insert cell, late early clock tree , layer assign(这里我没有讲))

最后祝各位在fix timing 时候有好运气, 几把就能干净。

1 个赞