A pdverse.net mentor handbook

Placement Optimisation in Cadence Innovus

From a clean floorplan to a placement that is ready for CTS: the checks to pass first, twelve optimisation techniques and what each one costs, and the interview questions that come with them. Innovus Legacy UI throughout.

55 min read19 figures20 interview questions

Prefer it on paper?

The 47-page A4 PDF edition, with every figure and table at full size. Free.

Enter your email and the download starts right away. No spam.

01Chapter Overview #

Placement is the first step in the implementation flow where the tool knows real distances. Up to this point, timing was computed with ideal clocks and estimated wires, so a path that looked fine after synthesis could still be far too long once its cells land on opposite sides of the die. After placement, most wire lengths are fixed, the congestion picture is set and the majority of the timing problems the design will ever have are already visible. Clock tree synthesis (CTS) and routing can correct only a part of what placement leaves behind.

This handbook covers three things in that order. First, the sanity checks that should pass before a single placement command is run. Second, the techniques that move timing, congestion and power during placement, each explained with a small example before the command that expresses it. Third, the interview questions that come with the topic, grouped by experience level.

Why it matters in interviews: almost every physical design interview spends time on placement, because it is where cause and effect is easiest to test. "I ran place_opt_design" is not an answer. "The hotspot came from a narrow macro channel, so I added a partial blockage there and the timing held" is the kind of answer the panel is listening for.

Where it is used in real projects: every block goes through placement many times. Each floorplan change, netlist drop or constraint update means another placement run, and the quality of that run decides how many iterations CTS, routing and signoff will need.

CONVENTIONS USED IN THIS HANDBOOK

All commands are Innovus Legacy UI (camelCase commands such as setPlaceMode and place_opt_design). Distances are in microns, delays in picoseconds unless stated otherwise. Every number in an example (utilisation, density, padding, delays) is illustrative, chosen so the arithmetic can be checked by hand; it is not a project value. Commands and options were checked against the tool documentation but the scripts were not run here, so confirm option names with man <command> in the release you use. Placement here means standard cell placement together with pre-CTS optimisation, unless mentioned otherwise.

Figure 1.1 · Where placement sits in the implementation flow

Floorplan, macros, power grid Pre-placement sanity checks (Section 3) place_opt_design: placement + pre-CTS opt Post-placement checks (Section 6) CTS (ccopt_design), post-CTS optimisation Routing, post-route optimisation, signoff iterate this handbook
What to notice: the three amber boxes are the subject of this handbook. The dashed loop is the normal case, not the exception: placement is rerun or refined until the post-placement checks pass.

What is new at the placement stage

It helps to be clear about which inputs change when the design moves from synthesis to placement, because that is what makes the timing numbers move. Table 1.1 lists them.

ItemBefore placementAfter placement
Wire delayWire-load model or zero wire loadEstimated from placed pins with early global route and extraction
ClockIdealStill ideal, unless the early clock flow is used (Section 5.8)
CongestionUnknownVisible as overflow per routing cell
BufferingSynthesis buffers, placed nowhereRemoved and rebuilt on real locations
DensityA single utilisation numberA map: some regions dense, some empty

Table 1.1 · What placement adds to the timing picture

Thus, a timing report after placement is the first one in the flow that can be trusted to point at real problems, and the first one that can mislead the designer if the inputs behind it are wrong.

02Concept Primer #

2.1 Global placement, detail placement and legalisation

Placement is done in two steps. Global placement finds rough locations for every standard cell so that connected cells are close together and the cells are spread evenly over the core. At this step the cells are allowed to overlap and do not yet sit exactly on rows. Detail placement then snaps every cell to a legal site in a row, removes overlaps, honours blockages and halos, and improves the result locally for timing, wire length and congestion. The part of detail placement that only makes the placement legal is called legalisation; in Innovus this is done by refinePlace, which place_opt_design calls by itself at the end.

Figure 2.1 · Global placement result (left) and the same cells after legalisation (right)

overlaps allowed, cells off the rows on rows, no overlap, small moves only Global placement After legalisation
What to notice: legalisation should move cells only a little. A large displacement in the refinePlace log means global placement packed a region far beyond what fits.

Thus, a good global placement is the precondition for a good final placement. If global placement crowds a region, legalisation has to push cells far from where timing wanted them.

2.2 Utilisation and density

Utilisation is the area of standard cells divided by the area available to them. Density is the same ratio measured in a small window (a bin) instead of the whole core. A block can have a moderate utilisation and still contain bins near 100%, which is why the density map matters more than the single number.

WORKED EXAMPLE 2.1 · UTILISATION BY HAND
## Assuming, a core of 500 x 400 um and two macros of 30,000 um2 each
Core area             = 500 x 400            = 200,000 um2
Macro area            = 2 x 30,000           =  60,000 um2
Area for std cells    = 200,000 - 60,000     = 140,000 um2
Std cell area         =                         98,000 um2
Utilisation           = 98,000 / 140,000     = 70 %
## Assuming, CTS and hold buffers will add about 4 % of cell area later
After growth          = 98,000 x 1.04 / 140,000 = about 73 %

The arithmetic shows why the starting utilisation is chosen with growth in mind. A block that starts at 85% has very little room for the cells that CTS, hold fixing and ECOs will add.

Figure 2.2 · Same utilisation, different density: one bin is close to full

0.620.780.660.48 0.760.970.700.52 0.650.800.550.50 below 0.60 0.60 to 0.75 0.75 to 0.90 above 0.90 average of all bins = about 0.67
What to notice: the average looks comfortable, yet the centre bin is at 0.97. That bin has no room for buffers and is likely to be a routing hotspot. reportDensityMap lists such bins (Section 6).

2.3 What place_opt_design does inside

In Innovus, place_opt_design is the command most flows use for this stage. It is a single command, but it runs several steps in order, and knowing them makes the log readable. Figure 2.3 shows the sequence.

Figure 2.3 · The main steps inside place_opt_design

1. Remove buffer treessynthesis buffering undone 2. Global placementtiming and congestion driven 3. Early global routeRC estimate, timing update 4. Pre-CTS optimisationDRV, WNS, TNS, area 5. LegalisationrefinePlace, final legal spots 6. Reportstiming, DRV, density
What to notice: step 1 surprises many beginners. The tool deletes the buffers synthesis inserted, because they were placed against assumed wires, and rebuilds the buffering in step 4 on real locations.

Step 4 itself uses several techniques: inserting buffers, resizing gates, restructuring logic, swapping pins, moving cells and, unless disabled, useful skew. Section 5.7 explains each one with an example.

2.4 Why wire length matters so much

A wire has resistance and capacitance per unit length, and both grow with length. The delay of an unbuffered wire therefore grows roughly with the square of its length: double the length and the delay becomes about four times larger. This is the reason a placement that spreads one path across the die can lose far more time than the extra distance suggests, and why optimisation splits long wires with repeaters.

Figure 2.4 · A 2 mm wire, unbuffered and with one repeater (illustrative numbers)

2 mm unbuffered: about 400 ps 1 mm: about 100 ps1 mm: about 100 psrepeater: about 35 ps RXDRV 100 + 35 + 100 = 235 ps instead of 400 ps
What to notice: the numbers assume the wire delay scales with length squared and ignore driver resistance, so 1 mm costs a quarter of 2 mm. Real values come from the extraction of your technology.

Thus, keeping critical cells close is the cheapest way to save delay, and repeaters are the fix when they cannot be close. We will see both in Section 5.

03Sanity Before Placement #

So far we saw what placement does. Now we turn to what must be true before it starts. A common belief is that a bad placement is a placer problem. In most cases it is an input problem: a missing timing view, an incomplete constraint, a macro that is not fixed. The placer does not stop for these. It produces a legal placement anyway, and the designer finds the real issue two days later. Thus, the checks in this section are cheap insurance.

Figure 3.1 · The pre-placement gate: four groups of checks, all must pass

Library andnetlist3.1 Timingconstraints3.2 Floorplanreadiness3.3 Physicalcells3.4 Placegate 3.6 any FAIL: fix the input and rerun the check, do not place

3.1 Library and netlist

Let us start with the data. Every cell used in the netlist needs a physical view (LEF) so it can be placed and a timing view (Liberty) so it can be timed. The netlist itself should have no floating inputs, no outputs tied to power and no unexpected multi-driven nets. The tool can report all of this in a few commands.

INNOVUS TCL · INSPECTION (to be run on the Innovus terminal)
## Library, netlist, P/G and floorplan integrity, written to a text report
checkDesign -all -noHtml -outfile rpt/checkDesign.rpt
## Netlist summary: floating ports, multi-driven nets, pad issues
checkNetlist -outfile rpt/checkNetlist.rpt
## Every non-leaf module must be instantiated once (returns 1 if unique)
checkUnique -verbose
## Preconditions for placement: PG rail alignment, pin access, followpins, taps, termination cells
check_design -type place -out_file rpt/check_place.tcl

checkDesign looks for missing or inconsistent library and design data at any stage. check_design -type place is narrower: it checks the conditions placement depends on, such as power rail alignment, pin access, missing follow-pins and misaligned tap cells. In a report, an error is a stop. A warning is acceptable only when the designer can explain it.

3.2 Timing constraints

Placement is timing-driven by default when constraints are loaded. That is useful only if the constraints are complete. If a clock is missing, every path it drives is unconstrained: the tool does not see it as a timing path and will not pull its cells together. The report will look clean for those paths simply because nothing was checked.

INNOVUS TCL · INSPECTION (to be run on the Innovus terminal)
## Missing clocks, unconstrained endpoints, missing input delay, loops
check_timing -verbose > rpt/check_timing.rpt
## Zero wire-load baseline: if this already fails badly, fix synthesis or the SDC first
timeDesign -prePlace -outDir rpt/prePlace

The pre-place run deserves a word. It times the netlist with zero wire load and ideal clocks. If a path fails badly even here, no placement setting can fix it, because placement can only add wire delay, never remove gate delay. In such a case the problem belongs to synthesis or to the constraints.

COMMON BEGINNER MISTAKE

Leaving combinational timing loops for the tool to break. The tool disables one arc to break each loop, and it might choose a different arc in each run. WNS then changes between runs for no real reason and the results cannot be compared. It is better to break loops in the constraints with set_disable_timing before pre-CTS optimisation, so every run analyses the same graph.

3.3 Floorplan readiness

Before standard cells go in, the floorplan must be final and legal: macros at their positions with a fixed status, halos around them, blockages where cells should not go, and a power grid in place.

INNOVUS TCL · INSPECTION AND CONFIGURATION (to be run on the Innovus terminal)
## Floorplan quality check with target and effective utilisation
checkFPlan -reportUtil -outFile rpt/checkFPlan.rpt
## Keep-out ring around every macro: left bottom right top, in microns (values illustrative)
addHaloToBlock 5 5 5 5 -allMacro
## Preplaced cells and macros must already be legal (report file name is positional)
checkPlace rpt/checkPlace_preplace.rpt

A macro left with a placed status instead of fixed can be moved by the placer. That might sound harmless, but a macro moved by a few microns can block a channel the designer planned for routing, or break the power hookup. Fixing macros is one line of effort and it removes a whole class of surprises.

3.4 Physical cells and their order

Some cells have no logical function but must be in the rows before placement. End caps terminate each row and well taps tie the wells to the supplies at a regular interval. Both are preplaced, so the placer fills the space around them. Other physical cells come later. Figure 3.2 shows the order.

Figure 3.2 · When each kind of physical cell is added

Floorplanmacros fixed End capsaddEndCap Well tapsaddWellTap Std cellsplace_opt_design Tie cellsaddTieHiLo CTS, route... FillersaddFiller spare cells and JTAG cells are also placed before standard cells, if the design has them
INNOVUS TCL · CONFIGURATION (to be run on the Innovus terminal)
## Choose the end cap cells (names are examples from a typical library)
setEndCapMode -leftEdge ENDCAP_L -rightEdge ENDCAP_R
## End caps first, on every row end
addEndCap -prefix ENDCAP
## Then well taps at the maximum spacing the technology allows (50 um is illustrative)
addWellTap -cell TAPCELL -cellInterval 50 -prefix WELLTAP

Fillers go last because adding them earlier hides placement problems and costs runtime on every later step. Thus, the order is not a matter of taste: each kind of cell is added when the step that depends on it is next.

3.5 Things people forget

  • Scan information. Scan chain reordering needs the scan DEF, loaded with defIn. Without it the tool warns and skips reordering.
  • Don't-use list. Cells the methodology bans (very weak drivers, delay cells in data paths, special cells) should be marked with setDontUse before the first optimisation, not after.
  • RC scale factors. Pre-route estimates should track post-route numbers. If they do not, placement optimises against the wrong delays.
  • Utilisation target. Worked Example 2.1 showed why: leave room for CTS, hold and ECO cells.
  • Fanout fixing. Optimisation does not fix max fanout violations by default. If the methodology needs it, turn it on before the first pre-CTS run (Section 4.2).

3.6 The pre-placement gate

CheckCommand or evidenceStatus
Library and netlist cleancheckDesign -all, checkNetlistPASS if no errors
Design uniquecheckUnique returns 1PASS / FAIL
Placement preconditionscheck_design -type placePASS if no errors
Constraints completecheck_timing -verbose: no missing clocks, no loops, no unexplained unconstrained endpointsPASS / FAIL
Baseline timing sensibletimeDesign -prePlace close to synthesis numbersPASS / FAIL
Floorplan legalcheckFPlan and checkPlace on preplaced cellsPASS if clean
Physical cells inEnd caps and well taps inserted, macros fixed with halosPASS / FAIL
Inputs for optionsScan DEF loaded, don't-use list applied, CTS spec ready if the early clock flow is usedPASS / FAIL
STOP HERE IF

Any row is FAIL. A placement on a broken input gives a result that looks fine and costs the next two days.

04Setting Up the Placer #

Once the inputs are sane, the designer tells the tool what to care about. It is recommended to set every mode before the step it controls and to print the full set into the log, because a reviewer reading the log should be able to see exactly what ran.

4.1 Path groups

Optimisation spends its effort per path group. If every path sits in one group, a few badly constrained input paths might take most of the effort while the real register-to-register paths stay negative. Splitting the paths into groups lets the designer decide where effort goes. Figure 4.1 shows the standard groups.

Figure 4.1 · The basic path groups around a block

FFFFICG in2regreg2regreg2outreg2cgatein2out inputsoutputs
INNOVUS TCL · CONFIGURATION (to be run on the Innovus terminal)
## Create reg2reg, reg2cgate, in2reg, reg2out and in2out groups
createBasicPathGroups -expanded
## High effort groups are optimised separately for the best WNS
setPathGroupOptions reg2reg -effortLevel high
setPathGroupOptions reg2cgate -effortLevel high
## Print the groups and their options into the log
reportPathGroupOptions

A negative -slackAdjustment on a group tightens it and, unless low effort is set explicitly, raises it to high effort automatically. It is useful for a group the designer knows will degrade later, such as paths that will pick up clock skew. Used on every group, it simply over-constrains the whole design, so it is better kept for the few groups that need it.

4.2 The modes that matter most

Innovus has many placement and optimisation options. Table 4.1 lists the ones that change results most often at this stage. The detail of each appears in the technique it belongs to in Section 5.

SettingWhat it controls
setDesignMode -flowEffort express|standard|extremeFlow-level effort. Express resizes and buffers but does not restructure, which suits quick prototyping.
setDesignMode -congEffortCongestion effort for the whole flow. High also makes optimisation more congestion friendly.
setPlaceMode -place_global_timing_effortMedium by default. High is not advised for congested designs.
setPlaceMode -place_global_cong_effortLow, medium, high or auto (default). Auto adds effort only for highly congested designs.
setPlaceMode -place_global_max_densityUpper limit on local bin density; off by default. Keep it above the design utilisation.
setOptMode -opt_max_densityUtilisation cap for optimisation (default 0.95). Optimisation does not grow the netlist beyond it.
setOptMode -opt_fix_fanout_loadOff by default. Turn it on before the first pre-CTS run if fanout limits matter and keep it on to the end.
setOptMode -opt_drv_marginTightens (positive) or relaxes (negative) max capacitance and max transition limits. A small positive margin improves correlation between pre-route and post-route numbers.

Table 4.1 · Placement and optimisation modes worth knowing

INNOVUS TCL · CONFIGURATION (to be run on the Innovus terminal)
## Print every placement and optimisation mode into the log for review
getPlaceMode
getOptMode
## Use local CPUs for placement; do not ask for more threads than physical cores
setMultiCpuUsage -localCpu 8

Thus, by the end of this step the designer has decided which paths matter, how hard the tool should work on timing and congestion, and how much room optimisation may use. The next section is about what to do when the result is still not good enough.

05Placement Optimisation Techniques #

This section covers twelve techniques. Each one follows the same order: the problem it solves, a small example, the Innovus command that expresses it, and the cost or caveat. It is better to apply them in response to evidence (a timing report, a congestion map, a density map) than to switch them all on at once, because several of them pull in opposite directions.

At the end of each technique a small trade-off table shows its typical effect on setup, hold, congestion, area, power and runtime, the kind of violation it suits best, and the setPlaceMode or setOptMode options that control it. Section 5.13 then maps each violation to a technique, Section 5.14 collects all trade-offs in one matrix, and Sections 5.15 and 5.16 list the key setPlaceMode and setOptMode options with their defaults.

5.1 Timing-driven placement

Let us consider a simple path: a launching flip-flop, two gates and a capturing flip-flop. If the placer puts the two flip-flops on opposite sides of the block because each connects more strongly to other logic, the path picks up two long wires. From Section 2.4, a long wire costs far more than its length suggests.

Figure 5.1 · The same path placed without and with timing awareness

FF1FF2FF1FF2 long wires, slack -120 ps short wires, slack +15 ps
What to notice: the slack values are illustrative. The point is that the gates did not change; only their positions did.

The tool handles this by running timing analysis between placement passes and giving extra weight to nets on critical paths, so their cells move closer. place_design and place_opt_design are timing-driven by default when constraints are loaded. The designer can also raise the weight of a known critical net directly.

INNOVUS TCL · CONFIGURATION (to be run on the Innovus terminal)
## Raise timing effort only when congestion is under control
setPlaceMode -place_global_timing_effort high
## Raise the weight of a known critical net; weights above 10 are treated as 10 by the placer
specifyNetWeight core/alu_result_bus* 8
## Placement plus pre-CTS optimisation in one step, reports into rpt/place_opt
place_opt_design -out_dir rpt/place_opt

The cost: pulling cells together raises local density. Timing improves now and routing pays later. Thus, timing effort is usually raised only after the congestion map shows headroom.

TRADE-OFFSetupHoldCongestionAreaPowerRuntime
Typical effect▲ better● little change▼ worse● little change● little change▼ worse
Best forreg2reg setup violations caused by long wires between cells of one path.
Key knobssetPlaceMode -place_global_timing_effort, specifyNetWeight, path group effort

5.2 Congestion-driven placement

The router divides the die into small tiles called global routing cells (gcells). Each gcell has a fixed number of routing tracks, its supply, and the nets passing through it need some of them, the demand. When demand is larger than supply, the difference is called overflow. A group of neighbouring gcells with overflow is a hotspot.

WORKED EXAMPLE 5.1 · OVERFLOW IN ONE GCELL
## Assuming, 20 horizontal tracks pass through the gcell
Supply      = 20 tracks
Demand      = 24 nets want to cross it horizontally
Overflow    = 24 - 20 = 4 tracks  (20 % over)
## The router must detour 4 nets around the gcell, or leave shorts

Figure 5.2 · A congestion map: overflow concentrates where pins are dense

hotspot around a crossbar module no overflow near capacity small overflow overflow severe overflow

A congestion-driven placer uses early global route to find overflow and spreads cells in those areas so more tracks are free between them. Typical sources are macro corners, narrow channels and logic with many pins in a small area such as multiplexers and crossbars.

INNOVUS TCL · CONFIGURATION AND INSPECTION (to be run on the Innovus terminal)
## Higher congestion effort for global placement
setPlaceMode -place_global_cong_effort high
## Hotspot scores and per-layer congestion from early global route
reportCongestion -hotSpot -3d
## Spread cells at hotspots incrementally; use after placement or pre-CTS opt, not after post-CTS opt
congRepair

The cost: spreading lengthens wires. It is better to find the cause of the hotspot first (Sections 5.3 to 5.5 give local fixes) and raise effort globally only when the problem is spread over the whole block. After every congestion fix, check timing again.

TRADE-OFFSetupHoldCongestionAreaPowerRuntime
Typical effect◆ depends● little change▲ better● little change● little change▼ worse
Best forOverflow hotspots and routing DRC risk; global congestion spread over the block.
Key knobssetPlaceMode -place_global_cong_effort, setDesignMode -congEffort, congRepair

5.3 Density control and padding

Sometimes the placer packs a region tightly even though the block as a whole has room. Figure 2.2 showed such a bin. There are two kinds of fix: limit the density of a region, or reserve space around particular cells. Reserving space is called padding.

Figure 5.3 · Cell padding: the tool keeps free sites next to a high pin-count cell

MX4X1 (many pins)1 site pad1 site pad
What to notice: the free sites give the router room to reach the pins. Padding is given in sites for left and right and in rows for top and bottom.
ToolCommandUse it when
Partial blockagecreatePlaceBlockage -type partial -density 60 -box {x1 y1 x2 y2}One known region is over-dense
Max local densitysetPlaceMode -place_global_max_density 0.8Clumping everywhere while utilisation is moderate
Cell paddingspecifyCellPad MX4X1 -left 1 -right 1A library cell causes pin access problems wherever it lands
Instance paddingspecifyInstPad u_xbar/* 2 and setPlaceMode -place_detail_honor_inst_pad trueSpecific instances need space around them
Module paddingsetPlaceMode -place_global_module_padding u_xbar 1.2One module is congested; it gets about 20% more area
Uniform densitysetPlaceMode -place_global_uniform_density trueUtilisation is below about 70% and an even spread is wanted

Table 5.1 · Density and padding controls

Three details are worth remembering. Cell padding stays honoured by CTS and optimisation until the designer removes it with deleteCellPad. Instance padding is honoured by detail placement only when the honour option above is set. Module padding factors below 1.0 are ignored, and the option affects global placement only. Thus, the three kinds of padding are not interchangeable, and choosing the wrong one gives the impression that "padding does not work".

WATCH OUT

Padding counts as used area in checkPlace utilisation but not in timeDesign density. The two numbers will differ on a padded design. To compare like for like, remove padding temporarily and rerun the reports.

TRADE-OFFSetupHoldCongestionAreaPowerRuntime
Typical effect◆ depends● little change▲ better▼ worse● little change● little change
Best forLocal density hotspots, pin access problems on high pin-count cells, congested modules.
Key knobssetPlaceMode -place_global_max_density / -place_global_module_padding / -place_detail_honor_inst_pad, setOptMode -opt_honor_density_screen

5.4 Placement blockages

A placement blockage is an area where the designer limits what the placer may put. Innovus offers several types, and they solve different problems. Figure 5.4 shows the three used most often.

Figure 5.4 · Hard, soft and partial blockages

Hardno standard cells at all Softplacement no; buffers in opt yes Partial (density 40)cells allowed up to 40 %
INNOVUS TCL · CONFIGURATION (to be run on the Innovus terminal)
## Hard: nothing may be placed here (coordinates illustrative)
createPlaceBlockage -type hard -box {100 200 160 260} -name keep_out_A
## Soft: placement keeps out, optimisation may still add buffers, inverters and similar cells
createPlaceBlockage -type soft -box {300 120 315 380} -name chan_B
## Partial: limit density to 40 percent in a crowded area
createPlaceBlockage -type partial -density 40 -box {420 50 520 150} -name dens_C

So when is each one used? A hard blockage is for areas that must stay empty, for example under a sensitive analogue macro edge. A soft blockage suits macro channels, because long nets crossing the channel still need repeaters. A partial blockage is the gentle tool for a region that is too dense but still useful.

WATCH OUT

Placement honours partial blockages, but optimisation does not by default. While optDesign fixes timing it may add cells into a partial blockage until setOptMode -opt_honor_density_screen true is set. If the density limit must hold through optimisation, set that option; the trade-off is less freedom for fixes in that area.

TRADE-OFFSetupHoldCongestionAreaPowerRuntime
Typical effect◆ depends● little change▲ better▼ worse● little change● little change
Best forAreas that must stay empty, crowded regions, macro channels.
Key knobscreatePlaceBlockage -type hard|soft|partial, setOptMode -opt_honor_density_screen

5.5 Macro channels and halos

The narrow gap between two macros is called a channel. It has few routing tracks because the macros above and below use or block them, yet the placer sees free sites in it and might fill them. Those cells then sit in the hardest place on the die to route to.

Figure 5.5 · A macro channel without and with protection

macromacromacromacro cells crowd the channelsoft blockage + halos (dashed)
INNOVUS TCL · CONFIGURATION (to be run on the Innovus terminal)
## Automatic soft blockages in narrow macro channels before global placement
setPlaceMode -place_global_auto_blockage_in_channel soft
## Or protect one channel the designer has identified (coordinates illustrative)
createPlaceBlockage -type soft -box {120 400 135 620} -name chan_A
## Halo: keep-out ring around each macro (left bottom right top, microns)
addHaloToBlock 5 5 5 5 -allMacro

Before blaming the channel, it is prudent to check the macro pins. A macro whose pins face a wall or another macro forces every connection to detour. Thus, many "placement" hotspots near macros are really floorplan problems, and the fix belongs in macro orientation or position.

TRADE-OFFSetupHoldCongestionAreaPowerRuntime
Typical effect◆ depends● little change▲ better▼ worse● little change● little change
Best forHotspots at macro corners and in channels; cells trapped between macros.
Key knobssetPlaceMode -place_global_auto_blockage_in_channel, addHaloToBlock

5.6 Guides, regions, fences and attractors

Sometimes logic that should sit together ends up spread, or logic that talks to a macro or an I/O sits far from it. Innovus offers four ways to steer it, from gentle to strict.

Figure 5.6 · Guide, region and fence for module u_dsp (green cells) with other cells (grey)

Guide (soft)RegionFence (hard, exclusive)
What to notice: in the guide, one green cell sits outside. In the region, all green cells are inside but a grey cell is allowed in. In the fence, only green cells are inside and all of them are inside.
ConstraintCommandBehaviour
GuidecreateGuide u_dsp x1 y1 x2 y2Soft: cells prefer the area
RegioncreateRegion u_dsp x1 y1 x2 y2Module cells must be inside; other cells may enter
FencecreateFence u_dsp x1 y1 x2 y2Only this module's cells, all inside
Attractorplace_connected -attractor RAM1 -level 2Pulls cells within two logic levels of RAM1 next to it; run before placement

The cost: over-constraining is a classic cause of bad timing. A fence that is too small forces high density inside and long wires to everything outside. It is recommended to start with a guide and move to a region or fence only with a reason, such as a power domain or a block that must be hardened separately.

TRADE-OFFSetupHoldCongestionAreaPowerRuntime
Typical effect◆ depends● little change◆ depends● little change● little change● little change
Best forLogic of one module scattered over the die; logic that talks to one macro or I/O placed far from it.
Key knobscreateGuide / createRegion / createFence, place_connected, setOptMode -opt_honor_fences, setPlaceMode -place_hard_fence

5.7 Netlist optimisation during placement

Placement optimisation is not only moving cells. During pre-CTS optimisation the tool also changes the netlist. The designer does not call each change by name, but recognising them makes the log and the final netlist much easier to read.

High fanout nets

A reset or scan enable net might drive hundreds of flip-flops spread over the whole block. One driver cannot meet transition and capacitance limits on such a load, so the tool builds a buffer tree. These nets are usually not timing critical, but they use a lot of routing, which is why a sensible branching factor matters.

Figure 5.7 · A fanout of 400 split into a buffer tree (illustrative branching)

... 40 flops per buffer...... (10 buffers in all)... rst driver1 driver x 10 buffers x 40= 400 loads
What to notice: a commonly quoted target is around 40 to 50 loads per driving cell. The exact number comes from the library limits and the methodology.

Long wires with small fanout

A net might have only two loads and still show a large transition. This happens when the receiver is pulled towards other logic it connects to more strongly, leaving the driver far away. Section 2.4 showed the fix: repeaters that split the wire. If the tool refuses to buffer such a net, check whether it is marked dont_touch.

Sizing, Vt swap, restructuring, pin swap and cloning

  • Gate sizing: upsize a weak driver on a critical path, downsize where slack allows to save area and power.
  • Vt swap: use a lower threshold voltage (faster, leakier) cell on critical paths and a higher one where slack allows.
  • Restructuring: rebuild logic on a critical path so the late signal passes through fewer levels.
  • Pin swap: on a gate with logically equivalent inputs, connect the late-arriving signal to the faster input pin.
  • Cloning: duplicate a driver whose loads sit in two distant places, so each copy drives a short local net (Figure 5.8).
  • Area recovery: downsize or remove cells on paths with spare slack, giving room back to the critical areas.

Figure 5.8 · Cloning: one driver for two distant groups becomes two local drivers

loads Aloads BU1loads Aloads BU1U1_c one driver, long branchestwo drivers, short nets
INNOVUS TCL · CONFIGURATION (to be run on the Innovus terminal)
## Fix fanout limits too (off by default); keep this on through post-route
setOptMode -opt_fix_fanout_load true
## Keep area recovery away from near-critical paths (value illustrative, in ns)
setOptMode -opt_area_recovery_setup_target_slack 0.05
## Ban cells the methodology does not allow (library and cell names are examples)
setDontUse slow_lib/DLY4X1 true
TRADE-OFFSetupHoldCongestionAreaPowerRuntime
Typical effect▲ better● little change◆ depends▼ worse▼ worse▼ worse
Best forMax transition, max capacitance and max fanout violations; setup on gate-dominated paths; long wires with small fanout.
Key knobssetOptMode -opt_drv / -opt_drv_margin / -opt_fix_fanout_load / -opt_enable_restructure / -opt_pin_swapping / -opt_area_recovery

5.8 Clock-aware placement

By default, clocks are ideal during placement: every flip-flop sees its clock edge at the same time. This is convenient, but it hides one problem. An integrated clock gate (ICG) sits early in the clock tree, so in a real design its clock arrives earlier than the clock at the flip-flops it drives. The path into the ICG enable pin therefore has less time than the ideal analysis suggests, and the ICG placed far from its flip-flops makes both the clock tree and the clock power worse.

Figure 5.9 · Clock gate placed far from its fanout (left) and at the centre of its fanout (right)

ICGlong gated clock nets, more powershort gated clock nets

Innovus addresses this in three ways:

  • setPlaceMode -place_global_clock_gate_aware (on by default) places clock gates towards the centre of their fanout. It needs a clock tree specification to be loaded.
  • setPlaceMode -place_global_clock_power_driven (on by default) gives weight to the nets from clock gates to flip-flops, which reduces clock power.
  • The early clock flow, enabled with setDesignMode -earlyClockFlow true, makes place_opt_design cluster the clock sinks and annotate clock latencies, so optimisation sees something much closer to real clock timing.
WATCH OUT

In the early clock flow, create the CTS specification with create_ccopt_clock_tree_spec before place_opt_design, and do not delete it before ccopt_design. The useful skew decisions made during placement live in that specification; deleting it throws them away.

Useful skew before CTS

Useful skew means delaying or advancing the clock at selected flip-flops on purpose, so a failing stage borrows slack from a neighbouring stage. Pre-CTS useful skew is controlled by setOptMode -opt_skew_pre_cts, which is on by default. Let us work through one case by hand.

WORKED EXAMPLE 5.2 · BORROWING SLACK WITH USEFUL SKEW
## Assuming, three flops in a pipeline: FF1 -> FF2 -> FF3, same clock
Path A (FF1 -> FF2): setup slack = -40 ps
Path B (FF2 -> FF3): setup slack = +60 ps
## Delay the clock at FF2 by 50 ps
Path A: capture is 50 ps later   -> setup slack = -40 + 50 = +10 ps
Path B: launch is 50 ps later    -> setup slack = +60 - 50 = +10 ps
## The catch: hold on path A loses the same 50 ps
Path A: hold slack = (old hold slack) - 50 ps

Figure 5.10 · Setup slack of the two paths before and after the 50 ps skew at FF2

Path A, beforePath B, beforePath A, afterPath B, after -40+60+10+10 0 ps

Thus, useful skew does not create time; it moves it. The gain is real only if CTS later builds the clock tree with those offsets, and the hold side of the borrowing path must be checked after CTS.

TRADE-OFFSetupHoldCongestionAreaPowerRuntime
Typical effect▲ better▼ worse● little change● little change▲ better▼ worse
Best forreg2cgate violations; setup where a neighbouring stage has spare slack; clock power.
Key knobssetPlaceMode -place_global_clock_gate_aware / -place_global_clock_power_driven, setDesignMode -earlyClockFlow, setOptMode -opt_skew_pre_cts

5.9 Scan-aware placement

Scan chains are stitched during synthesis in an order that ignores where the flip-flops will land. If the placer followed the scan connections, they would pull functional logic out of place. That is why scan connections are ignored during global placement by default (-place_global_ignore_scan true), and the chains are then reordered by physical position.

Figure 5.11 · The same scan chain in synthesis order (left) and after reordering (right)

crossing wires, long chainshort neighbour-to-neighbour hops
INNOVUS TCL · CONFIGURATION AND INSPECTION (to be run on the Innovus terminal)
## Load scan chain information so reordering can run (file name is an example)
defIn design_scan.def
## After placement, report chain lengths and scan wire length
report_scan_chain -out_file rpt/scan.rpt

The cost: reordering is driven by wire length, so neighbouring flip-flops can end up with very short scan paths. After CTS, when real clock skew appears, those short paths often become hold violations in scan mode. It is better to expect them in hold fixing than to be surprised by them.

TRADE-OFFSetupHoldCongestionAreaPowerRuntime
Typical effect● little change▼ worse▲ better● little change● little change● little change
Best forCongestion and wire length caused by scan chains stitched in synthesis order.
Key knobssetPlaceMode -place_global_ignore_scan / -place_global_reorder_scan, setScanReorderMode

5.10 Power-aware placement and multi-bit flip-flops

Power can be reduced during placement in three main ways. Leakage is reduced by using higher threshold cells where slack allows. Dynamic power is reduced by keeping high-activity nets short and by downsizing. Clock power is reduced by keeping gated clock nets short (Section 5.8) and by merging single-bit flip-flops into multi-bit flip-flops (MBFF), which share clock pins and so shorten the clock tree.

INNOVUS TCL · CONFIGURATION AND INSPECTION (to be run on the Innovus terminal)
## Power effort with a balanced leakage/dynamic target (0.5); dynamic needs switching activity loaded
setOptMode -opt_power_effort low -opt_leakage_to_dynamic_ratio 0.5
## Allow multi-bit merging and splitting during pre-CTS optimisation (default only splits)
setOptMode -opt_multi_bit_flop_opt true
## Check how instances are spread across Vt classes after placement
reportVtInstCount -outFile rpt/vt.rpt

A ratio of 1 means pure leakage optimisation and 0 means pure dynamic. Dynamic optimisation needs switching activity loaded, for example with read_activity_file; without it the tool has no basis for deciding which nets toggle often.

TRADE-OFFSetupHoldCongestionAreaPowerRuntime
Typical effect▼ worse● little change▲ better◆ depends▲ better▼ worse
Best forLeakage or dynamic power over budget; clock power on designs with many registers.
Key knobssetOptMode -opt_power_effort / -opt_leakage_to_dynamic_ratio / -opt_multi_bit_flop_opt, setPlaceMode -place_global_activity_power_driven

5.11 Incremental runs

A full rerun throws away decisions that were already checked. When the placement is mostly good and only a local change was made, an incremental run is the better tool.

CommandWhat it does
place_opt_design -incrementalImproves the existing placement around critical paths and congestion, then re-optimises DRV, WNS and TNS. It honours new density screens, so adding a partial blockage and running this spreads cells there.
place_opt_design -incremental_timingIncremental DRV and timing optimisation only, without placement changes.
optDesign -preCTS -incrIncremental setup optimisation of violating paths: resizing and buffering, no restructuring.
refinePlaceLegalises after manual edits. It moves only cells with a placed status.
congRepairSpreads cells at hotspots. Use after placement or pre-CTS optimisation, not after post-CTS optimisation.

Table 5.2 · Incremental placement and optimisation commands

TRADE-OFFSetupHoldCongestionAreaPowerRuntime
Typical effect▲ better● little change◆ depends● little change● little change▲ better
Best forSmall residual violations after a local change; keeping a placement that was already checked.
Key knobsplace_opt_design -incremental / -incremental_timing, optDesign -preCTS -incr

5.12 Putting it together: a placement recipe

The techniques above are not a checklist to run in full. The script below shows a sensible default order: settings first, then one placement, then reports. The designer adds the techniques from Sections 5.3 to 5.10 only when the reports point to them.

INNOVUS TCL · CONFIGURATION scripts/place.tcl (to be sourced on the Innovus terminal)
## 1. Restore the floorplan database that passed the gate in Section 3.6
restoreDesign db/floorplan.enc.dat top
## 2. Path groups so reg2reg and reg2cgate get their own effort
createBasicPathGroups -expanded
setPathGroupOptions reg2reg -effortLevel high
setPathGroupOptions reg2cgate -effortLevel high
## 3. Optimisation settings kept for the whole flow
setOptMode -opt_fix_fanout_load true
setOptMode -opt_drv_margin 0.1
## 4. Protect macro channels before global placement
setPlaceMode -place_global_auto_blockage_in_channel soft
## 5. Print every mode into the log for review
getPlaceMode
getOptMode
## 6. Placement plus pre-CTS optimisation
place_opt_design -out_dir rpt/place_opt
## 7. Tie cells after standard cells are placed
addTieHiLo
## 8. Exit checks (Section 6)
checkPlace rpt/checkPlace.rpt
timeDesign -preCTS -outDir rpt/preCTS
reportDensityMap -threshold 0.75
reportCongestion -hotSpot -3d
## 9. Save before CTS so the flow can come back here
saveDesign db/place_opt.enc
NOTE

The database names and the 0.1 DRV margin are illustrative. The restore command expects the saved database directory and the top cell name used in your flow.

5.13 Choosing a technique for each type of violation

So far each technique was described on its own. In practice the designer starts from a report, not from a technique. Table 5.3 turns the question around: given the violation, which technique is tried first, which one comes next, and what should be avoided. The first column is what the timing, DRV, congestion or power report shows.

Violation or symptomTry firstThenAvoid, or watch for
reg2reg setup, wire delay dominates the pathTiming-driven placement (5.1): -place_global_timing_effort high, specifyNetWeightGuide or attractor for the logic (5.6), incremental run (5.11)Raising congestion effort globally, which lengthens these same wires
reg2reg setup, gate delay dominates (fails even at zero wire load)Back to synthesis or RTL: logic depth is the causeRestructuring and sizing (5.7), -opt_high_effort_cellsSpending placement iterations; placement cannot remove gate delay
reg2cgate setupClock-gate-aware placement with the CTS spec loaded (5.8)Early clock flow, useful skewIgnoring it until CTS; real ICG latency only makes it worse
in2reg / reg2out setupCheck the I/O delays and pin positions firstplace_connected towards the ports, path group optionsOver-constrained I/O budgets taking effort from reg2reg
Many failing endpoints, large TNSsetOptMode -opt_all_end_points trueHigh effort path groups (4.1)Runtime; check constraints before chasing TNS
Max transition / max capacitance-opt_drv true (default), a small -opt_drv_marginRepeaters on long wires, guiding driver and load closerNets marked dont_touch; DRV margin set too high (area)
Max fanoutsetOptMode -opt_fix_fanout_load trueBuffer trees for high fanout nets (5.7)Turning it on late; keep it on from the first pre-CTS run
Long net with small fanoutRepeaters (DRV fixing), -opt_max_length if the methodology sets oneCloning, guiding the loadsExtra buffers on a congested route
Congestion at macros or channelsChannel blockage and halos (5.5)Macro orientation or pin side change in the floorplanGlobal congestion effort for a local problem
Congestion in one moduleModule padding or a partial blockage (5.3, 5.4)Cell padding on high pin-count cellsA fence that is too small
Congestion over the whole block-place_global_cong_effort high, setDesignMode -congEffort highReview utilisation and floorplan sizeSetup degradation from longer wires; recheck timing
Pin access risk on dense cellsCell padding (5.3)-place_detail_swap_eeq_cells truePadding left in place after it is no longer needed (area)
Scan wiring congestionScan reordering with the scan DEF (5.9)Check chain lengths with report_scan_chainHold violations in scan mode after CTS
Hold before CTSUsually wait: hold depends on real clock skew-opt_early_hold_fixing only for an early lookFixing hold against ideal clocks, which wastes area
Leakage over budget-opt_power_effort low|high with -opt_leakage_to_dynamic_ratio 1Area recovery, Vt mix review with reportVtInstCountSetup on paths that lose their low-Vt cells
Dynamic or clock powerRatio below 1 with switching activity loaded; clock-gate-aware placementMulti-bit flip-flops (-opt_multi_bit_flop_opt)Running dynamic optimisation without activity data
Utilisation keeps growingcheck_timing for unconstrained or over-constrained paths-opt_max_density, area recovery, smaller DRV marginSlack adjustments applied to every group
Fenced module fails timingResize or move the fence; use a region or guideCheck -opt_honor_fences in the setupVery small fences forcing high density

Table 5.3 · Violation to technique selection guide

5.14 Trade-off matrix

Every technique buys one thing with another. Table 5.4 collects the trade-off rows from Sections 5.1 to 5.11 into one view, so the designer can see what a change is likely to cost before making it. The entries describe the typical direction of the effect, not a guarantee; the real result depends on the design, and it should be confirmed with the reports in Section 6.

TechniqueSetupHoldCongestionAreaPowerRuntime
5.1 Timing-driven placement▲●▼●●▼
5.2 Congestion-driven placement◆●▲●●▼
5.3 Density control and padding◆●▲▼●●
5.4 Placement blockages◆●▲▼●●
5.5 Channel blockages and halos◆●▲▼●●
5.6 Guides, regions, fences◆●◆●●●
5.7 Netlist optimisation▲●◆▼▼▼
5.8 Clock awareness, useful skew▲▼●●▲▼
5.9 Scan reordering●▼▲●●●
5.10 Power-aware, multi-bit▼●▲◆▲▼
5.11 Incremental runs▲●◆●●▲

Table 5.4 · Typical effect of each technique (▲ better, ▼ worse, ● little change, ◆ depends on how it is used)

HOW TO READ THE ◆ ENTRIES

A "depends" entry means the same knob can help or hurt. A guide that groups a module's logic usually helps setup; a fence that is too small hurts it. A partial blockage relieves congestion in its area but can push the same cells into a neighbour and create a new hotspot there. Thus, after any ◆ change, both the timing and the congestion reports are read again, not only the one the change was aimed at.

Three trade-offs come up so often that they deserve a sentence each. Timing against congestion: pulling cells together shortens wires and raises density; spreading them does the opposite, so the two efforts are tuned together, never one alone. Setup against hold: useful skew and scan reordering both help one check by taking margin from hold, so the hold picture after CTS has to be planned for. Timing against area and power: every buffer, upsized gate and low-Vt swap that fixes setup costs area and power, which is why area recovery and power optimisation are kept away from near-critical paths with a slack target rather than switched off.

5.15 setPlaceMode at a glance

setPlaceMode holds the persistent settings of the placement engine. They apply to place_design, place_opt_design and refinePlace until changed, and the current values are printed with getPlaceMode. Table 5.5 lists the options most often used at this stage. Defaults are given as documented; confirm them in the release you use.

OptionDefaultWhat it doesUse whenTrade-off
Global placement: timing and congestion
-place_global_timing_effortmediumWeight of timing in global placement (medium or high)Setup fails on long wires and congestion has headroomDenser placement, more congestion; not advised for congested designs
-place_global_cong_effortautoSpreading at overflow (low, medium, high, auto)Hotspots spread over the blockLonger wires, possible setup loss
-place_global_max_density-1 (off)Upper limit on local bin density (0 to 1)Clumping while utilisation is moderateLonger wires; must stay above design utilisation
-place_global_uniform_densityfalseEven cell distributionUtilisation below about 70%Wires lengthen on some paths
-place_global_module_paddingnoneSpreads one module by a factor (1.0 or more)One module is congestedModule takes more area; global placement only
-place_global_auto_blockage_in_channelnoneSoft or partial blockage in narrow macro channelsCells crowd channelsFewer sites near macros
Global placement: clock, power, scan, spares
-place_global_clock_gate_awaretrueClock gates towards the centre of their fanout; needs a clock specreg2cgate paths, clock powerGate may move away from its enable logic
-place_global_clock_power_driventrueWeights nets from clock gates to flip-flopsClock power mattersSmall cost to data wire length
-place_global_activity_power_drivenfalseConstrains high-activity netsDynamic power focus, activity loadedRuntime, some timing freedom
-place_global_ignore_scantrueScan connections ignored in global placementNormal flowsNone in functional mode
-place_global_reorder_scantrueScan reordering during placement (needs scan info)Scan wiring congestionShort scan paths, hold in scan mode
-place_global_ignore_sparefalseIgnore spare cell connections to spread spares evenlySpares clumping togetherNone for timing
Detail placement and legalisation
-place_detail_honor_inst_padfalseHonour specifyInstPad in refinePlace and checkPlaceInstance padding is usedArea
-place_detail_pad_fixed_instsfalseHonour padding on fixed instancesSpace needed around preplaced cellsArea
-place_detail_wire_length_opt_effortmediumCell swapping for wire length (none, medium, high)Wire length mattersHigh: up to about 10% more runtime for about 2% wire length
-place_detail_swap_eeq_cellsfalseAllow electrically equivalent cell swaps for routabilityPin access problemsNone for timing
-place_detail_legalization_inst_gap0Minimum site gap between instancesA process rule needs itArea
-place_detail_check_routefalseAvoid DRC between fixed signal wires and pinsPrerouted signal wires existSlower legalisation
-place_detail_eco_max_distance0Search window for ECO legalisation (internally 10 rows if unset with -eco)Post-route ECO movesToo small a window may fail to legalise
Flow control
-place_hard_fencetruerefinePlace and checkPlace honour fences and regionsFenced designsLess freedom near fences
-place_opt_run_global_placefullGlobal placement inside place_opt_design: none, seed or fullseed after concurrent macro placementnone skips placement entirely
-place_design_floorplan_modefalseQuick prototype placement, possibly illegalFloorplan exploration onlyNot for implementation
-place_opt_post_place_tclnoneScript sourced after placement, before optimisationCustom fixes between the two stepsMust be kept in step with the flow

Table 5.5 · Key setPlaceMode options

5.16 setOptMode at a glance

setOptMode holds the settings of the optimisation engine used by place_opt_design and optDesign. Several options here decide how much of the netlist the tool may change and at what cost. Table 5.6 lists the ones that matter most before CTS, grouped by purpose.

OptionDefaultWhat it doesUse whenTrade-off
Targets
-opt_setup_target_slack0 nsSetup goal for optimisationA margin is wanted for later degradationArea, power and runtime grow
-opt_hold_target_slack0Hold goal (used when hold is fixed)Margin for hold after CTSMore hold buffers
-opt_all_end_pointsfalseTNS optimisation on all endpoints, not only the worstMany failing endpointsRuntime
Design rules
-opt_drvtrueRepair max capacitance and max transitionKeep onBuffers and area
-opt_drv_margin0Scales cap and transition limits (-0.7 to 0.7)Pre/post-route correlationMore buffers, area and power
-opt_fix_fanout_loadfalseFix max fanout and max loadMethodology sets fanout limitsMore buffers
-opt_max_length-1 (off)Treat a max wire length as a design ruleLong nets cause transition or noise troubleMore buffers
Room and boundaries
-opt_max_density0.95Utilisation cap for optimisationLower it to keep room on dense blocksSome violations may stay unfixed
-opt_honor_density_screenfalseOptimisation honours partial blockagesPartial blockages must hold during fixingLess freedom for fixes
-opt_honor_fencesfalse (true for MSV)Keeps fences and regions legal in each optimisation stepFenced designsLess freedom for fixes
Permitted transforms
-opt_enable_restructuretrueNetlist restructuringKeep on unless the netlist must stay close to synthesisLarger netlist changes
-opt_pin_swappingtrueSwap logically equivalent pinsKeep onNone noticeable
-opt_add_insts / -opt_delete_inststrueAllow adding and deleting instancesRestrict only for very controlled runsRestricting limits fixing power
-opt_move_insts / -opt_down_size_inststrueAllow moving cells and downsizingKeep onRestricting limits fixing power
-opt_resize_flip_flopstrueAllow sizing of flip-flopsKeep on unless flops are lockedNone noticeable
-opt_remove_redundant_inststrueRemove dead and constant logicKeep on; declare spare cellsUndeclared spares may be removed
-opt_high_effort_cellsnoneCells that get high-effort setup optimisationKnown critical cellsRuntime
Area, skew, hold, power
-opt_area_recoverydefaultWhen area reclaim runs (default, true, false)true under area pressureCan eat into near-critical slack
-opt_area_recovery_setup_target_slack0 nsKeeps area and power reclaim off near-critical pathsProtect paths near zero slackLess area recovered
-opt_skew_pre_ctstrueUseful skew before CTSSetup with spare slack in a neighbouring stageHold; offsets must be built by CTS
-opt_skewtrueMaster switch for useful skew in optDesignfalse disables all useful skewLess setup recovery when off
-opt_early_hold_fixingnoneHold fixing inside place_opt_design (ideal or propagated clocks)An early look, mainly with the early clock flowArea spent on approximate hold numbers
-opt_power_effortnonePower-driven optimisation (none, low, high)Leakage or dynamic budgetRuntime and memory
-opt_leakage_to_dynamic_ratio11 leakage only, 0 dynamic only, between bothSet together with power effortDynamic needs switching activity
-opt_multi_bit_flop_optsplitOnlyMulti-bit flip-flop merging and splittingClock power and areaMerging can cost timing on some paths

Table 5.6 · Key setOptMode options

INNOVUS TCL · CONFIGURATION (to be run on the Innovus terminal)
## A balanced starting point for a congested, timing-critical block (values illustrative)
setPlaceMode -place_global_cong_effort high -place_global_timing_effort medium
setPlaceMode -place_global_auto_blockage_in_channel soft
setOptMode -opt_fix_fanout_load true -opt_drv_margin 0.1
setOptMode -opt_area_recovery_setup_target_slack 0.05
## Print both into the log so the run can be reproduced
getPlaceMode
getOptMode

Thus, the two tables are not a list of switches to flip. Most defaults are sensible, and each change in these tables should answer a specific line in a report. Table 5.3 says which report line leads to which option.

06After Placement: Check Before CTS #

A placement is finished when the evidence says so, not when the command returns. This section lists the reports to read and what each one should show before the design moves to CTS.

INNOVUS TCL · INSPECTION (to be run on the Innovus terminal)
## Legality: overlaps, off-grid cells, blockage and fence violations
checkPlace rpt/checkPlace.rpt
## Pre-CTS timing: runs early global route and extraction, then writes setup and DRV reports
timeDesign -preCTS -outDir rpt/preCTS
## Density map; bins above 75 percent are listed
reportDensityMap -threshold 0.75
## Hotspots and per-layer congestion
reportCongestion -hotSpot -3d

6.1 Reading the pre-CTS timing summary

The summary that timeDesign -preCTS writes has one row per path group with the worst negative slack (WNS), the total negative slack (TNS) and the number of violating paths, followed by a table of design rule violations (max transition, max capacitance, max fanout) and the density. Two details are easy to misread.

  • The overall TNS and the overall count of violating paths are counted per endpoint, so they need not equal the sum of the path group values. An endpoint failing from two groups counts once overall.
  • The density in this report ignores padding, while checkPlace includes it (Section 5.3).
WORKED EXAMPLE 6.1 · WHY THE TOTALS DO NOT ADD UP
## Assuming, one register has two failing paths into its D pin
From an input port   : slack -0.6 ns   (in2reg group)
From another register: slack -0.3 ns   (reg2reg group)
in2reg TNS  = -0.6 ns,  reg2reg TNS = -0.3 ns
Overall TNS = -0.6 ns  (one endpoint, its worst slack only)
Violating endpoints overall = 1, not 2

6.2 The exit gate

Exit checkEvidence to look atStatus
Legal placementcheckPlace shows zero violationsPASS / FAIL
Pre-CTS setupreg2reg WNS close to zero, or within the margin the team expects CTS and post-CTS optimisation to recoverPASS / FAIL
reg2cgate pathsClean or explained; these get worse once real clock latency appearsPASS / FAIL
DRVNo max transition or max capacitance violations on data netsPASS / FAIL
CongestionLow overflow and no large contiguous hotspot in reportCongestionPASS / FAIL
DensityNo large region near 100% in the density mapPASS / FAIL
Room to growUtilisation leaves space for CTS and hold buffersPASS / FAIL
SavedsaveDesign written before CTSPASS / FAIL
NOW WE CHECK

Do not stop at the summary line. Open the worst five paths and read them stage by stage. One bad net, one high-fanout driver or one macro in the wrong place usually explains most of the violations, and the summary hides which one it is.

07Debug Playbook #

Table 7.1 maps the symptoms seen most often after placement to their usual causes. The first column is what the report shows; the last column is where to look first, not a guaranteed fix.

SymptomLikely causeWhat to try first
Hotspot at macro corners or in channelsCells crowding narrow channels; macro pins facing a wallChannel blockage (5.5), larger halo, review macro pin side and orientation
Good timing, red congestion mapTiming effort pulled cells too closePartial blockage or module padding (5.3), then place_opt_design -incremental
WNS jumps between identical runsTiming loops broken at different arcsBreak loops in the SDC with set_disable_timing (3.2)
Large transition on a net with small fanoutDriver far from receiver, no repeaterCheck DRV settings, check for dont_touch, guide the logic closer
reg2cgate paths failClock gates far from their fanout; ideal clock optimismClock-gate-aware placement with the CTS spec loaded, early clock flow (5.8)
Utilisation keeps growingBuffering on unconstrained or over-constrained pathscheck_timing again, review slack adjustments and the DRV margin
A fenced module fails timingFence too small, or far from the logic it talks toResize or move the fence, or use a region or guide instead (5.6)
Large displacement in the legalisation logGlobal placement packed a region beyond capacityDensity control in that region (5.3), then place again
Pre-CTS timing clean, post-route timing much worsePre-route estimates do not track routed RCCheck RC scale factors and the DRV margin, look for detoured nets in congested areas
Many hold violations in scan mode after CTSScan reordering created very short scan pathsExpected; fix in hold optimisation (5.9)
checkPlace and timeDesign utilisation differPadding counted in one but not the otherExpected; remove padding temporarily to compare (5.3)

Table 7.1 · Symptom to cause to first action

Thus, most debugging at this stage is a question of asking what the tool believed: which constraints it saw, which areas it thought were free, which nets it thought were critical. Once that is clear, the fix is usually small.

PnR Flow Mentor Guide

Read the complete 8-chapter PnR Flow Mentor Guide free on the web — library setup through placement, clock tree synthesis, routing, chip finishing, hierarchical implementation, and ECO, all the way to stream-out.

PnR Flow Physical Design Mentor Guide — eight chaptersPnR Flow Mentor GuideEight chapters, library setup through to stream-out.

08Interview Questions #

The questions are grouped by the experience level at which they are typically asked. Each one has four parts: why the interviewer asks it, the expected answer, and a pair of follow-up questions with short answers. The answers are written in the first person because that is how they will be spoken.

Level 1: Basic (0 to 2 years)

Q1. What do you check before starting placement?

Why the interviewer asks: it shows whether you treat placement as a step with inputs, or as a button.

Expected answer: I check that every cell has LEF and Liberty views and that the netlist has no floating or multi-driven nets (checkDesign, checkNetlist), that the design is unique, and that the constraints are complete with no loops (check_timing). I run a zero wire-load timing baseline to see if the design can meet timing even with ideal wires. Then the floorplan: macros fixed with halos, blockages in place, end caps and well taps inserted, preplaced cells legal. Finally the inputs for options: scan DEF if reordering is needed, don't-use list, and a utilisation target with room to grow.

Follow-up questions: 1. What happens if a clock is missing in the SDC? 2. Why fix macros before placement?

Follow-up answers: 1. Its paths are unconstrained, so the placer ignores them and the report looks clean only because nothing was checked. 2. A macro with a placed status can be moved by the placer, which might block a planned channel or break the power hookup.

Q2. What is the difference between global placement, detail placement and legalisation?

Why the interviewer asks: basic vocabulary, and a check that you know where displacement comes from.

Expected answer: Global placement finds rough positions that keep connected cells close and spread cells evenly; overlaps are allowed. Detail placement puts each cell on a legal site in a row, removes overlaps, honours blockages and improves locally for timing, wire length and congestion. Legalisation is the part that only makes the placement legal; in Innovus that is refinePlace, which place_opt_design calls at the end.

Follow-up questions: 1. What does a large legalisation displacement tell you? 2. Which cells does refinePlace move?

Follow-up answers: 1. Global placement over-packed a region, so cells had to move far from where timing wanted them. 2. Only cells with a placed status; fixed cells stay where they are.

Q3. What is utilisation, and why not start at 90%?

Why the interviewer asks: it tests whether you think ahead to CTS, hold and ECOs.

Expected answer: Utilisation is standard cell area divided by the area available to standard cells, which excludes macros and hard blockages. If the block starts at 90%, there is very little room for the buffers CTS adds, the hold buffers added after CTS, and ECO cells later. Routing also suffers because dense regions leave fewer free tracks. A lower starting point is chosen with that growth in mind.

Follow-up questions: 1. Is utilisation the same as density? 2. Why can a 65% block still have a 97% region?

Follow-up answers: 1. No. Density is the same ratio in a small bin; utilisation is the whole block. 2. Because the average hides local packing; the density map shows it.

Q4. What are hard, soft and partial placement blockages?

Why the interviewer asks: a classic, and a quick test of whether you have used them.

Expected answer: A hard blockage keeps every standard cell out. A soft blockage keeps cells out during placement but lets optimisation add buffers, inverters and similar cells, which suits macro channels where long nets still need repeaters. A partial blockage limits the density in an area to a percentage, for a region that is too dense but still useful.

Follow-up questions: 1. Which one would you use in a macro channel? 2. What is a halo?

Follow-up answers: 1. Usually soft, so repeaters can still go in. 2. A keep-out ring around a macro, so standard cells do not sit against its edge and pins.

Q5. Why are clocks ideal during placement?

Why the interviewer asks: it checks whether you understand what is estimated at each stage.

Expected answer: The clock tree does not exist yet, so there is no real clock latency or skew to compute. The tool assumes every flip-flop sees the edge at the same time. That is why hold is not fixed at placement and why paths into clock gates can look better than they really are.

Follow-up questions: 1. Why is hold fixed after CTS and not before? 2. What changes the ideal assumption during placement?

Follow-up answers: 1. Hold depends on real skew, which only exists after CTS; fixing it earlier fixes the wrong numbers. 2. The early clock flow, which clusters sinks and annotates clock latencies during placement.

Level 2: Intermediate (2 to 5 years)

Q6. Why does place_opt_design remove buffers at the start?

Why the interviewer asks: it separates people who read the log from people who only read the summary.

Expected answer: The buffers synthesis inserted were based on estimated wires, not real locations. Keeping them would make the placer place around wrong assumptions. Removing them lets the placer place the real logic, and pre-CTS optimisation then rebuilds the buffering on actual distances.

Follow-up questions: 1. Which buffers are not removed? 2. What does the rebuilt buffering fix?

Follow-up answers: 1. Clock path buffers, and anything protected with dont_touch. 2. Max transition and max capacitance violations, high fanout nets and long wires.

Q7. Timing is clean after placement but congestion has hotspots. What do you do?

Why the interviewer asks: it tests whether you treat congestion as a real problem before routing proves it.

Expected answer: I find the cause first: a macro channel, a high pin-density module such as a crossbar, or cells pulled together by timing effort. Then I fix it locally with a channel blockage, a partial blockage, module or cell padding, and run an incremental placement. I check timing again afterwards because spreading lengthens wires. I do not ignore it: congestion becomes detours, shorts and DRCs after routing, when it is much more expensive to fix.

Follow-up questions: 1. When would you raise global congestion effort instead? 2. What is overflow?

Follow-up answers: 1. When the problem is spread over the whole block rather than a few hotspots. 2. Routing demand minus supply in a gcell, in tracks.

Q8. Explain cell padding, instance padding and module padding.

Why the interviewer asks: the three look similar and behave differently; mixing them up is common.

Expected answer: Cell padding applies to every instance of a library cell, for example high pin-count multiplexers, and stays honoured by CTS and optimisation until removed. Instance padding applies to named instances and is honoured by detail placement only when the honour option is set. Module padding spreads all cells of one module by a factor, for example 1.2 gives about 20% more area, and works in global placement only.

Follow-up questions: 1. Why do checkPlace and timeDesign report different utilisation on a padded design? 2. When would you remove cell padding?

Follow-up answers: 1. checkPlace counts padding as used area, timeDesign ignores it. 2. When the area is needed later or the padding was only for a congestion phase.

Q9. Why is scan reordering done after placement, and what is the risk?

Why the interviewer asks: it links DFT, placement and hold in one question.

Expected answer: The chain order from synthesis ignores physical positions. Reordering by location shortens scan wiring and reduces congestion, and scan connections are ignored in global placement so they do not distort it. The risk is very short scan paths between neighbouring flip-flops, which often become hold violations in scan mode after CTS.

Follow-up questions: 1. What input does reordering need? 2. Why ignore scan connections in global placement?

Follow-up answers: 1. The scan chain information, usually a scan DEF. 2. They are not timing relevant in functional mode and would pull flip-flops away from their functional logic.

Q10. Why must timing loops be broken before pre-CTS optimisation?

Why the interviewer asks: it checks run-to-run discipline.

Expected answer: If the tool breaks a loop, it disables one arc of its choice, and it might pick a different arc in another run. WNS then changes between runs for no physical reason and results cannot be compared. Breaking the loops in the SDC with set_disable_timing makes every run analyse the same graph.

Follow-up questions: 1. Which command reports loops? 2. Is a broken loop verified for timing?

Follow-up answers: 1. check_timing. 2. No; timing through the disabled arc is not checked, so the loop needs a functional reason to be safe.

Q11. A net has fanout two but a very large transition. Why, and how do you fix it?

Why the interviewer asks: it checks whether you think in wires, not only in fanout.

Expected answer: The driver is far from its loads, often because the loads are pulled towards other logic they connect to more strongly. Wire delay grows roughly with the square of length, so the transition degrades fast. I would add repeaters, size the driver, or guide the logic closer. I would also check the net is not dont_touch, which stops optimisation from touching it.

Follow-up questions: 1. Why does splitting a wire in two help so much? 2. When would you clone instead?

Follow-up answers: 1. Two half-length segments each cost about a quarter of the full wire, so even with a repeater the total drops. 2. When the loads sit in two distant groups; each clone drives a short local net.

Level 3: Advanced (5 to 8 years)

Q12. What does the early clock flow solve, and what can go wrong with it?

Why the interviewer asks: it tests knowledge of clock gating timing and of the flow.

Expected answer: With ideal clocks, paths into clock gates look better than they are, because a gate's real clock arrives earlier than its flip-flops' clock. The early clock flow clusters the sinks and annotates latencies during place_opt_design, so optimisation sees closer to real clock timing and makes useful skew decisions. The risk is in the setup: the CTS specification must exist before placement and must not be deleted before ccopt_design, or the useful skew decisions are lost.

Follow-up questions: 1. Which path group shows the problem first? 2. Does an incremental place_opt_design rebuild the early tree?

Follow-up answers: 1. reg2cgate. 2. No, it reuses the existing tree and only adjusts useful skew through virtual delays.

Q13. What does useful skew do before CTS, and what is the catch?

Why the interviewer asks: it checks whether you understand slack borrowing, not only the term.

Expected answer: It shifts the clock arrival at selected flip-flops so a failing stage borrows slack from its neighbour. For example, delaying the clock at FF2 by 50 ps turns a -40 ps path into it into +10 ps, and a +60 ps path out of it into +10 ps. The catch: the next stage loses the same amount, hold on the borrowing path gets worse, and the gain is real only if CTS implements the offsets.

Follow-up questions: 1. Why can useful skew not fix a whole design? 2. Which check gets worse on the capture side?

Follow-up answers: 1. It moves time, it does not create it; a loop of failing stages has nowhere to borrow from. 2. Hold on the path whose capture clock was delayed.

Q14. A fenced module fails timing while the rest of the block is fine. What do you check?

Why the interviewer asks: it tests judgement about over-constraining.

Expected answer: Whether the fence is too small, giving high density inside; whether it sits far from the logic it talks to, giving long wires at its boundary; and whether optimisation honours fences in this setup. If the fence exists only to keep the module together, a region or a guide often gives the grouping without the hard boundary.

Follow-up questions: 1. When is a fence really needed? 2. Difference between a region and a fence?

Follow-up answers: 1. For a power domain or a block that must be hardened separately. 2. In a region other cells may enter; a fence is exclusive.

Q15. Pre-CTS timing is clean, but after routing the same paths fail. How do you approach it?

Why the interviewer asks: correlation is where experience shows.

Expected answer: First I compare the same path before and after routing to see where the delay grew: wire delay, a detour, or crosstalk. If wires are consistently longer than estimated, the pre-route RC scale factors or the DRV margin need tuning. If only some nets grew, they usually cross congested areas, so the real fix is the congestion at placement. Crosstalk appears only after routing, so its share has to be fixed later or margined earlier.

Follow-up questions: 1. How does a DRV margin help correlation? 2. Why look at congestion for a timing problem?

Follow-up answers: 1. It tightens transition and capacitance limits before routing, which absorbs part of the later degradation. 2. Congested nets are detoured, and detours add wire the placer never saw.

Q16. When do you use an incremental placement instead of a full rerun?

Why the interviewer asks: it tests iteration strategy.

Expected answer: When the placement is mostly good and the change is local: a new blockage, padding, a few constraint updates. place_opt_design -incremental keeps the checked decisions and works around critical paths and congestion; it also honours new density screens. A full rerun is for large changes, such as a new floorplan, new macro positions or a new netlist.

Follow-up questions: 1. Which incremental option avoids moving cells? 2. Can congRepair be used after post-CTS optimisation?

Follow-up answers: 1. -incremental_timing. 2. It is not recommended; it moves many cells, which disturbs the built clock tree.

Level 4: Expert (8+ years: Senior, Lead, Staff)

Q17. Timing and congestion are both failing after placement. How do you decide what to fix first?

Why the interviewer asks: leads have to order work, not only do it.

Expected answer: I fix congestion first unless the timing failures are structural. Congestion that survives placement turns into detours and DRCs that also destroy timing, so timing fixes on top of it are not stable. I check whether the two problems share a cause, often a macro placement or a dense module, and fix that cause. If timing fails even at zero wire load, the problem is logic depth, and I take it back to synthesis or architecture instead of spending placement iterations on it.

Follow-up questions: 1. How do you prove a timing problem is structural? 2. What do you report to the team?

Follow-up answers: 1. Zero wire-load timing of the cone: if it fails there, placement cannot help. 2. The cause, the options with their cost, and which stage each fix belongs to.

Q18. Area pressure forces 80% utilisation. What is your plan?

Why the interviewer asks: it tests planning under a constraint you cannot remove.

Expected answer: I would make the room before placement: review macro placement and channels, and check the don't-use list and cell choices so optimisation does not grow the design. During placement I would control density locally rather than globally, use cell padding only where pin access needs it, keep area recovery on with a slack target that protects near-critical paths, and watch the growth after each step. I would also agree early with the team on how much room CTS and hold fixing need, because they come last and have no other place to go.

Follow-up questions: 1. Which cells grow the design most after placement? 2. Why local density control?

Follow-up answers: 1. CTS buffers and hold buffers. 2. A global limit spreads everything; local control spends area only where the hotspots are.

Q19. How would you set up a placement methodology for a team of new engineers?

Why the interviewer asks: staff roles multiply through others.

Expected answer: A gate before placement with fixed checks and a gate after it with fixed evidence, both scripted, so every run produces the same reports. Modes printed into the log, a saved database before every big step, one change per iteration with a short note of why. A shared debug table like the one in Section 7, and a habit of reading the worst five paths rather than the summary line.

Follow-up questions: 1. The single habit that helps a junior most? 2. What do you never allow?

Follow-up answers: 1. Reading full timing paths until they can predict where the delay is. 2. Moving to CTS with an unexplained placement report.

Q20. How do you decide that a hotspot is a floorplan problem and not a placement problem?

Why the interviewer asks: senior engineers must push back upstream with evidence.

Expected answer: If the hotspot stays at the same place across different placement settings, sits at macro corners, channels or along pins that face a wall, and local placement fixes only move it a little, it is structural. I would show the congestion map with the macro pins overlaid, try an alternative macro orientation or channel width as a quick experiment, and bring the result to the floorplan owner with the cost of each option.

Follow-up questions: 1. What is the quickest experiment? 2. Why bring options and not only the problem?

Follow-up answers: 1. A placement run on a floorplan with one macro rotated or one channel widened. 2. It turns a complaint into a decision, and the floorplan owner can weigh the cost.

09Chapter Summary #

Placement turns a netlist into positions, and with positions come real wire lengths, a congestion picture and the first timing report that can be trusted. We saw that most bad placements come from bad inputs, so a gate of library, netlist, constraint, floorplan and physical cell checks comes first. We then looked at what place_opt_design does inside, why wire length costs more than distance suggests, and twelve techniques for timing, congestion, density, guidance, netlist changes, clock and scan awareness, power and incremental runs. Each technique has a cost, and several of them pull against each other, which is why they are applied in response to a report rather than all at once.

Getting placement wrong is expensive in a chain: congestion that survives becomes detours, detours become timing failures after routing, and those become late ECOs and a moving tapeout date. A clean exit gate before CTS is what breaks that chain. In the next stage, clock tree synthesis, the ideal clock assumption ends; the reg2cgate paths, the useful skew offsets and the room left for buffers all come back into play.

10Top 15 Quick Revision Questions #

  1. Placement in one line? Mapping cells to legal row sites so timing, congestion and density all agree.
  2. Global vs detail? Rough, overlapping, spread positions vs legal sites with local improvement.
  3. Legalisation command? refinePlace, called by place_opt_design at the end.
  4. First step inside place_opt_design? Removing synthesis buffer trees.
  5. Utilisation vs density? Whole-block ratio vs ratio inside one bin.
  6. Why zero wire-load timing first? If it fails there, placement cannot fix it.
  7. Why break loops in SDC? So every run analyses the same timing graph.
  8. Hard, soft, partial blockage? Nothing; no placement but buffers in opt; density limit.
  9. Fix for a crowded macro channel? Soft blockage plus halos, and a look at macro pins.
  10. Guide, region, fence? Preference; module inside, others allowed; module only, all inside.
  11. Overflow? Routing demand minus supply in a gcell.
  12. Why clock-gate-aware placement? Real ICG clock arrives early, so its enable path has less time.
  13. Useful skew catch? Moves slack, worsens hold on the borrowing path, needs CTS to implement it.
  14. Scan reorder risk? Short scan paths become hold violations after CTS.
  15. Incremental vs full rerun? Local change vs new floorplan, macros or netlist.

11Important Definitions #

TermDefinition
Global placementFirst placement step: rough positions that minimise wire length and spread cells; overlaps allowed.
Detail placementSecond step: legal sites in rows, no overlaps, local improvement for timing, wire length and congestion.
LegalisationThe part of detail placement that only makes the placement legal (refinePlace).
UtilisationStandard cell area divided by the area available to standard cells.
Density (bin)The same ratio measured inside a small window of the core.
gcellA global routing tile with a fixed number of tracks per layer and direction.
OverflowRouting demand minus supply in a gcell; a cluster of overflowing gcells is a hotspot.
HaloKeep-out ring around a macro where standard cells may not be placed.
ChannelNarrow gap between macros, with few routing tracks.
Placement blockageArea where placement is forbidden (hard), deferred to optimisation (soft) or density-limited (partial).
PaddingReserved free sites around a library cell, an instance or a whole module.
Guide / region / fenceConstraints from soft preference to hard exclusive area for a module.
High fanout netA net with many loads, such as reset, that needs a buffer tree.
CloningDuplicating a driver so each copy drives a nearby group of loads.
Integrated clock gate (ICG)A cell that gates a clock with an enable; its clock arrives earlier than its flip-flops' clock.
Early clock flowInnovus flow that clusters clock sinks and annotates latencies during placement.
Useful skewIntentional clock arrival shift that moves slack between neighbouring stages.
Scan reorderingRe-stitching scan chains by physical position after placement.
Path groupA set of paths that optimisation treats with its own effort and targets.
WNS / TNSWorst negative slack / total negative slack, counted per endpoint.

12Important Commands #

CommandPurpose
checkDesign -allLibrary, netlist, P/G and floorplan integrity report
checkNetlist · checkUniqueNetlist health; unique module instantiation
check_design -type placePlacement preconditions: rails, pin access, taps, termination cells
check_timing -verboseMissing clocks, unconstrained endpoints, loops
timeDesign -prePlace | -preCTSZero wire-load baseline; pre-CTS timing with early global route
checkFPlan -reportUtilFloorplan checks with target and effective utilisation
addHaloToBlockKeep-out ring around macros
addEndCap · addWellTap · addTieHiLoPhysical cells before and after standard cell placement
createPlaceBlockage -type hard|soft|partialSteer the placer away from areas
createGuide · createRegion · createFenceModule grouping from soft to hard
place_connected -attractorPull connected logic towards a macro or I/O
specifyCellPad · specifyInstPadPadding for library cells or instances
specifyNetWeightPriority weight for a net in placement
createBasicPathGroups -expandedStandard path groups
setPathGroupOptionsEffort, slack adjustment and target per group
setPlaceMode · setOptMode · setDesignModePlacement, optimisation and flow-level settings
place_opt_design (-incremental)Placement plus pre-CTS optimisation; incremental improvement
optDesign -preCTS -incrIncremental setup optimisation
refinePlace · checkPlaceLegalise; check legality
reportDensityMap · reportCongestionDensity bins; hotspots and per-layer congestion
congRepairSpread cells at hotspots (not after post-CTS optimisation)
report_scan_chain · reportVtInstCountScan chain lengths; Vt distribution

13Quick Revision Notes #

StageDo thisWatch for
DatacheckDesign, checkNetlist, checkUniqueCells without LEF or Liberty, floating inputs
Constraintscheck_timing, timeDesign -prePlaceMissing clocks, loops, failing even at zero wire load
FloorplanMacros fixed, halos, channel blockages, checkFPlanPlaced (not fixed) macros, pins facing walls
Physical cellsEnd caps, then well taps, before placementFillers added too early
InputsScan DEF, don't-use list, CTS spec for early clockSkipped reordering, banned cells used
SetupPath groups, fanout fixing, DRV margin, modes loggedSlack adjustments on every group
Runplace_opt_design, then addTieHiLoLarge legalisation displacement
TimingRead worst 5 paths per groupreg2cgate optimism, long wires, dont_touch nets
CongestionreportCongestion -hotSpot -3dHotspots at macros, crossbars, channels
DensityreportDensityMap -threshold 0.75Bins near 100%, padding differences
Fix locallyPartial blockage, padding, guide, incremental runFences too small, global effort for local problems
ExitAll exit gate rows PASS, saveDesignNo room left for CTS and hold buffers
THREE HABITS

Fix the inputs before placing. Change one thing at a time and save a database before each big step. Read the worst paths, not only the summary.

WHERE TO GO NEXT

The Innovus PnR guides go deeper into the rest of the flow, and the interview Q&A on PrepSprint can be read free on the web.

The same handbook, print-ready

The 47-page A4 PDF edition, with every figure and table at full size. Free.

Enter your email and the download starts right away. No spam.

Free interview practice

Practise interview questions on this topic

Premium libraries

Go deeper with the pdVerse libraries

Complete pdVerse LibraryAll eight collections: every library above plus the Low Power Tool Guide, in one purchase.₹1,237