《超强整理 正在连载 -
后端布局布线工具Innovus详细教程
(理论+实践+命令)》
Innovus作为数字后端工具的后起之秀,在先进工艺下已经取得了令人瞩目的成就。其在Run time上的优势令人刮目,在timing、DRC、IR-drop上的结果更是让人竖起大拇指
如果之前没有接触过Innovus的话直接上手感觉可能不是特别容易学习,因此写了一个详细的Innovus教程供大家学习参考。
目前公众号上Innovus相关的教程并未更新太多,剩下的教程已经陆续在网易云课堂上更新了。课程正在连载中,目前已经更新到Floorplan篇章,每节内容都很详细,分为“理论+实践+命令”的组合形式,让大家在理解GUI操作的同时也清楚相应的命令,便于将来写脚本。
且随文附赠的还有相应的Lab能够让大家对着教程跟着一起做。
目前该课程已经更新了25节,感兴趣的可以去看看,目前仅需10元哟,以后随着课程的更新会逐渐涨价哟,需要的可以抓紧了。
下面更新一些Floorplan阶段的关于添加Placement Blockage和Halo的内容。
理论:
为了防止标准单元摆的离宏单元(Macro)太近导致DRC以及IR-drop,我们需要在Macro的外围包上一层Hard Placement Blockage或者在它的外围加上Halo。Halo与Hard Placement Blockage的不同之处在于它的物理位置不是绝对的,而是相对于Macro的边界的,因此Halo在你移动Macro的时候随着它移动。
这节课主要讲Placement Blockage,Halo的内容由下节课来讲。
实践:
如果在2.1节中你是通过loadFPlan dtmf_blocks.fp的方式来导入Floorplan的话,那你的版图里面应该已经添加了Halo了,因为它已经在dtmf_blocks.fp文件里面定义了:
因此这一步就不用做了。
如果你在2.1节是通过自己“Specify Floorplan”的方式创建的Floorplan,且后边自己手工摆放的Macro,那么你还需要给这些Macro外围包上一层Hard Placement Blockage或者给它们加上Halo。
如何添加Hard Placement Blockage?
下面分别讲解GUI操作以及相应的命令。
GUI操作:
在GUI里面的工具栏点击按钮创建:
我们可以通过F3来控制Blockage的类型,默认的就是Hard,如下图所示:
创建完毕后的效果如下,我们可以通过右侧面板中的Obstruct来控制Hard Placement Blockage的显示与否。
可以通过类似的方式给其他Macro创建Blockage。
相应的命令:
createPlaceBlockage -box {x1 y1 x2 y2} -type hard
其中{x1 y1 x2 y2}为Blockage的坐标。
控制Placement Blockage显示与否的命令:
setLayerPreference obstruct -isVisible 0 #关闭显示
setLayerPreference obstruct -isVisible 1 #开启显示
删除所有Placement Blockage的命令:
deletePlaceBlockage -all
查看关于blockage的命令:
help *blockage*
Multiple matches found:
addSizeBlockage
createPlaceBlockage
create_flexfiller_route_blockage
deletePlaceBlockage
deleteSizeBlockage
recreatePtnCellBlockage
上节课讲了Placement Blockage,这节课着重讲一下Halo。
上节课讲的Placement Blockage有一个缺点是需要精确指定坐标,且它不能跟随Macro进行移动。
这里讲一下Halo,它与前者相比不用指定坐标,只需要指定距离Macro边界的距离即可,且它可以跟随Macro进行移动。
在2.1节里面我们可以通过load dtmf_block.fp文件的方式来创建Floorplan或者通过“Specify Floorplan”的方式来创建。在dtmf_blocks.fp文件里面就给每个Macro定义了Halo:
下面介绍一下用“Specify Floorplan”的方式创建Floorplan的情况下,如何手动给所有的Macro添加Halo,分别讲解相应的GUI操作以及对应的命令。
GUI操作:
给所有Macro上下左右各添加20 um的Halo:
相应的效果(注意Halo会随着你移动Macro而跟着移动):
我们可以在右边面板里面的Blockage一栏控制它的显示与否:
相应的命令:
可以用下面的命令来统一给所有的Macro上下左右各加20 um的Halo:
addHaloToBlock -allMacro 20 20 20 20 #left bottom right top
刷新显示,可以输入命令:
redraw
控制Halo显示与否的命令:
setLayerPreference blockHalo -isVisible 0 #关闭显示
setLayerPreference blockHalo -isVisible 1 #开启显示
查看关于Halo的命令:
help *halo*
Multiple matches found:
addHaloToBlock
addRoutingHalo
checkClockTreeCellHalo
deleteHaloFromBlock
deleteRoutingHalo
refineClockTreeCellHalo
report_ccopt_cell_halo_violations
报告一个Macro是否有Halo:
innovus 33> dbGet selected.name
DTMF_INST/ARB_INST/ROM_512x16_0_INST
innovus 34> dbGet selected.isHaloBlock
1
如果想知道Macro上下左右的Halo值是多少:
可以用dbGet命令:
innovus 37> dbGet selected.pHaloleft
20.0
innovus 38> dbGet selected.pHaloright
20.0
innovus 39> dbGet selected.pHalotop
20.0
innovus 40> dbGet selected.pHalobot
20.0
删除Halo:
deleteHaloFromBlock -allMacro
redraw