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

[转帖] Innovus流程(1)-init和FP

[复制链接]

20

主题

1

回帖

148

积分

技术员

积分
148
发表于 2023-6-8 11:00:39 | 显示全部楼层 |阅读模式
最近用innovus跑了TSMC12nm的一个block,在此记录一下。还是根据之前ICC2的flow一样,分为:init、floorplan、place、cts、route和eco。

1.init
1.导入数据
该阶段主要是导入设计文件,创建mcmm(multi corner multi mode)。导入数据的主要命令如下所示,其中lef_file_list包括了tech lef和用到的各种stdcell、ip、io的lef。
  1. set init_top_cell $top_cell_name
  2. set init_verilog $verilog_file
  3. set init_gnd_net $ground_name
  4. set init_pwr_net $power_name
  5. set init_lef_file $lef_file_list
  6. init_design
复制代码
2.创建mcmm
  1. #create ss 125c cwort_T
  2. #create rc corner
  3. create_rc_corner -name cworst_T_125 -qx_tech_file /xxx/xxx/tech/QRC/cworst_T/qrcTechFile -T 125 -preRoute_res 1.0 \
  4. -preRoute_cap 1.0 -preRoute_clkres 1.0 -preRoute_clkcap 1.0 -postRoute_res "1.044 1.044 1.044" -postRoute_cap \
  5. "1.044 1.044 1.044" -postRoute_xcap "1.044 1.044 1.044" -postRoute_clkcap "1.044 1.044 1.044" -postRoute_res \
  6. "1.044 1.044 1.044"
  7. #create library
  8. create_library_set -name ssgnp0p5v125c -timing [xxx/xxx/xxx1.lib ...] -socv [xxx/xxx/xxx.socv]
  9. #create delay corner
  10. create_delay_corner -name ssgnp0p5v125c_cworst_T_125 -library_set [list ssgnp0p5v125c] -rc_corner [list cworst_T_125]
  11. #create mode
  12. create_constraint_mode -name func -sdc_files [list xxx/xxx/xxx.sdc]
  13. #create analysis view
  14. create_analysis_view -name func_ssgnp0p5v125c_cworst_T_125 -constraint_mode func -delay_corner ssgnp0p5v125c_cworst_T_125

  15. set_analysis_view -setup {func_ssgnp0p5v125c_cworst_T_125 } -hold {func_ssgnp0p5v125c_cworst_T_125 }
复制代码
上面仅创建了一个analysis view(ss、125c、cworst_T),并且将该view同时用于setup view和hold view。这只是个示例,实际项目中会创建很多个analysis view,并且setup view和hold view会分别用到多个不同的analysis view。

3.设置local CPU
  1. setDistributeHost local
  2. setMultiCpuUsage -localCpu 8
复制代码
4.设置工艺节点
  1. setDesignMode -process 12
复制代码
5.进行logic power/ground连接
  1. globalNetConnect VDD -type pgpin -pin VDD -inst * -override
  2. globalNetConnect VDD -type tiehi -inst * -override
  3. globalNetConnect VSS -type pgpin -pin VSS -inst * -override
  4. globalNetConnect VSS -type tielo -inst * -override
复制代码
6.吐出timing report
  1. timeDesign -expandedViews -preplace -prefix init -outDir $report_dir
复制代码
7.保存当前设计
  1. saveDesign -compress xxx/$init_top_cell.init.enc
  2. saveNetlist xxx/xxx/xxx.init.v
复制代码
2.floorplan
floorplan主要分为两大部分,第一部分是创建area、摆放port、摆放macro等,第二部分是创建电源网络。由于TSMC12nm的电源网络比较复杂,我对innovus不熟练,因此这一部分我是在ICC2里面做好之后吐出def,然后在innovus读入def即可。下面主要讲一下第一部分的内容。

1.创建area
打开GUI界面,点击Floorplan -> Specify Floorplan


选择Aspect Ratio可以指定宽长比以及利用率,选择Dimension指定具体的长度和宽度。

因为我做的是一个block,所以选择Core to Die Boundary,并给出core to die的距离。

2.摆放port
使用命令摆放port:
  1. editPin -pin $pin_name -layer M4 -assign {$x $y} -pinWidth 0.05 -pinDepth 0.15 -global_location -fixOverlap 1 -fixedPin 1 -snap TRACK
复制代码
上面的命令表示:将clk port摆放在(0 100)附近的M4的track上,长度为0.15,宽度为0.05。可以写一个foreach遍历所有的port,这样就可以将port按照要求拜访完成。

GUI界面摆放port:


点击Edit -> Pin Editor,随后按照图示依次填写即可。

3.创建placement blockage或者halo
一般都会在macro四周创建placement blockage或者halo(相当于ICC2的keepout margin)。命令如下所示:
  1. createPlaceBlockage -name xxx -type hard | soft | partial -box {{llx lly} {urx ury}}
  2. addHaloToBlock 10 20 10 20 $macro_name
复制代码
上面的两条命令分别是创建placement blockage和halo。其中placement blockage的类型有hard、soft、partial和macroOnly。partial blockage可以指定利用率,macroOnly表示在blockage里面只能摆放stdcell,不能摆放macro。

4.创建routing blockage或者halo
一般macro上方都不可以绕线,因此需要添加routing blockage,命令如下所示:
  1. createRouteBlk -box {0 0 100 100} -layer {M1 M2 M3 M4 M5}
  2. addRoutingHalo -block $instance_name -space 10 -top M5 -bottom M1
复制代码
第一条命令指在规定区域内禁止走线M1-M5,第二条命令表示在block的上下左右10um内禁止走线M1-M5。

5.固定macro
innovus里面想要移动instance,快捷键是shift+R。

将macro或者特定instance固定住,使用下面的命令:
  1. dbset [dbget -p top.inst.name $instance_name].pStatus fixed
  2. dbset [dbget -p2 top.inst.cell.subClass block].pStatus fixed
复制代码
dbget和dbset是innovus里面获取对象和设置对象属性的一个核心命令。具体解释过于复杂,这里仅简单介绍一下。第一行的-p和第二行的-p2指返回inst这个变量,instance的属性有pStatus,将它设置成fixed表示将instance固定住。

6.创建电源网络
这里仅做一个示例,创建一个简单的电源网络,实际上TSMC12nm的电源网络并不是这样的。

1.创建core ring

点击 Power -> Power Planning -> Add Rings

选择core ring,指定net,layer,width,spacing,offset后即可,创建后的结果如上图所示。

2.创建stripe

点击 Power -> Power Planning -> Add Stripes


指定nets,layer的层次、方向、宽度。spacing指VDD和VSS的间距,set-to-set-distance指2个相邻VDD(VSS)的间距。最后指定起始点位置即可,效果如下所示:

3.添加power rail

点击Route -> Special Route


创建M1 power rail并将M1连接到M6上。至此,就完成了一个没有macro的最简单的powerplan。

7.检查FP结果
检查place是否有问题
  1. checkPlace -noPreplace
  2. checkPlace -inst [dbget [dbget top.inst.cell.subClacss block -p2].name]
复制代码
运行完checkPlace后的结果如上图所示,可以看到利用率为59.96%,有90730个instance没有摆放。

检查floorplan是否有问题
  1. checkFPlan
复制代码
至此,init和floorplan的主要步骤记录完。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
EDA1024论坛免责声明
请勿上传侵权资料及软件! 如果发现资料侵权请及时联系,联系邮件: fenxin@fenchip.com QQ: 2322712906. 我们将在最短时间内删除。

0

主题

7

回帖

56

积分

实习生

积分
56
发表于 2023-6-14 18:32:31 | 显示全部楼层
感觉分享

0

主题

1

回帖

41

积分

实习生

积分
41
发表于 2023-8-5 23:00:07 | 显示全部楼层
感谢分享

36

主题

463

回帖

473

积分

技术员

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

本版积分规则

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

GMT+8, 2024-5-6 16:48 , Processed in 0.046484 second(s), 21 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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