Uploaded by Prakash Billakanti

dbGet Commands

advertisement
List all unplaced instances in the design
dbGet [dbGet -p top.insts.pStatus unplaced].name
###################################################################################
##################
?List all placed instances in the design
dbGet [dbGet -p top.insts.pStatus placed].name
###################################################################################
##################
List all fixed instances in the design
dbGet [dbGet -p top.insts.pStatus fixed].name
###################################################################################
##################
List the metal layers on which the I/O pins of the block reside
dbGet top.terms.pins.allShapes.layer.name
###################################################################################
##################
List the non default rules (NDR) in the design
dbGet head.rules.name
###################################################################################
##################
List the NDRs applied on a specified net
dbGet [dbGet -p top.nets.name netName].rule.name
###################################################################################
##################
List net names with specific max or min voltage
dbGet [dbGet top.nets.maxVoltage value �p].name
dbGet [dbGet top.nets.minVoltage value �p].name
###################################################################################
##################
Get the placement status of an instance
dbGet [dbGetInstByName instName].pStatus
###################################################################################
##################
To avoid splitting of a specified multibit flop, during multibit Optimization
dbSet [dbGetInstByName <flop_name>].dontSplitMultibit 1
###################################################################################
##################
To avoid merging of a specified multibit flop, during multibit Optimization
dbSet [dbGetInstByName <flop_name>].dontMergeMultibit 1
###################################################################################
##################
Get the coordinates of a rectangular routing blockage
dbGet top.fplan.rBlkgs.shapes.rect
###################################################################################
##################
Get the coordinates of a rectilinear routing blockage
dbGet top.fplan.rBlkgs.shapes.poly
###################################################################################
##################
List all cell types used in the design
dbGet -u top.insts.cell.name
###################################################################################
##################
Note: The "-u" parameter filters out the duplicate objects.
Get the size
dbGet [dbGet
dbGet [dbGet
dbGet [dbGet
of block placement halos
-p2 top.insts.cell.subClass block*].pHaloTop
-p2 top.insts.cell.subClass block*].pHaloBot
-p2 top.insts.cell.subClass block*].pHaloLeft
dbGet [dbGet -p2 top.insts.cell.subClass block*].pHaloRight
Get the size and top/bottom layers of 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
Ensure all your tiehi/tielo connections have tie cells (and are not connected to a
rail instead)
dbGet top.insts.instTerms.isTieHi 1
dbGet top.insts.instTerms.isTieLo 1
The previous commands should return "0x0" if all connections have tie cells. If
"1s" are returned, use the following commands to find the terms that still need a
tie cell:
dbGet [dbGet -p top.insts.instTerms.isTieHi 1].name
dbGet [dbGet -p top.insts.instTerms.isTieLo 1].name
Get all instTerm names that are tied to tieLo cells
dbGet [dbGet -p [dbGet -p2 top.insts.cell.subClass
coreTieLo].instTerms.net.allTerms.isInput 1].name
###################################################################################
##################
Change the routing status of a net (for example, from FIXED to ROUTED)
dbSet [dbGet -p top.nets.name netName].wires.status route
###################################################################################
##################
Get the status of the design
dbGet top.statusIoPlaced
dbGet top.statusPlaced
dbGet top.statusClockSynthesized
dbGet top.statusRouted
dbGet top.statusRCExtracted
dbGet top.statusPowerAnalyzed
List the layers used in a net
dbGet [dbGet -p top.nets.name netName].wires.layer.name
###################################################################################
##################
Find all instances of a certain cell type
dbGet [dbGet -p2 top.insts.cell.name cellName].name
###################################################################################
##################
Determine the size of a cell in the library, but not necessarily in the current
design
dbGet [dbGetCellByName cellName].size
###################################################################################
##################
List the nets marked in the db as clock net
dbGet [dbGet -p top.nets.isClock 1].name
Note: Before running the previous command, build a timing graph using the
timeDesign command.
###################################################################################
##################
Set all instances with a particular pattern in the name to fixed status
dbSet [dbGet �p top.insts.name *clk*].pStatus fixed
###################################################################################
##################
Get top and bottom routing layers for a route_type
dbGet [dbGet -p head.routeTypes.name routeTypeName].topPreferredLayer.num
dbGet [dbGet -p head.routeTypes.name routeTypeName].bottomPreferredLayer.num
###################################################################################
##################
Get database units
dbGet head.dbUnits
###################################################################################
##################
Get the manufacturing grid
dbGet head.mfgGrid
###################################################################################
##################
Get physical only cells such as filler cell, end cap cell, and so on
dbGet [dbGet -p top.insts.isPhysOnly 1].name
###################################################################################
##################
Filter all PG pins with direction bidi of a specific instance
dbGet [dbGet -p [dbGet -p top.insts.name instName].pgCellTerms.inOutDir bidi].name
###################################################################################
##################
Get class and subClass of a cell
dbGet [dbGetCellByName cellName].baseClass
dbGet [dbGetCellByName cellName].subClass
###################################################################################
##################
Get the instname / cellname of the driver driving a specific net
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]"
###################################################################################
##################
List all layers for the pin of a cell
dbGet [dbGet -p selected.cell.terms.name pinName].pins.allShapes.layer.extName
###################################################################################
##################
Report points of the polyon that forms the die area
dbShape -output polygon [dbGet top.fPlan.boxes]
###################################################################################
##################
Get Verilog module ports
dbGet [ dbGet -p1 top.hInst.allTreeInsts.name
$moduleInstName].hInstTerms.hTerm.name
###################################################################################
##################
To query top level term pin coordinates and 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
###################################################################################
##################
Query max_cap for a list of cells
set cellPtrList [dbGet -p head.allCells.n ame BUF*]
foreach cellPtr $cellPtrList {puts "[dbGet $cellPtr.name] [dbFTermMaxCap [dbGet -p
$cellPtr.terms.name termName] 1]"}
Find all instances with a specify property name "myProp" (string property type) and
value "xyzzy"
set inst_ptrs [dbGet -p top.insts.props {.name == "myProp" && .value == "xyzzy"]
Puts "Instances with property myProp and value xyzzy: [dbGet $inst_ptrs.name]"
Find non-clock ports in a design
dbGet [dbGet -p [dbGet -p2 top.terms.net.isClock 0].isInput 1].name
###################################################################################
##################
To get information on all tech sites in the design
dbGet head.sites.name
dbGet head.sites.size
dbIsTechSiteVDDOnBottom [dbGet head.sites.name <name> -p]
###################################################################################
##################
Identify and report �physical only� types of cells (well tap, tie hi/lo, filler,
endcap/decap)
You can query the subclass for a cell to check whether it is welltap, tiehigh,
tielow or end cap:
dbGet [dbGet -p head.libCells.subClass <subClassName>].name
For example, to get names of well tap cells (specified as �CLASS CORE WELLTAP � in
LEF), you can use the following command:
dbGet [dbGet -p head.libCells.subClass coreWellTap].name
Similarly, to get names of tie high / tie low cells (specified as �CLASS CORE
TIEHIGH� or �CLASS CORE TIELOW� in LEF), use the following command:
dbGet [dbGet -p head.libCells.subClass coreTieHigh].name
OR
dbGet [dbGet -p head.libCells.subClass coreTieLow].name
To report endcap cells (specified as �CLASS ENDCAP� in LEF), use the following
command:
dbGet [dbGet -p head.libCells.subclass coreEndCap*].name
Similarly, to query filler cells with �CLASS CORE SPACER� in the LEF syntax, you
can use the following command (similar to other physical-only cells):
dbGet [dbGet -p head.libCells.subClass coreSpacer].name
Print all module names in the design
foreach module_name [dbGet top.hInst.treeHInsts.cell.name] {
Puts "$module_name"
}
This will not include the top module name. To get the top module name, run the
following command:
dbGet top.name
Get all leaf cells used in the design
foreach leaf_name [dbGet -u top.insts.cell.name] {
Puts "$leaf_name"
}
Apply set_dont_touch on selected instances
Select the instances on which to apply set_dont_touch. For example, select all
level-shifter instances with the "LS" prefix:
dbGet top.insts.name LS*
Then, run the following command:
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
deselectAll
}
Get the number of vias that are not power in a routed design
llength [dbGet [dbGet -p top.nets.isPwrOrGnd 0].vias]
Break the DFM flow if metal fills are not added to design using run_pvs_metal_fill.
Include following set of command to break the script if metal fill is not added to
design
puts "Checking if run_pvs_metal_fill successfully inserted metal fill
shapes..."
if {[dbGet [dbGet -p top.nets.name _FILLS_RESERVED].sWires.shape fillwire] >=
0} {
puts "db has metal fill - continuing..."
set has_fill 1
} else {
puts "db has no metal fill - stopping dfm run..."
set has_fill 0
}
if {$has_fill < 1} {
break
} else {
.. < rest of of your script>
Report instance pin shape mask
You can use TCL procedure below to report the mask(color) of the instance pin:
proc pinColor {instPin layer} {
if {![regexp $layer [dbGet [dbGet top.insts.instTerms.name $instPin
-p].cellTerm.pins.allShapes.layer.name]]} {
Puts "$instPin doesn't have pin shape on $layer"
} else {
dbGet [dbGet [dbGet top.insts.instTerms.name $instPin
-p].cellTerm.pins.allShapes.layer.name $layer -p2].shapes.mask
}
}
pinColor Ainst/o VIA1
Report all flop instances with reset pin connected to the supply
#
#
dentify all flops with reset tied directly to the vss rail
report total count, and each instname and cellname to an
#
output file named 'flop_with_tied_rst.rpt'
proc findRstPinsTiedToRail{ $VSS_name $RSTport } {
# don't echo dbGet, etc. to screen/log:
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
}
To get the status of a design:
encounter> dbGet top.?? status* // reports the list of status at particular stage
statusClockSynthesized: 0
statusGRouted: 0
statusIoPlaced: 1
statusPlaced: 1
statusPowerAnalyzed: 0
statusRCExtracted: 0
statusRouted: 1
statusScanOpted: 0
Example to check a particular value:
encounter> dbGet top.statusPlaced
1 // it shows design is placed
Note: The top.statusClockSynthesized flag is only for FE-CTS [setCTSMode -engine
ck] not for CCOpt.
Download