| ||
1、难收敛的半周期(负沿)的timing check,violation较大的情况
设置单独group path去优化,避免影响内部其他path时序优化
使用ostrich软件(innovus安装包中自带这个工具)把需要对比的两个阶段的spef文件进行对比,得出rc scale,
在pr阶段设置上让工具根据更趋近于实际net delay的值去计算timing,看到违例更好的优化
update_rc_corner -name CMAX_m40c -pre_route_res $a -post_route_res {1 1 1} -pre_route_cap $b -post_route_cap {1 1 1} -post_route_cross_cap {1 1 1} -pre_route_clock_res 0 -pre_route_clock_cap 0 -post_route_clock_res {1 1 1} -post_route_clock_cap {1 1 1} -temperature -40 -qrc_tech $qrc_file
3、对于两个skew group的时钟,如果两个时钟之间有check,可通过命令对这两个group做balance
#在create_ccopt_clock_tree_spec之后使用 create_ccopt_skew_group -name SG -balance_skew_groups {CLK1/func CLK2/func}
4、手动做短树,把工具用于垫树的cell(cdb)删掉,inv注意要删偶数个,删完要看一下位置,距离远的摆一下,避免trans
setEcoMode -batchMode true -honorDontTouch false -honorDontUse false setEcoMode -honorFixedNetWire false -honorFixedStatus false -LEQCheck false setEcoMode -updateTiming false -refinePlace false ecoDeleteRepeater -inst {xxx xxx} #ecoAddRepeater -inst setEcoMode -reset ecoRoute
5、common tree做短,可手动将common path的inv/buffer摆放并固定
placeInstance cell_name location -fixed
6、通过place前设置guide/region/fence对module或指定的hier的inst进行优化时序,根据数据流的走向摆放guide/region,人工控制module的摆放位置,减少物理距离,guide约束力最低,fence约束力最强,一般控制工具摆放用region会相对合适些
7、优化reg2cg的时序,可通过clone icg,当func setup和shift hold有冲突的时候,可通过clone mux
create_inst -base_cell ref_name -name full_name create_net disconnect_pin connect_pin
8、early clock flow,在place阶段提前发现问题,也会对时序有较好的作用
#ECF# setDesignMode -flowEffort extreme #setOptMode -usefulSkewPreCTS true set_ccopt_property clone_clock_gates true set_ccopt_property clone_clock_logic true #set_ccopt_property auto_limit_insertion_delay_factor 1.6 #setUsefulSkewMode -macroOnly false #setUsefulSkewMode -delayPreCts true setLimitedAccessFeature innovusEarlyClockFlow 1 setDesignMode -earlyClockFlow true ## 设置ndr rule 设置cts需要用的cell
9、对于block level的模块,端口时序优化in2reg/reg2out,最好在cts时打开update_io_latency
原因:如果不打开update_io_latency(即不给端口补树),则cts后由于reg做了树,此时in2reg的setup就会变得很乐观,reg2out的setup很悲观,工具就不会对in2reg做优化,导致in2reg的datapath可能会走很长,而block合到top后,由于top level对这个port做了树,再加上我们内部datapath走的很长,很大可能会出现setup违例,导致返工的可能性,因此对于block level要打开update_io_latency,port(不管是否update_io_latency)都是从0开始,但对reg会补一个负的平均树长后,再评估in2reg setup是否有违例,是否要优化