找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 545|回复: 1

[转帖] Innovus流程(2)-Place

[复制链接]

20

主题

1

回帖

148

积分

技术员

积分
148
发表于 2023-6-8 11:07:45 | 显示全部楼层 |阅读模式
1.DRC设置
place的主要作用是将stdcell摆放在row上,并满足timing和DRC(max_transition、max_cap、max_fanout、max_length)要求。有一些DRC的设置如下所示:
  1. #设置max transition
  2. set_max_transition $max_tran -clock [all_clocks]
  3. #设置max cap
  4. set_max_capacitance $max_cap [current_design]
  5. #设置max fanout
  6. set_max_fanout $max_fanout [current_design]
  7. setOptMode -fixFanoutLoad true(default is false)
  8. #设置max length
  9. setOptMode -maxLength $max_length
复制代码

2.设置useful skew能借到的最大值
  1. setUsefulSkewMode -maxAllowedDelay $useful_skew_limit
复制代码

3.设置绕线层次
  1. setNanoRouteMode -routeBottomRoutingLayer $min_layer
  2. setRouteMode -earlyGlobalMinRouteLayer $min_layer
  3. setNanoRouteMode -routeTopRoutingLayer $max_layer
  4. setRouteMode -earlyGlobalMaxRouteLayer $max_layer
复制代码

4.设置dont use
在place阶段禁止使用某些stdcell,例如antenna cell、delay cell、最大驱动强度、最小驱动强度cell等
  1. set_dont_use [get_lib_cells -q $DVAR(pl,dont_use)] true
复制代码

5.设置Tie-cell的fanout和distance
  1. setTieHiLoMode -maxFanout $tie_max_fanout
  2. setTieHiLoMode -maxDistance $tie_max_distance
复制代码

6.设置analysis type
对于TSMC12nm工艺,采用socv类型,设置如下
  1. setAnalysisMode -analysisType onChipVariation
  2. setLimitedAccessFeature scov 1
  3. setAnalysisMode -scov true
  4. setAnalysisMode -cppr both
复制代码

7.将某些instance设置成dont touch
有时候会希望innovus禁止优化网表里的某些instance或者特定的cell 类型,可以设置dont touch属性
  1. dbset [dbget -p top.insts.name $instance_name].dontTouch true
  2. dbset [dbget -p2 top.insts.cell.name $cell_name].dontTouch true
复制代码

8.setPlaceMode 的一些常见设置
  1. #设置工具优化程度,express时间最快,QoR最差;extreme反之。
  2. setDesignMode -flowEffort standard (express | extreme)

  3. #设置congestion的优化程度
  4. setPlaceMode -place_global_cong_effort high
  5. setPlaceMode -place_hadr_fence true
  6. setPlaceMode -honorFence true

  7. #设置最大density,让工具在优化timing、congestion时不超过改density
  8. setPlaceMode -place_global_max_density 0.9

  9. #设置pin density
  10. setPlaceMode -place_max_pin_density 0.4

  11. #当utilization小于70%时,将stdcell均匀的摆放在core里面
  12. setPlaceMode -place_global_uniform_density true(default is false)

  13. #设置module padding,即该module实际面积是1,工具认为它是1.2,可以缓解congestion。
  14. #padding有三种:module padding、cell padding和instance padding。后面2种相当于ICC2的placement rule
  15. setPlaceMode -place_global_module_padding $module_name 1.2
  16. setPlaceMode -place_detail_honor_inst_pad true

  17. #设置high effort opt使用的stdcell
  18. setPlaceMode -highEffortOptCells $high_opt_cell

  19. #避免出现1倍site的缝隙
  20. setPlaceMode -place_detail_legalization_inst_gap 2

  21. #降低power
  22. setPlaceMode -place_global_clock_power_driven true
  23. setPlaceMode -place_global_clock_power_driven_effort high
  24. setPlaceMode -place_global_active_power_driven true
  25. setPlaceMode -place_global_active_power_driven_effort high

  26. #禁止instance摆放在M3、M4的power stripe下方
  27. setPlaceMode -place_detail_preroute_as_obs {3 4}
复制代码

9.开启early clock flow
开启ECF时,需要CTS的常见设置,例如ndr、clock cell等等。开启ECF可以在place阶段知晓clock cell的位置,缓解congestion并保持和CTS更一致的timing。
  1. setLimitedAccessFeature innovusEarlyClockFlow 1
  2. setDesignMode -earlyClockFlow true
复制代码

10.开启useful skew
  1. setOptMode -usefulSkew true
  2. setOptMode -usefulSkewPreCTS true
复制代码

11.给port插入buffer并添加cell padding
因为不知道外面的cell离port有多远,保险起见,一般都会在block的port附近插入buffer,防止引起timing和DRC的问题。命令如下所示:
  1. #设置cell padding
  2. specifyCellPad BUFFD4BWP6T16P96CPDULVT -left 3 -right 3 -top 0 -bottom 0
  3. set fid [open $net_file w]
  4. foreach port_name $input_ports {
  5. set net [get_nets -q -of_object [get_ports $input_port_name]]
  6. set net_name [get_attribute $net full_name]
  7. puts $fid $net_name
  8. }
  9. close $fid
  10. 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来解决,命令如下:
  1. set inst_name [dbget [dbget -p2 [dbget top.insts.cell.subClass block -p2].cell.name T12].name]
  2. addRoutingHalo -inst $inst_name
复制代码

13.设置path group
  1. reset_path_group -all
  2. set reg [filter_collection [all_registers] "is_integrated_clock_gating_cell != true"]
  3. set in [all_inputs]
  4. set out [all_outputs]
  5. set ckgating [filter_collection [all_registers] "is_integrated_clock_gating_cell == true"]
  6. set ignore_path_groups [list in2reg reg2out feedthr]
  7. group_path -name reg2reg -from $reg -to $reg
  8. group_path -name reg2cg -from $reg -to $ckgating
  9. group_path -name in2reg -from $in -to $reg
  10. group_path -name reg2out -from $reg -to $out
  11. group_path -name feedthr -from $in -to $out
  12. setPathGroupOptions reg2reg -effortLevel high -weight 10
  13. setPathGroupOptions reg2cg -effortLevel high -weight 10
  14. 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之间的组合逻辑也靠近摆放。
  1. place_connected –attractor RAM1 –stop_points {C4 C6}
复制代码


ICC2也有类似的功能,命令是:
  1. 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的规定最严格。
  1. createInstGroup $region_name -guide | –region | -fence $box
  2. addInstToInstGroup $region_name $cell_names
  3. createRegion $region_name $box
  4. setPlaceMode -place_hard_fence true
复制代码

16.运行place_opt_design
上面的一些设置做完后,就可以运行place_opt_design,让工具摆放stdcell,然后添加tie cell,防止工具在后续绕线时将logic 0和logic 1的pin连接到电源上。
  1. setTieHiLoMode –cell $tie_cells –maxDistance $distance –maxFanout $fanout
  2. 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. 我们将在最短时间内删除。

36

主题

463

回帖

435

积分

技术员

积分
435
发表于 2023-12-30 21:15:23 | 显示全部楼层
谢谢分享
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|EDA1024技术论坛

GMT+8, 2024-4-15 04:41 , Processed in 0.045542 second(s), 21 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表