Pre-placement readiness
6.1 Stage purpose
Placement reads inputs that were prepared earlier and in different places: the macros and physical cells that are already fixed, the restrictions that tell optimisation what it may not use or modify, the blockages that shape where cells may land, the decisions about tie cells, scan chains and spare cells, and the timing environment. A fault in any of them shows up later as a placement problem, and it is then hard to see that the cause was a setting made before placement began. This chapter qualifies those inputs while they are still cheap to change.
Some terms first. An instance is FIXED when its placement status tells placement not to move it. Macros are normally fixed in the floorplan, and end caps and well taps are added with preplaced status, which the tool treats as fixed. Whether dbGet reports those cells as fixed is not verified. A dont_use attribute on a library cell stops optimisation from choosing that cell. A dont_touch attribute on an instance or net stops optimisation from modifying it, but the object can still be moved. A placement blockage is a floorplan object that limits where standard cells may go. A tie cell drives a constant 1 or 0 onto pins that the netlist ties off. A scan chain is the series of flip-flops that test logic connects into a shift register, and a spare gate is a cell that has no function yet and is kept for a later change. Figure 9 shows the physical part of this on one small core.
The two utilisation figures are the point of the drawing. Nothing in the netlist changed between them. Blockages, halos and preplaced cells took sites that the first number still counts. Thus, a floorplan can be legal and on target and still start placement with much less room than the target suggests.
This chapter keeps four ideas apart. Tool completion means a command ended. Analysis coverage means a report examined what you needed it to examine, and an empty report is not a pass. Stage qualification means the evidence meets your project budgets. Signoff is a later stage and is not claimed here. Listings and legality checks are implementation evidence. Timing and congestion numbers taken before any cell is placed are preliminary evidence.
6.2 Entry prerequisites
| Must already be true | Why |
|---|---|
| Chapters 1 to 5 passed | Placement reads the constraints, the floorplan and the power grid that those chapters qualified. |
| Timing constraints are loaded in every active view | The reference states that without timing constraints place_design assumes non-timing-driven mode. |
| The pre-placement settings are in one script | Every run must apply the same settings, and the reports are read against them. |
| Scan chain information exists, or a scan DEF is imported, if the block has scan | The reference states that without it placement warns and skips scan reordering. |
| The spare-cell intent is known | Spares in the netlist must be specified before placement. Missing ones must be created and placed before the standard cells. |
| Project budgets exist for effective utilisation, congestion and net-load-ignored slack | This book sets none of them. |
6.3 Relevant files and analysis context
The inputs come from four places. The floorplan script holds the blockages, halos, fixed macros and the spare gate list. The power script from Chapter 5 holds the physical cells and the connection rules. The libraries carry dont_use and dont_touch attributes of their own. The constraints and the scan DEF come from synthesis and test insertion. The checks read the database in memory, so what they report is what placement will see.
Keep every setting of this chapter in one pre-placement script under version control, and record its revision with the reports. The reference states that the dont_use attribute set with setDontUse persists through save and restore. Whether a restored session keeps the mode commands is not verified, so source the script again before you trust a mode listing. A number without the setting that produced it cannot be compared with a later run, so each card asks you to store the listing beside the report.
Timing is read only by the timing cards. They need the active views from Chapter 3, and they run with ideal clocks and ignored net load, as the next sections explain.
6.4 Checks and command cards
6.4.1 Pre-stage checks
Before you change any pre-placement setting, take a snapshot of what is already placed. It is cheap, and it is the baseline that Chapter 7 compares against. Also confirm that the Chapter 5 evidence is current, because a change to the grid or the physical cells after the last placement-prerequisite check makes that check stale, and R-09 must run again.
| Question it answers | Which instances are already placed or fixed, and does that list match the floorplan intent? |
|---|---|
| Stage | Before pre-placement setup |
| Product | Innovus Implementation. The reference entry names no separate licence requirement for this command. |
| Required state | Floorplan and power planning finished, with the physical cells added. |
| Legacy UI | dbGet -p top.insts.pStatus fixed dbGet -p top.insts.pStatus placed dbGet -p top.insts.pStatus unplaced dbGet [dbGet -p top.insts.isPhysOnly 1].name |
| Common UI | Not yet verified No Common UI form is printed. The provided files do not document one. |
|---|---|
| Mapping | Not established in the provided documentation |
| Options used | -p returns pointers to the matching instances, so the list can be counted.pStatus fixed, placed, unplaced select instances by placement status. The match is case sensitive, so use lower case.isPhysOnly 1 selects the physical-only instances, such as end caps and well taps. |
| Scope and view | Whole design. |
| Why this baseline matters | Spare cells added before placement are unplaced too. A physical cell deleted with the Delete key becomes unplaced but stays in the design. Placement moves every instance that is not fixed. The FIXED count taken here is what the placement chapter compares against, so a cell that lost its status in between does not go unnoticed. |
| Effect on session | reads or reports only |
| Output | Lists of instance pointers or names on the console. |
| Fields that matter | The count of FIXED, PLACED and unplaced instances, and the names of the physical-only instances. |
| Healthy | FIXED covers the macros and preplaced physical cells you expect, and every standard cell is unplaced. |
| Warning | Standard cells that are already PLACED, or FIXED instances that no floorplan note explains. |
| Hard stop | A macro that is not FIXED, or a macro, end cap or well tap that is unplaced. |
| Common misuse | Typing PLACED in capitals, which returns 0x0 and looks like a pass. A count taken with llength on that result reads 1, so test for 0x0 first. Also counting without recording the command and date, so Chapter 7 has nothing exact to compare with. |
| Root cause and fix | Correct the macro placement or the physical-cell step, then take the list again. |
| Rerun after a fix | Rerun R-01, R-03 and R-09. |
| Verification | Legacy syntax checked against the Innovus Legacy text reference. |
6.4.2 Post-stage checks
The remaining cards look at the setup that placement will run with. Run them after the last change to the inputs, in the order shown, and keep the listings.
| Question it answers | Which library cells and design objects are protected from optimisation, and is that the list you intended? |
|---|---|
| Stage | After library and constraint setup |
| Product | Innovus Implementation. The reference entry names no separate licence requirement for this command. |
| Required state | Libraries loaded. The restriction commands have been sourced from the pre-placement script. |
| Legacy UI | report_preserves -dont_use report_preserves -dont_touch report_preserves -obj_type inst -dont_touch dbGet top.insts.isDontTouch 1 -p get_property [get_lib_cells <lib_cell>] is_dont_use get_property [get_nets <net>] is_dont_touch |
| Common UI | Not yet verified No Common UI form is printed. The provided files do not document one. |
|---|---|
| Mapping | Not established in the provided documentation |
| Options used | -dont_use limits the report to dont_use and use_cells attributes.-dont_touch limits the report to dont_touch, read_only and ILM attributes.-obj_type inst limits the report to one object type. The others are design, hinst, module, net, hnet, pin, hpin and base_cell.is_dont_use, is_dont_touch are properties that get_property reads on a library cell or a net. |
| Scope and view | Library cells, instances, nets, hierarchical instances and modules. |
| Semantics to remember | setDontUse applies to timing optimisation and persists through save and restore. set_dont_use does not remove cells that are already in the netlist, because the reference allows optimisation to size them out. A more specific hierarchical setting overrides a design-wide one. |
| Effect on session | reads or reports only |
| Output | A listing grouped by object type, with the attribute and its value and a total per type. |
| Fields that matter | The object, the attribute and its value, and the number of constrained objects per type. |
| Healthy | Every constrained object is one you listed in the restriction script, and the cells that later steps need are usable. |
| Warning | Entries nobody listed, for example from a library attribute, or a hierarchical setting that overrides a design-wide one. |
| Hard stop | 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. |
| Common misuse | Reading dont_touch as fixed. The reference says a dont_touch object can still be moved. Also treating the default listing as complete, because inherited attributes appear only with -computed. |
| Root cause and fix | Correct the setting with setDontUse or set_dont_touch in the script, source it again, and compare the new listing with the old. |
| Rerun after a fix | Rerun R-02, R-04 and R-07. |
| Verification | Legacy syntax checked against the Innovus Legacy text reference. |
Placement also treats preroutes like routing blockages. By default it honours preroutes and routing blockages on metal2, or on metal2 and metal3 for a process with four or more metal layers, and setPlaceMode -place_detail_preroute_as_obs changes that. The grid from Chapter 5 therefore decides where cells can legally sit, and it belongs in the thinking behind the next card.
| Question it answers | Do the placement blockages and padding take away the area you intended, and no more? |
|---|---|
| Stage | After floorplan, before placement |
| Product | Innovus Implementation. The reference entry names no separate licence requirement for this command. |
| Required state | Blockages created and padding specified. The setFPlanMode check types are recorded, as in Chapter 4. |
| Legacy UI | writeFPlanScript -fileName <f> -sections {placeBlockages routeBlockages}
checkFPlan -reportUtil -outFile <f>
reportInstPad -all
reportCellPad -file <f>
dbGet top.insts.pHaloBox
getPlaceMode -place_detail_honor_inst_pad -place_detail_pad_fixed_insts |
| Common UI | Not yet verified No Common UI form is printed. The provided files do not document one. |
|---|---|
| Mapping | Not established in the provided documentation |
| Options used | -sections placeBlockages writes only the placement blockage section. Sourcing the file deletes the existing data of each written section, so use it for review and comparison only.-reportUtil reports target and effective utilisation, as in Chapter 4.-all on reportInstPad, lists every padded instance.-file on reportCellPad, writes the list of padded cells.pHaloBox lists the halo box of each instance. Placement halos are separate from the routing halos. The exact expression is not verified.-place_detail_honor_inst_pad on getPlaceMode, shows whether detail placement honours instance padding. It and the switch for fixed instances default to false. A third switch, for physical cells, is set with setPlaceMode and defaults to false. |
| Scope and view | Whole floorplan. The padding commands cover instances and library cells. |
| Types and padding | A partial blockage takes a density in steps of 5 from 5 to 100. A macro-only blockage keeps macros out and leaves standard cells free. Padding counts in checkPlace utilisation but not in the density that timeDesign prints, so the two numbers can differ. deleteAllCellPad removes padding before checkPlace if you want it left out. Instance padding counts in sites relative to the instance, and cell padding in sites left and right and rows top and bottom. |
| Effect on session | adds GUI violation markers; writes files. Some commands in this card only read or report. |
| Output | A Tcl script, a utilisation summary with markers, and padding lists. |
| Fields that matter | Blockage type, box and density; target against effective utilisation; the padded instances and cells. |
| Healthy | Each blockage has a purpose, a type and a density you can name, and effective utilisation is within your budget. |
| Warning | Effective utilisation well above target, or padding that nobody recorded, which quietly removes open sites. |
| Hard stop | Effective utilisation above your budget, or a hard blockage over an area the plan needs for cells. |
| Common misuse | Creating a hard blockage where a soft or partial one was meant. Hard takes the whole area. Soft still takes buffers, inverters, isolation cells, clock gates, tie cells and level shifters. Partial takes a share set by its density. |
| Root cause and fix | Delete the blockage with deletePlaceBlockage and create it again with the intended type and density. |
| Rerun after a fix | Rerun R-03, R-08 and R-09. |
| Verification | Legacy syntax checked against the Innovus Legacy text reference. |
Padding and blockages are also the place to reserve room for later stages. The documentation advises that, when the clock is concentrated in a tight area, you reserve three to five percent of the targeted final utilisation for clock buffers. Take that as guidance for the discussion, and let your project budget decide.
| Question it answers | Is the tie strategy decided and recorded, and are the tie cells and the dont_use and dont_touch settings consistent with it? |
|---|---|
| Stage | After physical cells, before placement |
| Product | Innovus Implementation. The reference entry names no separate licence requirement for this command. |
| Required state | Netlist loaded. The strategy chosen in Chapter 5, direct connection or addTieHiLo after placement, is known. |
| Legacy UI | getTieHiLoMode -nonDefault checkDesign -tieHiLo -noHtml -outfile <f> |
| Common UI | Not yet verified No Common UI form is printed. The provided files do not document one. |
|---|---|
| Mapping | Not established in the provided documentation |
| Options used | -nonDefault lists only the setTieHiLoMode parameters that differ from the default.-tieHiLo reports unconnected tie terminals, and tie pins and PG pins on different nets. |
| Scope and view | Whole design. |
| Defaults that surprise | The settings -honorDontUse and -honorDontTouch of setTieHiLoMode both default to false. The settings -maxFanout and -maxDistance default to 0, which means no limit. addTieHiLo and verifyTieCell belong after placement. |
| Effect on session | writes files. Some commands in this card only read or report. |
| Output | A parameter listing and a text report. |
| Fields that matter | The tie cell pair, the fanout and distance limits, the honour settings for dont_use and dont_touch, and the unconnected tie terminals. |
| Healthy | The tie cell pair is named and usable, and tie terminals are connected or reserved for addTieHiLo. |
| Warning | Unconnected tie terminals while the plan is addTieHiLo after placement, which is expected but must be recorded. |
| Hard stop | Tie insertion is set to honour dont_use while the only tie cells named carry dont_use. |
| Common misuse | Running addTieHiLo before placement. The reference says to use it after the standard cells are placed. Also mixing direct connection with addTieHiLo, which overrides the direct one. |
| Root cause and fix | Choose one strategy, correct the cell list or the honour settings, and record the decision. |
| Rerun after a fix | Rerun R-02, R-04 and R-09. |
| Verification | Legacy syntax checked against the Innovus Legacy text reference. |
| Question it answers | Will placement find the scan chains it should reorder, and are the spare cells specified before placement? |
|---|---|
| Stage | After floorplan, before placement |
| Product | Innovus Implementation. The reference entry names no separate licence requirement for this command. |
| Required state | Netlist loaded. Scan chains specified or a scan DEF imported. Spare gates specified. |
| Legacy UI | report_scan_chain -out_file <f> scanTrace -verbose reportScanCell getScanReorderMode -nonDefault dbGet [dbGet [dbGet top.insts.cell.name <spare_cell> -p2 ].isSpareGate 1 -p ].name |
| Common UI | Not yet verified No Common UI form is printed. The provided files do not document one. |
|---|---|
| Mapping | Not established in the provided documentation |
| Options used | -out_file writes the chain report. Without it the report goes to scanChain.rpt.-verbose on scanTrace, prints the start and end scan points and the traced instances, which shows where a trace stops.-nonDefault lists only the setScanReorderMode settings that differ from the default.isSpareGate 1 selects the instances marked as spare gates. |
| Scope and view | Every scan chain, and the spare gates of the named cell. |
| Spare cells | Spare gates that are already in the netlist are placed during pre-placement processing, and they must be specified during floorplanning. When the netlist has none, createSpareModule and placeSpareModule come before the standard cells are placed. setPlaceMode -place_global_module_aware_spare keeps spares inside their hierarchy. |
| Effect on session | writes files. Some commands in this card only read or report. |
| Output | A chain report, trace lines in the log, a scan cell list and instance names. |
| Fields that matter | Scan bits per chain; where each trace starts and stops; the scan cells the tool knows; the spare gate instances. |
| Healthy | Each chain traces from its start to its stop with the bit count test insertion gave, and every spare gate is listed. Spare cells added before placement show as unplaced. |
| Warning | Scan reordering is switched off on purpose, or some spare cells are missing from the spare list. |
| Hard stop | A scan block with no chain information, or a chain whose trace stops before its stop point. |
| Common misuse | Reading the absence of an error as success. The reference says that without scan information placement warns and skips reordering, so the flow carries on. |
| Root cause and fix | Specify the chains or import the scan DEF, trace again, and compare the bit count with the test insertion report. If a trace stops early, retry with scanTrace -compLogic or -lockup, which are off by default. |
| Rerun after a fix | Rerun R-05, R-06 and R-09. |
| Verification | Legacy syntax checked against the Innovus Legacy text reference. |
| Question it answers | Which non-default settings will placement run with, and do they match the plan? |
|---|---|
| Stage | Before placement |
| Product | Innovus Implementation. The reference entry names no separate licence requirement for this command. |
| Required state | The pre-placement script has been sourced in this session. |
| Legacy UI | getPlaceMode -nonDefault getOptMode -nonDefault getAnalysisMode -nonDefault |
| Common UI | Not yet verified No Common UI form is printed. The provided files do not document one. |
|---|---|
| Mapping | Not established in the provided documentation |
| Options used | -nonDefault returns only the settings whose value differs from the default. |
| Scope and view | Session settings. No design change. |
| What placement overrides | The reference states that place_design does not honour -checkType hold, -clockPropagation sdcControl or -clkSrcPath true from setAnalysisMode, and does not honour -detail from setExtractRCMode. It honours all setOptMode and setRouteMode parameters. By default it also removes buffer trees by buffer footprint, as deleteBufferTree does, and -noPrePlaceOpt switches that off. List the footprint with setBufFootPrint and decide on the switch when the netlist has intentional buffers. Whether dont_touch is honoured there is not verified. |
| Effect on session | reads or reports only |
| Output | The non-default settings, with their values. |
| Fields that matter | Timing effort, scan reordering, congestion effort, padding and blockage options; the analysis type and check type. |
| Healthy | Every non-default setting is in the pre-placement script and has a stated reason. |
| Warning | An analysis setting that placement overrides, such as hold checking or sdcControl clock propagation, so it does not apply here. |
| Hard stop | Timing effort or scan reordering differs from the plan, so the run would not do what the plan says. |
| Common misuse | Comparing two runs without comparing their mode listings. Runs with different non-default settings are different experiments. |
| Root cause and fix | Correct the script, reset the stray parameter with the reset form of its mode command, and list again. |
| Rerun after a fix | Rerun R-06 and the card that reads the changed setting. |
| Verification | Legacy syntax checked against the Innovus Legacy text reference. |
| Question it answers | Are the constraints complete enough for timing-driven placement, and what is the slack with net load ignored before any cell moves? |
|---|---|
| Stage | Before placement |
| Product | Innovus Implementation. The reference entry names no separate licence requirement for this command. |
| Required state | Constraints loaded in every active view and Chapter 3 passed. Clocks are ideal. |
| Legacy UI | check_timing -verbose > <f> check_design -type "timing opt" -out_file <f> timeDesign -prePlace -outDir <dir> |
| Common UI | Not yet verified No Common UI form is printed. The provided files do not document one. |
|---|---|
| Mapping | Not established in the provided documentation |
| Options used | -verbose on check_timing, groups the warnings by type.-type "timing opt" runs the timing integrity and the optimisation prerequisite categories. The -out_file option writes the full list.-prePlace ignores net load, uses ideal clocks and writes no DRV report files.-outDir names the report directory. |
| Scope and view | The active views. |
| Side effects | The reference states that timeDesign -prePlace sets -clkSrcPath false and -clockPropagation forcedIdeal. Run getAnalysisMode -nonDefault again after it, compare with R-06, and restore the planned values before leaving this chapter. |
| Effect on session | changes analysis configuration; writes files; runs an expensive analysis |
| Output | Warning lists, a Tcl dictionary in the out file, and timing reports with a summary. |
| Fields that matter | Unconstrained endpoints, missing clocks, missing usable hold or clock cells; setup WNS and TNS per path group. |
| Healthy | Constraint warnings are reviewed, and a net-load-ignored baseline is stored with its view list. |
| Warning | Negative slack before any wire exists, so placement starts with a deficit that needs an owner. |
| Hard stop | check_design reports errors, or no timing constraints are loaded, so placement would run without timing. |
| Common misuse | Reading a clean pre-placement summary as timing closure. It uses ideal clocks and ignores net load, so it is preliminary evidence. Also reading only the summary, because unconstrained paths do not appear in slack. |
| Root cause and fix | Fix the constraints at their source, restore usable cells, then run the checks again. |
| Rerun after a fix | Rerun R-07 and R-09, and T-03 and T-05 from Chapter 3 if constraints changed. |
| Verification | Legacy syntax checked against the Innovus Legacy text reference. |
| Question it answers | Where could placement run into congestion, and what routing resource and settings does it start with? |
|---|---|
| Stage | Before placement |
| Product | Innovus Implementation. The reference entry names no separate licence requirement for this command. |
| Required state | Power grid complete. A route from Chapter 4 exists only if you reuse it, and it is stale if the floorplan has moved. |
| Legacy UI | report_route -track_utilization -layer <bottom_layer>:<top_layer> getDesignMode -congEffort reportCongestion -hotSpot -overflow getPlaceMode -place_global_cong_effort -place_global_auto_blockage_in_channel |
| Common UI | Not yet verified No Common UI form is printed. The provided files do not document one. |
|---|---|
| Mapping | Not established in the provided documentation |
| Options used | -track_utilization -layer reports track shares per layer, with the PG mesh as its own column.-place_global_cong_effort, -place_global_auto_blockage_in_channel show how global placement will treat congestion and narrow channels.-congEffort reads the congestion effort of the design mode.-hotSpot -overflow report hotspot scores and overflow. They need a route in the database. |
| Scope and view | Whole design. |
| Channel blockages | The -place_global_auto_blockage_in_channel setting takes none, soft or partial, and defaults to none. With soft, the reference says channels narrower than 50 um get soft blockages that apply during global placement only. That is the tool threshold, not a project limit. |
| Effect on session | reads or reports only |
| Output | A track table per layer, mode listings, and a congestion summary if a route exists. |
| Fields that matter | Available tracks per layer; congestion effort; the channel blockage setting; the hotspot score where a route exists. |
| Healthy | Available tracks per layer meet the budget, and the plan for narrow channels is recorded. |
| Warning | A hotspot in a macro channel, or the channel setting left at none while a channel is narrow. |
| Hard stop | A hotspot above your budget, on a route taken after the last floorplan change, that the floorplan and not placement has to fix. |
| Common misuse | Calling a route on an unplaced design a congestion forecast. The reference documents earlyGlobalRoute for use after placement, so congestion is qualified in Chapter 7. |
| Root cause and fix | Widen channels or change blockages in the floorplan, adjust the effort settings, and run the card again. |
| Rerun after a fix | Rerun R-03 and R-08, and F-05 from Chapter 4 if the floorplan moved. |
| Verification | Legacy syntax checked against the Innovus Legacy text reference. |
| Question it answers | Do all the placement prerequisites the tool knows about hold, and is a checkpoint saved? |
|---|---|
| Stage | Last step before placement |
| Product | Innovus Implementation. The reference entry names no separate licence requirement for this command. |
| Required state | R-01 to R-08 reviewed. The power grid and physical cells are final. |
| Legacy UI | check_design -type place -out_file <f> checkPlace <report_file> checkDesign -place -noHtml -outfile <f> saveDesign <name>.enc |
| Common UI | Not yet verified No Common UI form is printed. The provided files do not document one. |
|---|---|
| Mapping | Not established in the provided documentation |
| Options used | -type place runs the placement prerequisite category of check_design.-out_file writes the full list, because the console output is limited by the message display limit.-place on checkDesign, reports instances with placement violations, outside the core, or overlapping other instances or placement blockages.violationReportFileName names the detailed checkPlace report. |
| Scope and view | Whole design. checkPlace treats preplaced instances and macros as FIXED. |
| Flow behaviour | checkPlace treats macros as FIXED, but its blockage check does not examine fixed macros, so macro legality also rests on the floorplan checks of Chapter 4. If check_design finds errors, the reference states that the current script stops. The console shows a limited number of messages, so read the out file. |
| Effect on session | adds GUI violation markers; writes files |
| Output | A violation table, a Tcl dictionary file, markers, placed and unplaced counts, and a checkpoint. |
| Fields that matter | Errors by category; violations on FIXED objects; placed, fixed and unplaced counts; density. |
| Healthy | check_design reports no errors, checkPlace finds no violation on FIXED objects, and the unplaced count equals the standard cell count. |
| Warning | Warnings that point to settings you made on purpose, each with a recorded reason. |
| Hard stop | Any check_design error, any violation on a macro or preplaced cell, or pin access issues on rows. |
| Common misuse | Running the gate once and early. It must run after the last change to power, blockages or physical cells, because each of those changes what it reads. |
| Root cause and fix | Fix the named cause upstream, not in placement. |
| Rerun after a fix | Rerun R-09, then the card that owns the cause. |
| Verification | Legacy syntax checked against the Innovus Legacy text reference. |
6.5 Required reports, artefacts and how to read them
| Report | Fields that support qualification | Evidence class |
|---|---|---|
| Placement status lists (R-01) | counts of FIXED, PLACED and unplaced instances; names of physical-only instances | implementation |
| Preserve listings (R-02) | dont_use and dont_touch objects, attributes and totals per type | implementation |
| Blockage script and utilisation (R-03) | blockage type, box and density; target and effective utilisation; padding | implementation |
| Tie mode listing and tie check (R-04) | tie cell pair, limits, honour settings; unconnected tie terminals | implementation |
| Scan chain report (R-05) | scan bits per chain; trace start and stop; spare gate list | implementation |
| Mode listings (R-06) | non-default placement, optimisation and analysis settings | implementation |
| Timing checks and pre-placement summary (R-07) | constraint warnings; WNS and TNS per path group with net load ignored | preliminary |
| Track and congestion tables (R-08) | available tracks per layer; hotspot score if a route exists | preliminary |
| Gate files and checkpoint (R-09) | errors by category; violations on FIXED objects; counts; density | implementation |
checkPlace ## illustrative excerpt Begin checking placement ... Pin Access Violation: 0 *info: Placed = 1441 (Fixed = 1441) *info: Unplaced = 41600 Placement Density:0.00%(0/62560) Placement Density (including fixed std cells):2.25%(1440/64000)
The numbers here are illustrative and are not taken from a run. Read the counts first. Every placed instance is also fixed, which is what you expect when the only things placed are the macro, end caps and well taps, and the unplaced count should equal the number of standard cells in the netlist inventory from Chapter 2. If the two differ, some cells were dropped or placed by an earlier step. The first density line is zero, which fits a design whose standard cells are all unplaced. The second line includes fixed standard cells, which here are the end caps and taps, and its denominator is larger by the sites those cells take, so its value is what the preplaced cells alone occupy.
A clean summary is not the whole gate. It shows that the preplaced objects are legal and does not show that the settings behind placement are right, so read it together with the listings from the other cards.
6.6 Healthy, suspicious and hard-stop examples
| Finding | Status | Why |
|---|---|---|
| Only macros, end caps and taps are FIXED, and every standard cell is unplaced | PASS | Placement owns the movable cells and nothing else. |
| A hold or clock cell is dont_use with no recorded reason | HARD STOP | A later step is told to avoid the only cells it can use. |
| Instances marked dont_touch but not FIXED | WARN / REVIEW | Placement can still move them, so check that the movement is acceptable. |
| Effective utilisation above target but within budget | WARN / REVIEW | Blockages and padding take sites that the target counted. |
| Effective utilisation above your budget | HARD STOP | Placement would start with too little room. |
| A scan block with no chain information | HARD STOP | Placement warns, skips reordering and carries on. |
| No timing constraints loaded | HARD STOP | Placement would run in non-timing-driven mode. |
| Unconnected tie terminals, with addTieHiLo planned after placement | WARN / REVIEW | Expected at this stage, and it must be recorded. |
| Power-domain-aware tie and spare checks in a single-supply block | NOT APPLICABLE | No power domains exist. |
6.7 Debugging, corrective action and reruns
Faults found here are cheap, because nothing has been placed. Faults found after placement cost a full placement run, and sometimes a rerun of everything that followed. Rerun only the cards that read the thing you changed, and rerun the gate last, because it reads all of them. The table lists the usual changes.
| Change made | Rerun |
|---|---|
| dont_use or dont_touch setting | R-02, R-04, R-07 |
| Blockage, halo or padding | R-03, R-08, R-09 |
| Tie cell list or tie settings | R-02, R-04, R-09 |
| Scan chains or spare cells | R-05, R-06, R-09 |
| Placement, optimisation or analysis mode | R-06 and the card that reads the setting |
| Timing constraints or views | Chapter 3 cards, then R-07 |
| Power grid or physical cells | Chapter 5 cards, then R-01 and R-09 |
6.7.1 Worked example: tie cells that the tie step is told to avoid
Suppose the team marks its tie cells dont_use so that optimisation never picks them for logic, and a script copied from another project also sets tie insertion to honour dont_use. The two listings below come from R-02 and R-04.
report_preserves -dont_use ## illustrative excerpt
base_cells
------------------------------------------------------------------
base_cell:TIEH_X1
dont_use true
base_cell:TIEL_X1
dont_use true
Total of 2 base_cells constrained
getTieHiLoMode -nonDefault
-cell {{TIEH_X1 TIEL_X1}}
-honorDontUse true # bool, default=falseEach listing looks reasonable alone. Together they say that tie insertion honours dont_use, and that the only tie cells it was told to use carry dont_use. Nothing fails now, because tie insertion belongs after placement, and that is why the check belongs before it. The decision is HARD STOP. If the intent was to keep optimisation away from the tie cells, reset the honour setting to its default, which lets tie insertion use them. If the tie cells should be avoided everywhere, name different tie cells. Then rerun R-02, R-04 and R-09. The cell names here are illustrative.
6.8 Exit criteria and stage checklist
- Baseline. FIXED, PLACED and unplaced counts and the physical-only instance names are recorded.
- Restrictions. dont_use and dont_touch listings are stored, and every entry is intended.
- Blockages. Blockages and padding are listed, and effective utilisation is within the project budget.
- Tie cells. The tie strategy, cell pair and honour settings are recorded and consistent with dont_use.
- Scan and spares. Each chain traces to its stop point, and the spare gates are specified.
- Settings. The non-default placement, optimisation and analysis settings are listed and match the script.
- Timing. Constraint warnings are reviewed, and the net-load-ignored baseline is stored as preliminary evidence.
- Gate. check_design reports no errors, checkPlace finds no violation on fixed objects, and a checkpoint is saved.
Thus, the design is ready for placement when everything placement reads is settled, listed and recorded, and nothing in those listings surprises you. A design that only passes the prerequisite check can still start placement with the wrong restrictions or too little room. In the next chapter, placement runs, and its result is compared with the baselines taken here.
6.9 Sanity check cheat sheet: Pre-placement readiness
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. Judge every row against your project budgets, because this book sets no universal limits.
| 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 are 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 only tie cells named 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 bit count test insertion gave, and every spare gate is listed. Spare cells added before placement show as unplaced. | 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 clock 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 any wire exists, so placement starts with a 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 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 and not placement 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. |
6.10 Command cheat sheet: Pre-placement readiness
Legacy UI commands. Angle brackets are placeholders, and values shown are examples, not project limits.
| Command | What it produces |
|---|
| 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. Changes the database. |
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. Writes a file. |
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. |