This stage covers the gate before placement: legality of preplaced cells, dont-touch and cell-purpose scope, blockage and keepout review, tie and scan data readiness, and a congestion and timing check before the first placement run.
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 | Legality and cell inventory Before pre-placement setup |
check_legalityreport_cells |
Macros and preplaced physical cells match the floorplan record, and the legality check is clean on them. | Standard cells already placed, or fixed cells that no floorplan note explains. | A macro, end cap or tap that is unplaced or illegal. |
| R-02 | Dont-touch and cell purpose After library and constraint setup |
report_dont_touchget_lib_cells -filter valid_purposes=~*cts*report_target_library_subset |
Every restricted object is one you listed, and cells that later steps need keep the right purpose. | Entries nobody listed, or a subset restriction that overrides a design-wide setting. | A cell that CTS or hold fixing needs is excluded with no recorded reason. |
| R-03 | Blockages and keepout margins After floorplan, before placement |
get_placement_blockages |
Each blockage has a purpose, a type and a name, and region utilisation warnings in the log are understood. | Soft or partial blockages nobody recorded, which quietly remove open sites. | Utilisation above the project budget, or a hard blockage over an area the plan needs for cells. |
| R-04 | Tie connections After physical cells, before placement |
connect_pg_net -tieadd_tie_cells |
Tie pins are connected or deliberately left for the tie-cell step, and the plan says which. | Unconnected tie pins while tie insertion is planned after placement, which is expected but must be recorded. | Tie pins on a net that differs from the PG net of their cell. |
| R-05 | Scan data After floorplan, before placement |
read_def <scandef>report_app_options |
SCANDEF is read for every scan block, and scan optimisation settings match the plan. | Scan optimisation switched off on purpose, or the missing-SCANDEF continue option set. | A scan block with no scan chain information, or scan settings that differ from the plan. |
| R-06 | Placement and layer settings Before placement |
report_app_optionsreport_ignored_layers |
Every non-default placement and optimisation option is in the pre-placement script with a stated reason. | An option set interactively that the script does not hold. | Congestion or scan settings that differ from the plan, or layer limits that differ from the routing plan. |
| R-07 | Constraints and timing readiness Before placement |
check_timing †report_timing |
Constraint warnings are reviewed and the unplaced baseline slack is stored with its scenario list. | Negative slack before any wire exists, so placement starts with a deficit that needs an owner. | Constraint errors, or no constraints loaded, so placement would run without timing. |
| R-08 | Congestion risk Before placement |
report_congestionreport_ignored_layers |
Congestion on the floorplan alone is within the project budget, and narrow macro channels are recorded. | A hotspot in a macro channel, or a narrow channel with no plan for it. | A hotspot above the project budget that the floorplan, not placement, has to fix. |
| R-09 | Ready-for-placement gate Last step before placement |
check_design †check_legalitycheck_boundary_cells |
The design check reports no errors, and legality and boundary checks are clean on fixed objects. | Warnings that point to settings you made on purpose, each with a recorded reason. | Any design check error, or any violation on a macro or preplaced cell. |
Command cheat sheet
ICC2 commands. Angle brackets are placeholders, and values shown are examples, not project limits. A dagger (†) marks a command the notes behind this book do not fully cover; it is shown without options, so confirm it with man or help in your release.
| Legality and cell inventory | |
|---|---|
check_legality | Reports legality violations for the placed and fixed cells in the block. |
check_legality -cells $cells | The same check limited to a collection of cells. |
report_cells | Lists cells, to compare macro and physical-only cell counts with the floorplan record. |
check_boundary_cells | Reports missing or wrong boundary cells before placement starts. |
| Dont-touch, size-only and cell purpose | |
report_dont_touch | Lists the dont_touch settings on modules, cells and nets. |
set_dont_touch [get_cells <inst>] true | Excludes the cell from optimisation. Changes the session; record it. |
remove_attributes [get_cells <inst>] dont_touch | Removes the setting again. Changes the session; record it. |
report_size_only -all | Lists objects restricted to sizing only. |
set_lib_cell_purpose -exclude cts <lib_cells> | Keeps the cells out of clock tree use. Persists in the block. Changes the session; record it. |
set_lib_cell_purpose -include cts <lib_cells> | Allows the cells for CTS. A cell with dont_use is excluded from every purpose. |
get_lib_cells -filter valid_purposes=~*cts* | The cells currently valid for CTS. |
report_target_library_subset | The library subset restrictions now in force. |
| Blockages and keepout margins | |
create_placement_blockage -boundary {{<x1> <y1>} {<x2> <y2>}} -type hard | A hard blockage for cells and macros in the box. One call makes one blockage. Changes the session; record it. |
create_placement_blockage -boundary {{<x1> <y1>} {<x2> <y2>}} -type partial -blocked_percentage <pct> | A density limit used in coarse placement only. Changes the session; record it. |
get_placement_blockages | The blockages in the block, to compare with the floorplan record. |
remove_placement_blockages -all | Removes every blockage. Changes the session; record it. |
create_keepout_margin -outer {<l> <b> <r> <t>} <macro> | A hard keepout margin around the macro, in microns. Changes the session; record it. |
| Tie cells, scan and spares | |
connect_pg_net -tie | Connects tie-off pins only, without touching PG pins. |
add_tie_cells | Inserts tie cells for tie pins. Run it once cells are placed and the plan allows it. |
read_def <scandef> | Annotates scan chains from SCANDEF so placement can optimise them. |
set_app_options -name place.coarse.continue_on_missing_scandef -value true | Lets placement continue for a block with no SCANDEF. Changes the session; record it. |
add_spare_cells -cell_name spare -lib_cell {<cell1> <cell2>} -num_instances <n> | Adds the same count of each spare cell type, spread by cell density. |
| Settings and congestion | |
report_app_options | Lists application options, to record the settings behind the run. |
set_app_options -name place.coarse.handle_early_data -value true | Lets placement continue when a region is over-utilised, for early floorplans. Changes the session; record it. |
report_congestion | Congestion from the stored map, or from a map-only global route if none exists. |
report_ignored_layers | Prints the layer limits used for estimation and congestion. |
| Readiness gate | |
check_timing † | Constraint consistency and completeness warnings. |
report_timing | Timing paths before placement, as the baseline for the first placement run. |
check_design † | The design prerequisite check before the placement stage. |
save_block -as <block>/<label> | A labelled checkpoint to return to if placement is repeated. Writes to the library. |