|
1.DRC设置
place的主要作用是将stdcell摆放在row上,并满足timing和DRC(max_transition、max_cap、max_fanout、max_length)要求。有一些DRC的设置如下所示:
- #设置max transition
- set_max_transition $max_tran -clock [all_clocks]
- #设置max cap
- set_max_capacitance $max_cap [current_design]
- #设置max fanout
- set_max_fanout $max_fanout [current_design]
- setOptMode -fixFanoutLoad true(default is false)
- #设置max length
- setOptMode -maxLength $max_length
复制代码
2.设置useful skew能借到的最大值
- setUsefulSkewMode -maxAllowedDelay $useful_skew_limit
复制代码
3.设置绕线层次
- setNanoRouteMode -routeBottomRoutingLayer $min_layer
- setRouteMode -earlyGlobalMinRouteLayer $min_layer
- setNanoRouteMode -routeTopRoutingLayer $max_layer
- setRouteMode -earlyGlobalMaxRouteLayer $max_layer
复制代码
4.设置dont use
在place阶段禁止使用某些stdcell,例如antenna cell、delay cell、最大驱动强度、最小驱动强度cell等
- set_dont_use [get_lib_cells -q $DVAR(pl,dont_use)] true
复制代码
5.设置Tie-cell的fanout和distance
- setTieHiLoMode -maxFanout $tie_max_fanout
- setTieHiLoMode -maxDistance $tie_max_distance
复制代码
6.设置analysis type
对于TSMC12nm工艺,采用socv类型,设置如下
- setAnalysisMode -analysisType onChipVariation
- setLimitedAccessFeature scov 1
- setAnalysisMode -scov true
- setAnalysisMode -cppr both
复制代码
7.将某些instance设置成dont touch
有时候会希望innovus禁止优化网表里的某些instance或者特定的cell 类型,可以设置dont touch属性
- dbset [dbget -p top.insts.name $instance_name].dontTouch true
- dbset [dbget -p2 top.insts.cell.name $cell_name].dontTouch true
复制代码
8.setPlaceMode 的一些常见设置
- #设置工具优化程度,express时间最快,QoR最差;extreme反之。
- setDesignMode -flowEffort standard (express | extreme)
- #设置congestion的优化程度
- setPlaceMode -place_global_cong_effort high
- setPlaceMode -place_hadr_fence true
- setPlaceMode -honorFence true
- #设置最大density,让工具在优化timing、congestion时不超过改density
- setPlaceMode -place_global_max_density 0.9
- #设置pin density
- setPlaceMode -place_max_pin_density 0.4
- #当utilization小于70%时,将stdcell均匀的摆放在core里面
- setPlaceMode -place_global_uniform_density true(default is false)
- #设置module padding,即该module实际面积是1,工具认为它是1.2,可以缓解congestion。
- #padding有三种:module padding、cell padding和instance padding。后面2种相当于ICC2的placement rule
- setPlaceMode -place_global_module_padding $module_name 1.2
- setPlaceMode -place_detail_honor_inst_pad true
- #设置high effort opt使用的stdcell
- setPlaceMode -highEffortOptCells $high_opt_cell
- #避免出现1倍site的缝隙
- setPlaceMode -place_detail_legalization_inst_gap 2
- #降低power
- setPlaceMode -place_global_clock_power_driven true
- setPlaceMode -place_global_clock_power_driven_effort high
- setPlaceMode -place_global_active_power_driven true
- setPlaceMode -place_global_active_power_driven_effort high
- #禁止instance摆放在M3、M4的power stripe下方
- setPlaceMode -place_detail_preroute_as_obs {3 4}
复制代码
9.开启early clock flow
开启ECF时,需要CTS的常见设置,例如ndr、clock cell等等。开启ECF可以在place阶段知晓clock cell的位置,缓解congestion并保持和CTS更一致的timing。
- setLimitedAccessFeature innovusEarlyClockFlow 1
- setDesignMode -earlyClockFlow true
复制代码
10.开启useful skew
- setOptMode -usefulSkew true
- setOptMode -usefulSkewPreCTS true
复制代码
11.给port插入buffer并添加cell padding
因为不知道外面的cell离port有多远,保险起见,一般都会在block的port附近插入buffer,防止引起timing和DRC的问题。命令如下所示:
- #设置cell padding
- specifyCellPad BUFFD4BWP6T16P96CPDULVT -left 3 -right 3 -top 0 -bottom 0
- set fid [open $net_file w]
- foreach port_name $input_ports {
- set net [get_nets -q -of_object [get_ports $input_port_name]]
- set net_name [get_attribute $net full_name]
- puts $fid $net_name
- }
- close $fid
- attachIOBuffer -in BUFFD4BWP6T16P96CPDULVT -status fixed -suffix PORT_BUF -selNetFile $net_file
复制代码
上面的命令是给input port插入buffer,用到的stdcell是BUFFD4BWP6T16P96CPDULVT ,并且给这个stdcell添加了cell padding,防止堆叠在一起引发congestion。-left 3表示这些cell和其他instance的左侧需要留3个site的距离。插完buffer后的效果如下所示:
12.给某些特定的macro添加routing halo
有些macro上方是不可以走线的,可以添加routing halo来解决,命令如下:
- set inst_name [dbget [dbget -p2 [dbget top.insts.cell.subClass block -p2].cell.name T12].name]
- addRoutingHalo -inst $inst_name
复制代码
13.设置path group
- reset_path_group -all
- set reg [filter_collection [all_registers] "is_integrated_clock_gating_cell != true"]
- set in [all_inputs]
- set out [all_outputs]
- set ckgating [filter_collection [all_registers] "is_integrated_clock_gating_cell == true"]
- set ignore_path_groups [list in2reg reg2out feedthr]
- group_path -name reg2reg -from $reg -to $reg
- group_path -name reg2cg -from $reg -to $ckgating
- group_path -name in2reg -from $in -to $reg
- group_path -name reg2out -from $reg -to $out
- group_path -name feedthr -from $in -to $out
- setPathGroupOptions reg2reg -effortLevel high -weight 10
- setPathGroupOptions reg2cg -effortLevel high -weight 10
- setOptMode -ignorePathGroupsForHold $ignore_path_groups
复制代码
上面的命令分了5组path group,其中有3组不进行hold timing的优化,且reg2reg和reg2cg的优化程度最高。
14.将有关系的instance靠近macro摆放
place_connected –attractor <macro/IO list> {-level $integer | \
-sequential all_connected | direct_connected} [-attractor_pin $pin_list] [-key_cell $cell_list] [-placed] [-move_fixed] [-stop_points] [-instance] [-fixed]
其中,level表示有logic关系的级数,1表示直接相连的cell,2表示次相连的cell。Sequential表示有logic关系的DFF靠近摆放,DFF之间的组合逻辑也靠近摆放。
- place_connected –attractor RAM1 –stop_points {C4 C6}
复制代码
ICC2也有类似的功能,命令是:
- magnet_placement -cells $instance_name $macro_name -mark_legalize_only
复制代码
15.创建bound
bound的主要作用就是将instance摆放在特定区域内,innovus可以将bound分为3种类型:guide、region和fence。其中fence表示被指定的instance必须摆放在特定区域内,没有被指定的instance禁止摆放在特定区域内。region表示被指定的instance必须摆放在特定区域内,没有被指定的instance也可以摆放在特定区域内。guide表示被指定的instance可以不摆放在特定区域内,没有被指定的instance也可以摆放在特定区域内。总的来说,guide的规定最松,fence的规定最严格。
- createInstGroup $region_name -guide | –region | -fence $box
- addInstToInstGroup $region_name $cell_names
- createRegion $region_name $box
- setPlaceMode -place_hard_fence true
复制代码
16.运行place_opt_design
上面的一些设置做完后,就可以运行place_opt_design,让工具摆放stdcell,然后添加tie cell,防止工具在后续绕线时将logic 0和logic 1的pin连接到电源上。
- setTieHiLoMode –cell $tie_cells –maxDistance $distance –maxFanout $fanout
- addTieHiLo
复制代码
17.检查结果
在logs可以查看place的结果是否有异常之处。global placement完成后,工具会进行refinePlace。此时,可以看到instance的平均移动距离以及最大移动距离。一般不超过10个row都不算异常,如下图所示,平均距离为0.27um,最大距离为7.1um。
还可以查看earlyGlobalRoute之后的congestion情况,下图显示了horizontal和vertical的congestion情况,一般overflow小于2%表示后续绕线没有问题。hotspot表示在一个小区域内的congestion情况,如果overflow很小,但是hotspot很大,表示可能存在local congestion。
place_opt_design还会执行optDesign -PreCTS来优化timing,一般place的结果不应该有reg2reg的setup violation,顶多能接受几十ps的violation,过大的话在后续步骤也无法修复。
也可以自己运行checkPlace来检查是否有violation存在,随后打开GUI界面点击Violation Browser按钮。
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
EDA1024论坛免责声明
请勿上传侵权资料及软件!
如果发现资料侵权请及时联系,联系邮件: fenxin@fenchip.com QQ: 2322712906. 我们将在最短时间内删除。
|