dbGet [dbGet -p top.insts.pStatus unplaced].name
dbGet [dbGet -p top.insts.pStatus placed].name
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"
dbGet top.terms.pins.allShapes.layer.name
dbGet head.rules.name
report_routing_rules (ICC)
dbGet [dbGet -p top.nets.name netName].rule.name
有的时候我们对某些net设置一个special net rule后,想查看是否设成功了,可以通过这个命令来实现。对于很多net的情况,可以foreach循环来实现。
dbGet [dbGetInstByName instName].pStatus
dbGet selected.pstatus
instance的pStatus有unplace,placed,fixed,cover,softfixed四种属性。在Innovus中如果cell有fix属性,那么这颗cell的边框会比较粗。典型的cell,比如有tapcell,endcap和寄存器等cell。
dbSet [dbGetInstByName <flop_name>].dontSplitMultibit 1
dbSet [dbGetInstByName <flop_name>].dontMergeMultibit 1
吾爱IC社区之前推送过低功耗设计实现中一些方法,其中有个专题就是讨论如何在DC综合和APR阶段利用Multibit Reg来做低功耗实现。Multibit reg通常有2bit,4bit,8bit等情况。具体使用哪种需要前期做好PPA评估再定方案。
select_obj [dbGet top.fplan.pBlkgs.type hard -p]
dbGet top.fplan.rBlkgs.shapes.rect
dbGet top.fplan.rBlkgs.shapes.poly
dbGet -u top.insts.cell.name
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
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
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
dbGet [dbGet -p [dbGet -p2 top.insts.cell.subClass coreTieLo].instTerms.net.allTerms.isInput 1].name
dbSet [dbGet -p top.nets.name netName].wires.status route
dbGet top.statusIoPlaced
dbGet top.statusPlaced
dbGet top.statusClockSynthesized
dbGet top.statusRouted
dbGet top.statusRCExtracted
dbGet top.statusPowerAnalyzed
dbGet [dbGet -p top.nets.name netName].wires.layer.name
dbSet [dbGet -p top.nets.name netName].wires.status fixed
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来进一步分析。
dbGet [dbGet -p2 top.insts.cell.name cellName].name
dbGet [dbGetCellByName cellName].size
dbGet [dbGet -p top.nets.isClock 1].name
Note: 执行这句命令前,需要先做timeDesign。
dbSet [dbGet –p top.insts.name *clk*].pStatus fixed
select_obj [dbGet [dbGet top.insts.name *clk* -p].name]
dbGet [dbGet -p head.routeTypes.name routeTypeName].topPreferredLayer.num
dbGet [dbGet -p head.routeTypes.name routeTypeName].bottomPreferredLayer.num
dbGet head.dbUnits
dbGet head.mfgGrid
dbGet [dbGet -p top.insts.isPhysOnly 1].name
dbGet [dbGet -p top.insts.dontTouch true].name
dbGet [dbGet -p head.libCells.dontUse 1].name
dbGet [dbGet -p top.insts.isJtagElem 1].name
dbGet [dbGet -p top.insts.isSpareGate 1].name
dbGet [dbGet top.insts.name $instName -p ].pgInstTerms.name
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:
Pin : VSS --> Net: VSS
Pin : VDD --> Net: VDD_CPU
Pin : VBP --> Net: VDD
Pin : VBN --> Net: VSS
selectInst [dbGet [dbGet top.Inst.subClass block -p2].name <specify_module_name> ]
selectModule <module_name>
dbGet [dbGet selected.insts.cell.isSequential 1 -p2].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]"
dbGet [dbGet -p selected.cell.terms.name pinName].pins.allShapes.layer.extName
dbShape -output polygon [dbGet top.fPlan.boxes]
dbShape -output polygon [dbGet selected.boxes]
dbShape -output area [dbGet selected.boxes]
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
set cellPtrList [dbGet -p head.allCells.name *BUF*]
foreach cellPtr $cellPtrList {puts "[dbGet $cellPtr.name] [dbFTermMaxCap [dbGet -p $cellPtr.terms.name termName] 1]"}
set inst_ptrs [dbGet -p top.insts.props {.name == "myProp" && .value == "xyzzy"]
Puts "Instances with property myProp and value xyzzy: [dbGet $inst_ptrs.name]"
dbGet [dbGet -p [dbGet -p2 top.terms.net.isClock 0].isInput 1].name
dbGet head.sites.name
dbGet head.sites.size
dbIsTechSiteVDDOnBottom [dbGet head.sites.name <name> -p]
dbGet [dbGet -p head.libCells.subClass <subClassName>].name
dbGet [dbGet -p head.libCells.subClass coreWellTap].name
dbGet [dbGet -p head.libCells.subClass coreTieHigh].name
foreach module_name [dbGet top.hInst.treeHInsts.cell.name] {
Puts "$module_name"
}
foreach leaf_name [dbGet -u top.insts.cell.name] {
Puts "$leaf_name"
}
select_obj [dbGet top.insts.name LS* -p]
foreach term [dbGet selected.instTerms.net.term –e] {
set_dont_touch [dbGet $term.net.name] true
}
proc skiproutesOnHmsNets {hmInstPattern} {
deselectAll
selectInst *$hmInstPattern*
dbset selected.hinst.hnets.net.skipRouting 1
deselectAll
}
针对某些不想让工具绕线的net,可以通过设置skipRoute选项来实现。不过值得注意的是,这个操作存在一定风险。如果后续要对这些net进行eco,那么这条net可能会是open net。
不过即便出现open,我们也有办法解决。通过将这些net的skipRoute属性改成0,然后再单独绕这些net。这样的解法也是非常完美的。
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
}
llength [dbGet [dbGet -p top.nets.isPwrOrGnd 0].vias]
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]"
}
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 ]
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童鞋的支持!欢迎各位渴望进步,期望高薪的铁杆粉丝加入!终极目标是打造实现本知识星球全员年薪百万的宏伟目标。