Cadence Innovus (Legacy UI) · stage 6 of 16

Pre-placement readiness

Covers fixed and preplaced baselines, dont_use and dont_touch restrictions, blockages and padding, tie cells, scan chains, placement settings, timing readiness, and congestion risk before placement.

7 min read · Free, no login

Get Innovus + ICC2 Cheat Sheets at ₹199

This stage checks everything placement depends on before it runs: the fixed and preplaced baseline, dont_use and dont_touch restrictions, blockages and padding, tie-cell readiness, scan chains and spare cells, placement and optimisation settings, timing readiness, and congestion risk, ending in a final gate check.

Sanity check cheat sheet

One row per command card. Read left to right: the check, the command that answers it, then what a healthy result, a result to review and a hard stop look like.

CardCheck and whenCommandHealthyReviewHard stop
R-01 Fixed and preplaced baseline
Before pre-placement setup
dbGet -p top.insts.pStatus fixed
dbGet -p top.insts.pStatus placed
dbGet -p top.insts.pStatus unplaced
FIXED covers the macros and preplaced physical cells you expect, and every standard cell is unplaced. Standard cells that are already PLACED, or FIXED instances that no floorplan note explains. A macro that is not FIXED, or a macro, end cap or well tap that is unplaced.
R-02 dont_use and dont_touch
After library and constraint setup
report_preserves -dont_use
report_preserves -dont_touch
report_preserves -obj_type inst -dont_touch
Every constrained object is one you listed in the restriction script, and the cells that later steps need usable. Entries nobody listed, for example from a library attribute or a hierarchical setting that overrides a design-wide one. A cell that a later step must use, such as a hold or clock cell, is dont_use with no recorded reason. Tie cells are judged in R-04.
R-03 Placement blockages and padding
After floorplan, before placement
writeFPlanScript -fileName <f> -sections {placeBlockages routeBlockages}
checkFPlan -reportUtil -outFile <f>
reportInstPad -all
Each blockage has a purpose, a type and a density you can name, and effective utilisation is within your budget. Effective utilisation well above target, or padding that nobody recorded, which quietly removes open sites. Effective utilisation above your budget, or a hard blockage over an area the plan needs for cells.
R-04 Tie-cell readiness
After physical cells, before placement
getTieHiLoMode -nonDefault
checkDesign -tieHiLo -noHtml -outfile <f>
The tie cell pair is named and usable, and tie terminals are connected or reserved for addTieHiLo. Unconnected tie terminals while the plan is addTieHiLo after placement, which is expected but must be recorded. Tie insertion is set to honour dont_use while the plan names the only tie cells carry dont_use.
R-05 Scan chains and spare cells
After floorplan, before placement
report_scan_chain -out_file <f>
scanTrace -verbose
reportScanCell
Each chain traces from its start to its stop with the count test insertion gave, and every spare gate is listed. Scan reordering is switched off on purpose, or some spare cells are missing from the spare list. A scan block with no chain information, or a chain whose trace stops before its stop point.
R-06 Placement, optimisation and analysis settings
Before placement
getPlaceMode -nonDefault
getOptMode -nonDefault
getAnalysisMode -nonDefault
Every non-default setting is in the pre-placement script and has a stated reason. An analysis setting that placement overrides, such as hold checking or sdcControl propagation, so it does not apply here. Timing effort or scan reordering differs from the plan, so the run would not do what the plan says.
R-07 Timing and optimisation readiness
Before placement
check_timing -verbose > <f>
check_design -type "timing opt" -out_file <f>
timeDesign -prePlace -outDir <dir>
Constraint warnings are reviewed, and a net-load-ignored baseline is stored with its view list. Negative slack before placement starts with no deficit that needs an owner. check_design reports errors, or no timing constraints are loaded, so placement would run without timing.
R-08 Congestion risk before placement
Before placement
report_route -track_utilization -layer <bottom_layer>:<top_layer>
getDesignMode -congEffort
reportCongestion -hotSpot -overflow
Available tracks per layer meet the project budget, and the plan for narrow channels is recorded. A hotspot in a macro channel, or the channel setting left at none while a channel is narrow. A hotspot above your budget, on a route taken after the last floorplan change, that the floorplan has to fix.
R-09 Ready for placement gate
Last step before placement
check_design -type place -out_file <f>
checkPlace <report_file>
checkDesign -place -noHtml -outfile <f>
check_design reports no errors, checkPlace finds no violation on FIXED objects, and the unplaced count equals the standard cell count. Warnings that point to settings you made on purpose, each with a recorded reason. Any check_design error, any violation on a macro or preplaced cell, or pin access issues on rows.

Command cheat sheet

Legacy UI commands. Angle brackets are placeholders, and values shown are examples, not project limits.

Fixed, preplaced and physical-only inventory
dbGet -p top.insts.pStatus fixedPointers to every FIXED instance. Count them and compare with the recorded baseline.
dbGet -p top.insts.pStatus unplacedPointers to instances that placement still has to place.
dbGet [dbGet -p top.insts.isPhysOnly 1].nameThe names of the physical-only instances, such as end caps and well taps.
checkPlace <report_file>Markers and a report for placement violations of FIXED and PLACED cells, with placed and unplaced counts and density. Writes a file.
Optimisation restrictions: dont_use and dont_touch
report_preserves -dont_useObjects that carry non-default dont_use or use_cells attributes.
report_preserves -dont_touchObjects that carry non-default dont_touch, read_only or ILM attributes.
report_preserves -computed -dont_touchAdds the computed attributes that show where an object inherits its setting from.
dbGet top.insts.isDontTouch 1 -pPointers to every instance marked dont_touch.
get_property [get_lib_cells <lib_cell>] is_dont_useTrue if the library cell description includes dont_use.
get_property [get_nets <net>] is_dont_touchTrue if a set_dont_touch constraint exists on the net.
setDontUse <cell> trueStops optimisation from using the cell. Persists through save and restore. Changes the database.
setDontUse -hinst <hinst> <cell> trueApplies the setting inside one hierarchical instance. The more specific setting wins. Changes the database.
set_dont_touch [get_cells <inst>] trueStops optimisation from modifying the instance, which can still be moved. Changes the database.
set_dont_touch <net> trueStops the net from being buffered or restructured. The instances on it can still be resized. Changes the database.
Placement blockages, padding and halos
writeFPlanScript -fileName <f> -sections {placeBlockages routeBlockages}The placement and routing blockages as Tcl commands you can read and diff. Writes a file; do not source it as a check.
defOutBySection <f.def> -pBlockages -rBlockagesWrites the placement and routing blockages to the BLOCKAGES section of a DEF file. Writes a file.
dbGet top.insts.pHaloBoxThe halo box of each instance, where one is set. The attribute name is listed in the reference and the use here was not run.
getPlaceMode -place_detail_honor_inst_pad -place_detail_pad_fixed_instsWhether detail placement honours instance padding and padding of fixed instances.
checkFPlan -reportUtil -outFile <f>Floorplan violations with markers, and target and effective utilisation. Writes a file.
reportInstPad -allEvery instance that carries padding. Instance padding is in sites relative to the instance.
reportCellPad -file <f>The number of library cells with padding in the log, and the list with their padding in a file. Writes a file.
createPlaceBlockage -type hard -box {<x1> <y1> <x2> <y2>} -name <name>A hard placement blockage in the box. Changes the database.
createPlaceBlockage -type soft -box {<x1> <y1> <x2> <y2>} -name <name>A soft blockage that accepts only buffers, inverters, isolation cells, clock gates, tie cells and level shifters.
createPlaceBlockage -type partial -density <percent> -box {<x1> <y1> <x2> <y2>}A partial blockage with a maximum placement density. Density is in steps of 5 between 5 and 100. Changes the database.
deletePlaceBlockage -type softRemoves the soft placement blockages. Changes the database.
specifyInstPad <inst> <sites>Reserves padding, in sites, around an instance during global placement. Changes the database.
specifyCellPad <leaf_cell> <sites>Reserves padding, by default on the right side, for every instance of the cell. Left and right are in sites and top and bottom in rows. Changes the database.
deleteAllCellPadRemoves all cell padding, so checkPlace no longer counts it in utilisation. Changes the database.
Tie cells
getTieHiLoMode -nonDefaultThe setTieHiLoMode settings that are not at their default value.
checkDesign -tieHiLo -noHtml -outfile <f>Unconnected tie terminals and tie pins and PG pins on different nets.
setTieHiLoMode -cell {{<tie_hi> <tie_lo>}} -maxFanout <n> -maxDistance <um>Names the tie cell pair and limits the fanout and distance of each tie net. Changes the session settings.
setTieHiLoMode -honorDontUse true -honorDontTouch trueMakes tie insertion respect dont_use and dont_touch. Both default to false. Changes the session settings.
addTieHiLo -cell "<tie_hi> <tie_lo>"Adds tie cells and connects the tie pins. Run it after the standard cells are placed. Changes the database.
verifyTieCell -report <f>Checks the tie nets against the tie cell list. Use it after addTieHiLo. Writes a file.
Scan chains and spare cells
report_scan_chain -out_file <f>Bit count and floating and ordered wire length of each chain. Calls scanTrace first. Writes a file.
scanTrace -verboseTraces the specified chains and logs the start and end points and the traced instances. -compLogic and -lockup are off by default and may help when a trace stops early.
reportScanCellThe scan cells known from the timing library or from specifyScanCell.
getScanReorderMode -nonDefaultThe setScanReorderMode settings that are not at their default value.
dbGet [dbGet [dbGet top.insts.cell.name <spare_cell> -p2].isSpareGate 1 -p].nameThe instances of the cell that are marked as spare gates.
specifyScanChain <chain> -start <pin> -stop <pin>Declares a scan chain by its start and stop points. Not needed when the chains come from a scan DEF. Changes the database.
specifySpareGate -inst <inst>Marks netlist instances as spare gates before placement. Wildcards are allowed. Changes the database.
createSpareModule -moduleName <module> -cell {<cell> <n>}Builds a spare module when the netlist has no spares. Changes the database.
placeSpareModule -moduleName <module> -numModules <n>Instantiates the spare module. Before placement it only adds the cells, marked unplaced, and after placement it calls ecoPlace. Changes the database.
setPlaceMode -place_global_module_aware_spare trueKeeps spare cells inside the bounds of their hierarchy. Changes the session settings.
Placement, optimisation and analysis settings
getPlaceMode -nonDefaultThe setPlaceMode settings that are not at their default value.
getOptMode -nonDefaultThe setOptMode settings that are not at their default value.
getAnalysisMode -nonDefaultThe setAnalysisMode settings that are not at their default value.
getDesignMode -congEffortThe congestion effort level of the design mode.
setPlaceMode -place_global_timing_effort mediumSets the effort level of the timing-driven global placer, medium or high, with medium the default. The place_design entry shows this value as its non-timing-driven example, so the two entries disagree and the behaviour is not verified. Changes the session settings.
setPlaceMode -place_global_reorder_scan falseTurns scan reordering off for placement. Changes the session settings.
Timing readiness
check_timing -verbose > <f>Constraint consistency and completeness warnings, grouped by type. Writes a file.
check_design -type "timing opt" -out_file <f>Both categories in one run, with the full list in the file. Writes a file.
timeDesign -prePlace -outDir <dir>Timing reports with net load ignored, ideal clocks and no DRV files. Writes files.
Congestion risk and final gate
getPlaceMode -place_global_cong_effort -place_global_auto_blockage_in_channelThe congestion effort of global placement and how narrow macro channels are blocked.
report_route -track_utilization -layer <bottom_layer>:<top_layer>Per layer: the share of tracks taken by the PG mesh, blockages, cells and nets, and what remains.
reportCongestion -hotSpot -overflowAverage congestion, overflow and hotspot scores. Needs a route in the database.
setPlaceMode -place_global_auto_blockage_in_channel softLets global placement add soft blockages in narrow macro channels. Changes the session settings.
check_design -type place -out_file <f>The placement prerequisite list. Errors stop the current script. Writes a file.
checkDesign -place -noHtml -outfile <f>Instances with placement violations, outside the core, overlapping each other or overlapping placement blockages. Writes a file.
saveDesign <name>.encThe checkpoint to return to if placement is repeated. Writes files.