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.
| Card | Check and when | Command | Healthy | Review | Hard stop |
|---|---|---|---|---|---|
| R-01 | Fixed and preplaced baseline Before pre-placement setup |
dbGet -p top.insts.pStatus fixeddbGet -p top.insts.pStatus placeddbGet -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_usereport_preserves -dont_touchreport_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 -nonDefaultcheckDesign -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 -verbosereportScanCell |
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 -nonDefaultgetOptMode -nonDefaultgetAnalysisMode -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 -congEffortreportCongestion -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 fixed | Pointers to every FIXED instance. Count them and compare with the recorded baseline. |
dbGet -p top.insts.pStatus unplaced | Pointers to instances that placement still has to place. |
dbGet [dbGet -p top.insts.isPhysOnly 1].name | The 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_use | Objects that carry non-default dont_use or use_cells attributes. |
report_preserves -dont_touch | Objects that carry non-default dont_touch, read_only or ILM attributes. |
report_preserves -computed -dont_touch | Adds the computed attributes that show where an object inherits its setting from. |
dbGet top.insts.isDontTouch 1 -p | Pointers to every instance marked dont_touch. |
get_property [get_lib_cells <lib_cell>] is_dont_use | True if the library cell description includes dont_use. |
get_property [get_nets <net>] is_dont_touch | True if a set_dont_touch constraint exists on the net. |
setDontUse <cell> true | Stops optimisation from using the cell. Persists through save and restore. Changes the database. |
setDontUse -hinst <hinst> <cell> true | Applies the setting inside one hierarchical instance. The more specific setting wins. Changes the database. |
set_dont_touch [get_cells <inst>] true | Stops optimisation from modifying the instance, which can still be moved. Changes the database. |
set_dont_touch <net> true | Stops 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 -rBlockages | Writes the placement and routing blockages to the BLOCKAGES section of a DEF file. Writes a file. |
dbGet top.insts.pHaloBox | The 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_insts | Whether 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 -all | Every 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 soft | Removes 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. |
deleteAllCellPad | Removes all cell padding, so checkPlace no longer counts it in utilisation. Changes the database. |
| Tie cells | |
getTieHiLoMode -nonDefault | The 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 true | Makes 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 -verbose | Traces 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. |
reportScanCell | The scan cells known from the timing library or from specifyScanCell. |
getScanReorderMode -nonDefault | The setScanReorderMode settings that are not at their default value. |
dbGet [dbGet [dbGet top.insts.cell.name <spare_cell> -p2].isSpareGate 1 -p].name | The 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 true | Keeps spare cells inside the bounds of their hierarchy. Changes the session settings. |
| Placement, optimisation and analysis settings | |
getPlaceMode -nonDefault | The setPlaceMode settings that are not at their default value. |
getOptMode -nonDefault | The setOptMode settings that are not at their default value. |
getAnalysisMode -nonDefault | The setAnalysisMode settings that are not at their default value. |
getDesignMode -congEffort | The congestion effort level of the design mode. |
setPlaceMode -place_global_timing_effort medium | Sets 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 false | Turns 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_channel | The 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 -overflow | Average congestion, overflow and hotspot scores. Needs a route in the database. |
setPlaceMode -place_global_auto_blockage_in_channel soft | Lets 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>.enc | The checkpoint to return to if placement is repeated. Writes files. |