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

[转帖] Innovus流程(4)-Route和ECO

[复制链接]

20

主题

1

回帖

148

积分

技术员

积分
148
发表于 2023-6-8 13:40:05 | 显示全部楼层 |阅读模式
1.Route
CTS完成后,如果clock tree没什么问题的话就进入route阶段了,主要是对signal net进行绕线并修复DRC问题。
1.common setup设置
绕线之前,一些常用的设置如下所示:
  1. #设置多孔的优化
  2. setNanoRouteMode -drouteUseMultiCutViaEffort high
  3. setNanoRouteMode –routeReserveSpaceForMultiCut true
  4. setNanoRouteMode –droutePostRouteSwapViaPriority [auto | allNets | criticalNetsFirst | nocriticalOnly(default)]
  5. setNanoRouteMode –droutePostRouteSwapVia multiCut

  6. #设置via的权重
  7. setNanoRouteMode –dbAdjustAutoViaWeight true
  8. setNanoRouteMode –dbViaWeight {vianame weight}

  9. #开启SI分析
  10. setDelayCalMode -siAware true -engine aee

  11. #允许插入antenna cell
  12. setNanoRouteMode –drouteFixAntenna true  –routeAntennaCellName $diode_cell –routeInsertAntennaDiode true

  13. #spread wire
  14. setNanoRouteMode –drouteMinSlackForWireOptimization 0.1(setup slack大于0.1ns才会优化)
  15. setNanoRouteMode –droutePostRouteSpreadWire true

  16. #widen wire
  17. setNanoRouteMode –droutePostRouteWidenWire true

  18. #enable advanced search repair
  19. setNanoRouteMode –drouteExpAdvancedSearchFix true

  20. #route阶段开启optimization
  21. setNanoRouteMode -routeWithOpt true

  22. #设置route的迭代次数
  23. setNanoRouteMode -drouteIteration 20
复制代码
2.将NDR规则设置成hard rule
route阶段,默认将NDR规则当成soft rule,如果绕线资源充分的话可以将NDR设置成hard rule。下面的命令是将M3-M6的NDR设置成hard rule。
  1. setNanoRouteMode –routeStrictlyHonorNonDefaultRule 3:6
复制代码
3.添加shield net
有些signal net处于critical path上,为了尽可能减小crosstalk的影响,可以对这些net添加shield并提前进行绕线,命令如下:
  1. setAttribute –net $net –shield VSS –preferred_extra_space 2
  2. selectNet $net
  3. globalDetailRoute -select
复制代码
4.执行routeDesign
执行完routeDesign后,所有的nets均已完成绕线。此时,可能还会有一些DRC问题,可以在后面的opt和ECO阶段解决。

5.修复EM问题
检查是否有EM violation:
  1. verifyACLimit –use_db_freq –reportem1.rpt
复制代码
读入TCF文件,如果没有TCF文件,使用下面的命令产生:
  1. set_default_switching_activity -reset
  2. set_default_switching_activity –input_activity 0.2 –seq_activity 0.2
  3. propagate_activity
  4. write_tcf test.tcf
  5. read_activity_file –format TCF –set_net_freq true test.tcf
复制代码
修复EM violation:
  1. fixACLimitViolation –useReportFile em1.rpt
复制代码
6.加载calibre的drc文件并修复DRC violation
因为innovus的tech lef文件是calibre的DRC rule文件的简化版,可能会出现innovus里面没有DRC问题,但是calibre里面有DRC问题。使用下面的命令可以加载calibre的drc结果:
  1. loadViolationReport –type Calibre –filename $file
  2. route_fix_signoff_drc [-fix_rule XXX] [-exclude_rule XXX]
复制代码

7.根据DRC marker自动修复violation
下面的命令是修复short的脚本,通过抓出short区域内的instance,并给这些instance添加instance padding从而缓解绕线资源不足的情况。
  1. set marker [dbGet top.markers.subType “Metal Short” -p]
  2. foreach m $marker {
  3. set area [dbGet $m.box]
  4. set inst [dbGet [dbQuery –area $area –objType inst].cell.name AOI –p2]
  5. set insts [add_to_collection $insts $inst]
  6. }
  7. foreach cell insts {
  8.   specifyInstPad $cell –left 2 –right 2
  9. }
  10. refinePlace –preserveRouting true
  11. setNanoRouteMode –drouteEndIteration 40
  12. ecoRoute -fix_drc
复制代码

8.targeted postroute optimization
通常,opt会同时优化timing、power、area、SI、transition等指标。可以仅优化critical path上的timing,命令如下所示:
  1. createTBOptFile –bottleneckInstanceNumber 1000 –outFile tb_opt.txt
  2. setOptMode –targetBasedOptFile tb_opt.txt
  3. optDesign –postRoute –targeted
复制代码
2.ECO
route完成后,如果timing和drc都没有太大的问题就需要通过starRC抽取spef文件,然后在PT里面验证timing是否有问题。然后,可以根据PT的timing report进行ECO,修复timing和DRC问题。这里需要注意的是,PT是S家的,跑完DMSA吐出来的脚本不可以直接被innovus使用,需要将它抓换成innovus可识别的脚本。具体的脚本eetop上面好像有。下面简单说一下ECO阶段几个常见的命令。

1.改变instance的驱动强度
之前提到过修复max_transition的方法,第一种是找出所有input pin的前一级instance并增加其驱动强度。在innovus中改变instance尺寸的命令如下所示:
  1. setEcoMode –LEQCheck false
  2. ecoChangeCell –inst $inst_name –cell $ref_name
  3. size_cell $inst_name $ref_name
  4. setEcoMode -reset
复制代码

2.删除instance
innovus里面删除instance的命令如下所示:
  1. select_obj [dbget -p top.insts.name $instance_name]
  2. editDelete -selected
复制代码

3.在net上插入buffer
  1. #该命令相当于ICC2的add_buffer_on_route
  2. ecoAddRepeater –net $net_name –cell $buf_name –relativeDistToSink 0.5  –name $instance_name –newNetName $new_net_name
复制代码

其中,relativeDistToSink越小表示buf越接近receiver cell,越大越接近driver cell。也可以不使用–relativeDistToSink选项,直接指定具体位置,选项是-loc。一般还是指定net的比例比较方便一点,特殊情况才会用loc选项。

如果该net有多个fanout,但是只想在某一个或某几个fanout上面插入buffer,可以使用-term选项:
  1. ecoAddRepeater –term $pin_name–cell $buf_name –relativeDistToSink 0.5  –name $instance_name –newNetName $new_net_name
复制代码
删除添加的buffer命令如下所示:
  1. ecoDeleteRepeater –inst A/inv1
复制代码
4.将instance都摆放好
  1. ecoPlace
复制代码
5.disconnect_net和connect_net
有时需要改变cell的连接关系,首先要将net的连接关系断开,然后将net连接到新的pin上。
  1. #old_pin是需要断开的pin,new_pin是需要连接的pin,load_pin是不需要断开的pin
  2. set net [dbGet [dbGet top.insts.instTerms.name $load_pin].net.name]
  3. disconnect_net $net $old_pin
  4. connect_net $net $new_pin
复制代码
6.读入ECO网表进行绕线
innovus可以读入ECO网表,工具会自动识别出做了哪些改动,然后进行绕线。
  1. ecoDesign tdsp_core.dat tdsp_core tdsp_core_eco.v
  2. ecoRoute
复制代码
7.插入filler cell
  1. #删除之前的filler cell
  2. deleteFiller -prefix FILLER -keepFixed
  3. deleteFiller -prefix VSTACK
  4. deleteAllCellPad
  5. setFillerMode -reset -fitGap true
  6. set fillerCell [concat $dcap64 $dcap32 $gdap $gfiller $dcap16 $dcap8 $dcap4 $filler3 $filler2 $filler1]
  7. set exception_cell "[dbget head.libCells.name TAPCELLBWP*] ..."
  8. set repair_cell [dbget head.libCells.name FILL1BWP*]
  9. setFillerMode -verticalSlackMaxLength 198 -horizontal_max_length 100 \
  10.               -verticalSlackExceptionCell $exception_cell -verticalSlackRepairCell $repair_cell \
  11.               -horizontal_exception_cell $exception_cell -horiziontal_repaire_cell $repair_cell
  12. setFillerMode -core $fillerCell -add_fillers_with_drc false -corePrefix FILLER -preserveUserOrder true
  13. addFiller -prevent_vertical_stack_max_length_violation
  14. addFiller -fix_horizontal_max_length_violation -fix_vertical_max_length_violation
复制代码
8.验证DRC问题
ecoRoute完成后,查看是否有drc问题,可以设置不检查哪些drc错误,以及检查哪些layer层次和报出错误数量的最大值,命令如下所示:
  1. set_verify_drc_mode –disable_rules $rule –check_only regular –limit 10000
  2. verify_drc –layer_range {M1 M7}
复制代码
9.输出各种数据
1.输出def文件:

吐出def时需要吐出2种def:插入filler cell之前的def以及插入filler cell之后的def。第一种是在PT里面做DMSA时使用的def,第二种是starRC抽取寄生的def。
  1. defOut –routing –floorplan $top_cell.no_filler.def.gz
复制代码
2.输出lef文件:
  1. write_lef_abstract -5.7 –PGPinLayers TM2 –specifyTopLayer TM2 –extractBlockPGPinLayers TM2 –stripePin $top_cell.lef
复制代码
3.输出netlist:
  1. saveNetlist –excludeLeafCell –excludeCellInst $exclude_cells –topCell $top_cell xxx.fe.v
  2. saveNetlist –excludeLeafCell –excludeCellInst $exclude_cells –topCell $top_cell –phy –includePowerGround xxx.be.v
复制代码
4.输出gds:
  1. streamOut $top_cell.gds –mapFile $map_file –mode all –unit $units
复制代码
EDA1024论坛免责声明
请勿上传侵权资料及软件! 如果发现资料侵权请及时联系,联系邮件: fenxin@fenchip.com QQ: 2322712906. 我们将在最短时间内删除。

36

主题

463

回帖

523

积分

工程师助理

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

本版积分规则

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

GMT+8, 2024-5-18 12:09 , Processed in 0.044469 second(s), 21 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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