Uploaded by yeu shan

数字IC后端实现之Innovus dbGet常用命令合集 - 知乎

advertisement
2023/6/10 清晨5:09
数字IC后端实现之Innovus dbGet常用命令合集 - 知乎
首发于
切换模式
吾爱IC社区
写文章
数字IC后端实现之Innovus dbGet常用命令合集
吾爱IC
17 人赞同了该文章
最近陆续收到不少小伙伴们的私信,提到初学者应该如何快速学习掌握dbGet的用法。对于习惯了
S家的命令后,乍一看dbGet是不是觉得脑袋瓜都要炸了?的确是这样的,小编第一个项目刚用
innovus的时候也有这种感觉。第一次用小编想要去get到一颗buffer都不会,好尴尬。这么丢脸
的事情怎么要说出来呢。
其实刚开始不会,一点都不丢脸。如果一直持续不会下去,那才是真的丢脸。很多小伙伴经常私
信,抱怨某些专题很难,学不会。每当看到这些信息,小编都会劝他们并抛出一句话。这句话是
“世上无难事,只怕有心人”。
即便再难学的东西,看一遍不会,继续看第二遍,第二遍看不懂继续看第三遍,一直这样重复下
去,小编不相信有搞不定的问题。在这个过程中可能大脑时不时会告诉自己这个太难了,太枯燥
了,搞不定等等信息。所以只要你不被大脑发出的这些干扰信息所影响,你就一定能够成功(这个
方法小编不轻易告诉别人的哦)。
所有成功的背后都意味着无数的汗水,没有人能够随随便便就优秀的,所有优秀的背后一定是蓄谋
已久的。
吾爱IC社区已经为你们提供了让你足够优秀的基础条件,包括各种培训资料,各种技术干货,各类
技术问答,EDA环境,甚至都提供了各种项目案例。所以只要你用心,假以时日想不牛都困难。
下面为innovus floorplanning的test case教学案例,需要的小伙伴们可以前往小编知识星球下
载。
OK,今天小编将分享数字IC后端实现Innovus dbGet常用的命令。好好理解掌握每个命令的用法
后,你也能够熟练应用了。Let's Go!
• 列出设计中所有unplace的instance
dbGet [dbGet -p top.insts.pStatus unplaced].name
• 列出设计中所有place的instance
dbGet [dbGet -p top.insts.pStatus placed].name
赞同 17
​
​
添加评论
​
https://zhuanlan.zhihu.com/p/306622656
分享
​
喜欢
​
收藏
​
申请转载
​
1/10
2023/6/10 清晨5:09
数字IC后端实现之Innovus dbGet常用命令合集 - 知乎
• 列出设计中所有fix的instance
dbGet [dbGet -p top.insts.pStatus fixed].name
select_obj [dbGet top.insts.pstatus fixed -p]
那么,ICC/ICC2中如何get到所有fixed cell呢?
get_cells -hierarchical -filter "is_fixed == true"
• 列出block io端口terminal所用的layer
dbGet top.terms.pins.allShapes.layer.name
• 列出设计中的non default rules (NDR)
dbGet head.rules.name
report_routing_rules (ICC)
• 列出某条net的route rule
dbGet [dbGet -p top.nets.name netName].rule.name
有的时候我们对某些net设置一个special net rule后,想查看是否设成功了,可以通过这个命令来
实现。对于很多net的情况,可以foreach循环来实现。
• 获得某个/选中instance的pStatus信息
dbGet [dbGetInstByName instName].pStatus
dbGet selected.pstatus
instance的pStatus有unplace,placed,fixed,cover,softfixed四种属性。在Innovus中如果cell有fix
属性,那么这颗cell的边框会比较粗。典型的cell,比如有tapcell,endcap和寄存器等cell。
• 避免特定multibit寄存器被拆分(debanking)
dbSet [dbGetInstByName <flop_name>].dontSplitMultibit 1
• 避免特定multibit寄存器被合并(banking)
dbSet [dbGetInstByName <flop_name>].dontMergeMultibit 1
吾爱IC社区之前推送过低功耗设计实现中一些方法,其中有个专题就是讨论如何在DC综合和APR
阶段利用Multibit Reg来做低功耗实现。Multibit reg通常有2bit,4bit,8bit等情况。具体使用
哪种需要前期做好PPA评估再定方案。
• 选中出设计中的所有hard blockage
select_obj [dbGet top.fplan.pBlkgs.type hard -p]
• 获得方形routing blockage的坐标
https://zhuanlan.zhihu.com/p/306622656
2/10
2023/6/10 清晨5:09
数字IC后端实现之Innovus dbGet常用命令合集 - 知乎
dbGet top.fplan.rBlkgs.shapes.rect
• 获得多边形routing blockage的坐标
dbGet top.fplan.rBlkgs.shapes.poly
• 列出设计中用到的所有cell类型
dbGet -u top.insts.cell.name
• 获得 block/memory的placement halos大小 (block包括memory)
dbGet [dbGet -p2 top.insts.cell.subClass block*].pHaloTop
dbGet [dbGet -p2 top.insts.cell.subClass block*].pHaloBot
dbGet [dbGet -p2 top.insts.cell.subClass block*].pHaloLeft
dbGet [dbGet -p2 top.insts.cell.subClass block*].pHaloRight
• 获得 block routing halos大小和最低最高层
dbGet [dbGet -p2 top.insts.cell.subClass block*].rHaloSideSize
dbGet [dbGet -p2 top.insts.cell.subClass block*].rHaloBotLayer.name
dbGet [dbGet -p2 top.insts.cell.subClass block*].rHaloTopLayer.name
• 确认所有的1'b0和1‘b1都练到tie cell,而非直接连接到VSS和VDD
dbGet top.insts.instTerms.isTieHi 1
dbGet top.insts.instTerms.isTieLo 1
如果都有tie cell,那么命令执行后应该返回0X0。如果返回值是其他值,那么可以继续使用下面的
命令找出需要加tie cell的instTerms。
dbGet [dbGet -p top.insts.instTerms.isTieHi 1].name
dbGet [dbGet -p top.insts.instTerms.isTieLo 1].name
• get所有连接到tie cell的instTerm名字
dbGet [dbGet -p [dbGet -p2 top.insts.cell.subClass
coreTieLo].instTerms.net.allTerms.isInput 1].name
• 更改net的route属性(比如从 FIXED 到ROUTED)
dbSet [dbGet -p top.nets.name netName].wires.status route
• 获得设计的状态
dbGet top.statusIoPlaced
https://zhuanlan.zhihu.com/p/306622656
3/10
2023/6/10 清晨5:09
数字IC后端实现之Innovus dbGet常用命令合集 - 知乎
dbGet top.statusPlaced
dbGet top.statusClockSynthesized
dbGet top.statusRouted
dbGet top.statusRCExtracted
dbGet top.statusPowerAnalyzed
•
列出某条net所用到的layer
dbGet [dbGet -p top.nets.name netName].wires.layer.name
• fix某条net的shape
dbSet [dbGet -p top.nets.name netName].wires.status fixed
• 选中某条net的shielding net
dbSelectObj [dbget [dbget -p [dbGet -p top.nets.name $net].shieldNets.name
GND].sWires.shieldNet.name $net -p2]
在PR实现中对于高速时钟信号,通常都需要加shielding来消除crosstalk。有的时候即便加了
shielding net,pt中依然发现有若干ps的crosstalk,那么此时可以通过选中victim net的
shielding vss net来进一步分析。
CRPR能补偿crosstalk吗?
• get到特定cell name (ref name)的所有instance
dbGet [dbGet -p2 top.insts.cell.name cellName].name
• get library中特定cell name的size
dbGet [dbGetCellByName cellName].size
• 列出设计中所有clock net
dbGet [dbGet -p top.nets.isClock 1].name
Note: 执行这句命令前,需要先做timeDesign。
如何在Innovus中做好Clock Tree Synthesis?
• 将包含特定关键词clk的所有instance选中,设置成fix属性
dbSet [dbGet –p top.insts.name *clk*].pStatus fixed
select_obj [dbGet [dbGet top.insts.name *clk* -p].name]
• 获得特定route_type的最高层和最低层
dbGet [dbGet -p head.routeTypes.name routeTypeName].topPreferredLayer.num
https://zhuanlan.zhihu.com/p/306622656
4/10
2023/6/10 清晨5:09
数字IC后端实现之Innovus dbGet常用命令合集 - 知乎
dbGet [dbGet -p head.routeTypes.name routeTypeName].bottomPreferredLayer.num
• get database units
dbGet head.dbUnits
• get the manufacturing grid
dbGet head.mfgGrid
• 获得所有的physical only cell,比如filler cell, endcap cell和tapcell等
dbGet [dbGet -p top.insts.isPhysOnly 1].name
• 获得 Dont Touch instances:
dbGet [dbGet -p top.insts.dontTouch true].name
• 获得database中所有Dont Use cells
dbGet [dbGet -p head.libCells.dontUse 1].name
• 获得JTag elements
dbGet [dbGet -p top.insts.isJtagElem 1].name
• 获得所有 spare instances
dbGet [dbGet -p top.insts.isSpareGate 1].name
• get 特定instance的pg pin
dbGet [dbGet top.insts.name $instName -p ].pgInstTerms.name
• get特定instance的pg连接关系
proc getInstPGConnect {c} {
set inst [dbget -p top.insts.name $c]
puts "PG connection of instance $c:"
foreach PGT [dbget $inst.pgCellTerms.name] {
puts "\tPin : $PGT --> Net: [dbget [dbPGTermNet [dbGetPGTermByName $inst
$PGT]].name]" }
}
Example:
getInstPGConnect u_mmu_vir_top/mult_x_12/U821
PG connection of instance u_mmu_vir_top/mult_x_12/U821:
https://zhuanlan.zhihu.com/p/306622656
5/10
2023/6/10 清晨5:09
数字IC后端实现之Innovus dbGet常用命令合集 - 知乎
Pin : VSS --> Net: VSS
Pin : VDD --> Net: VDD_CPU
Pin : VBP --> Net: VDD
Pin : VBN --> Net: VSS
• 选中包含特定module name的所有memory或hierarchy module
selectInst [dbGet [dbGet top.Inst.subClass block -p2].name <specify_module_name> ]
• get到某个module中的所有sequential cell
selectModule <module_name>
dbGet [dbGet selected.insts.cell.isSequential 1 -p2].name
• get到指定net driver的instance name和cell name
set netName netName
set inst [dbGet [dbGet -p [dbGet -p top.nets.name $netName].allTerms.isOutput 1].inst]
Puts "Net: $netName, driving inst name: [dbGet $inst.name], driving cell name: [dbGet
$inst.cell.name]"
• 列出cell某个pin的所有layer
dbGet [dbGet -p selected.cell.terms.name pinName].pins.allShapes.layer.extName
• get到die area/选中boxes的polygon和面积
dbShape -output polygon [dbGet top.fPlan.boxes]
dbShape -output polygon [dbGet selected.boxes]
dbShape -output area [dbGet selected.boxes]
• get top level term pin坐标和layer number
lindex [dbGet [dbGet top.hinst.hinstTerms.term.name <pin_name> p].pins.allShapes.shapes.rect] 0
dbGet [dbGet top.hinst.hinstTerms.term.name <pin_name> -p].pins.allShapes.layer.num
• get到cell的max cap信息
set cellPtrList [dbGet -p head.allCells.name *BUF*]
foreach cellPtr $cellPtrList {puts "[dbGet $cellPtr.name] [dbFTermMaxCap [dbGet -p
$cellPtr.terms.name termName] 1]"}
• 找出包含特定属性的所有instance
set inst_ptrs [dbGet -p top.insts.props {.name == "myProp" && .value == "xyzzy"]
https://zhuanlan.zhihu.com/p/306622656
6/10
2023/6/10 清晨5:09
数字IC后端实现之Innovus dbGet常用命令合集 - 知乎
Puts "Instances with property myProp and value xyzzy: [dbGet $inst_ptrs.name]"
• 找出设计中非clock ports
dbGet [dbGet -p [dbGet -p2 top.terms.net.isClock 0].isInput 1].name
• get到设计中tech site相关信息
dbGet head.sites.name
dbGet head.sites.size
dbIsTechSiteVDDOnBottom [dbGet head.sites.name <name> -p]
• 得到physical only类型的cell (well tap, tie hi/lo, filler, endcap/decap)
dbGet [dbGet -p head.libCells.subClass <subClassName>].name
dbGet [dbGet -p head.libCells.subClass coreWellTap].name
dbGet [dbGet -p head.libCells.subClass coreTieHigh].name
• 打印出设计中所有module名字
foreach module_name [dbGet top.hInst.treeHInsts.cell.name] {
Puts "$module_name"
}
• Get 到设计中所有leaf cells
foreach leaf_name [dbGet -u top.insts.cell.name] {
Puts "$leaf_name"
}
• 给选中instance设置dont touch属性
select_obj [dbGet top.insts.name LS* -p]
foreach term [dbGet selected.instTerms.net.term –e] {
set_dont_touch [dbGet $term.net.name] true
}
• Skip routes hierarchical hard macro nets
proc skiproutesOnHmsNets {hmInstPattern} {
deselectAll
selectInst *$hmInstPattern*
dbset selected.hinst.hnets.net.skipRouting 1
https://zhuanlan.zhihu.com/p/306622656
7/10
2023/6/10 清晨5:09
数字IC后端实现之Innovus dbGet常用命令合集 - 知乎
deselectAll
}
针对某些不想让工具绕线的net,可以通过设置skipRoute选项来实现。不过值得注意的是,这个
操作存在一定风险。如果后续要对这些net进行eco,那么这条net可能会是open net。
不过即便出现open,我们也有办法解决。通过将这些net的skipRoute属性改成0,然后再单独绕
这些net。这样的解法也是非常完美的。
• 删掉macro身上的信号走线
foreach c [dbGet [dbGet -p2 top.insts.cell.baseClass block].name] {
set j [dbGet -p top.insts.name $c ]
dbSelectObj [dbQuery -area [dbGet $j.box ] -objType regular]
puts "Deleting object at [dbGet $j.box ] within Block [dbget $j.name]"
editDelete -selected -type Signal -use SIGNAL
}
• get到设计中非power的via数量
llength [dbGet [dbGet -p top.nets.isPwrOrGnd 0].vias]
• get设计中memory的latency值
set mem_pin [dbget [dbget top.insts.cell.name *RAM* -p2].instTerms.name *CLK]
foreach i $mem_pin {
puts "$i [get_property [get_pins $i] actual_latency_late_rise_max]"
}
• 得到设计中所有直接将reset连接到VSS的flop数量,instance name和ell name
setPreference CmdLogMode 1
# output file name:
set ofile "flop_with_tied_rst.rpt"
set ecofp [ open $ofile w ]
set cnt [llength [dbGet [dbGet [dbGet top.nets.name $VSS_name p].instTerms.cellTerm.name $RSTport -p2 ].inst.name ]]
set insts [dbGet [dbGet [dbGet top.nets.name $VSS_name -p].instTerms.cellTerm.name
$RSTport -p2 ].inst ]
set cnt2 [llength $insts]
puts $ecofp "Total: $cnt $cnt2"
#foreach inst_ptr [dbGet [dbGet [dbGet top.nets.name $VSS_name p].instTerms.cellTerm.name $RSTport -p2 ].inst ]
https://zhuanlan.zhihu.com/p/306622656
8/10
2023/6/10 清晨5:09
数字IC后端实现之Innovus dbGet常用命令合集 - 知乎
foreach inst_ptr $insts {
set inst_name [dbGet $inst_ptr.name]
set cell_ptr [dbInstCell $inst_ptr]
set cell_name [dbGet $cell_ptr.name]
set rst_port [dbGet $inst_ptr.instTerms.cellTerm.name $RSTport -p2]
set net [dbGet $rst_port.net.name]
puts $ecofp "$inst_name $cell_name "
}
close $ecofp
}
好了,今天的内容分享就到这里。如果你比较有心,我相信你会想着整理一份S家对应命令汇总,
那就赶紧去做吧!如果小编的分享对你有所帮助,帮忙点击“在看”并转发给你的朋友,算是对小
编的一点帮助。
小编知识星球简介(如果你渴望进步,期望高薪,喜欢交流,欢迎加入):
在这里,目前已经规划并正着手做的事情:
• ICC/ICC2 lab的编写
• 基于ARM CPU的后端实现流程
• 利用ICC中CCD(Concurrent Clock Data)实现高性能模块的设计实现
• 基于ARM 四核CPU 数字后端Hierarchical Flow 实现教程
• 时钟树结构分析
• 低功耗设计实现
定期将项目中碰到的问题以案例的形式做技术分享
• 基于90nm项目案例实现教程(ICC和Innovus配套教程)
• 数字IC行业百科全书
吾爱IC社区知识星球星主为公众号”吾爱IC社区”号主,从事数字ic后端设计实现工作近八年,拥
有55nm,40nm,28nm,22nm,14nm等先进工艺节点成功流片经验,成功tapeout过三十多颗芯
片。
这里是一个数字IC设计实现高度垂直细分领域的知识社群,是数字IC设计实现领域中最大,最高端
的知识交流和分享的社区,这里聚集了无数数字ic前端设计,后端实现,模拟layout工程师们。
在这里大家可以多建立连接,多交流,多拓展人脉圈,甚至可以组织线下活动。在这里你可以就数
字ic后端设计实现领域的相关问题进行提问,也可以就职业发展规划问题进行咨询,也可以把困扰
你的问题拿出来一起讨论交流。对于提问的问题尽量做到有问必答,如遇到不懂的,也会通过查阅
资料或者请教专家来解答问题。在这里鼓励大家积极发表主题,提问,从而促进整个知识社群的良
性循环。每个月小编会针对活跃用户进行打赏。
最重要的是在这里,能够借助这个知识社群,短期内实现年薪百万的梦想!不管你信不信,反正已
经进来的朋友肯定是相信的!相遇是一种缘分,相识更是一种难能可贵的情分!如若有缘你我一定
会相遇相识!知识星球二维码如下,可以扫描或者长按识别二维码进入。目前已经有680位星球成
员,感谢这680童鞋的支持!欢迎各位渴望进步,期望高薪的铁杆粉丝加入!终极目标是打造实现
本知识星球全员年薪百万的宏伟目标。
发布于 2020-11-22 22:09
https://zhuanlan.zhihu.com/p/306622656
9/10
2023/6/10 清晨5:09
数字IC后端实现之Innovus dbGet常用命令合集 - 知乎
芯片(集成电路)
数字IC设计
半导体
写下你的评论...
还没有评论,发表第一个评论吧
文章被以下专栏收录
吾爱IC社区
吾爱IC社区致力于数字IC设计实现方面的经验分享
推荐阅读
https://zhuanlan.zhihu.com/p/306622656
数字IC后端实现中Ignore pin
的那些经典应用场景
数字IC后
技能?
吾爱IC
吾爱IC
10/10
Download