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 &quot;Checking if run_pvs_metal_fill successfully inserted metal fill shapes...&quot; if {[dbGet [dbGet -p top.nets.name _FILLS_RESERVED].sWires.shape fillwire] >= 0} { puts &quot;db has metal fill - continuing...&quot; set has_fill 1 } else { puts &quot;db has no metal fill - stopping dfm run...&quot; 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.