What are the five stages of place_opt, and what does each one actually do?
From PDVerse PnR Interview Handbook · pdVerse Mentor Guide
Short Answer
place_opt is not one operation -- it's five named stages run in sequence: initial_place (merge clock-gating logic, coarse-place, scan chain optimization if SCANDEF is present), initial_drc (remove existing buffer trees, high-fanout-net synthesis, electrical DRC fixing), initial_opto (timing/area/congestion/leakage-power optimization), final_place (incremental placement to improve timing/congestion, then legalize), and final_opto (further optimization and legalization). You can run any contiguous slice with -from/-to -- the stage names are the actual debug handles.
Technical Explanation
- place_opt is not one operation -- it's five named stages run in sequence: initial_place, initial_drc, initial_opto, final_place, final_opto.
- initial_place merges clock-gating logic, performs coarse placement, and (if SCANDEF is present) scan chain optimization.
- initial_drc removes any existing buffer trees, runs high-fanout-net synthesis, and fixes electrical DRC.
- initial_opto is where timing, area, congestion, and leakage-power optimization actually happen.
- final_place is incremental placement to improve timing/congestion, then legalization.
- final_opto is a second optimization + legalization pass for timing/congestion.
- If you omit -from it starts at initial_place; if you omit -to it runs through final_opto.
- Knowing the stage names matters in practice: when a run is slow or a result looks wrong, you re-run just the slice you need instead of the whole flow.
What To Check
- Warning sign: a design that looked fine after coarse placement shows new DRC or timing problems after the full place_opt run, and you can't tell which stage introduced them.
- Inspect: re-run with -to at each stage boundary and check DRC/timing after each one, rather than only looking at the final result.
- Correct: once you've isolated the stage, re-run from just before it with -from and the relevant app-option changed, not the whole flow from scratch.
Command Checks & Actions
place_optRuns the full five-stage flow.
place_opt -from initial_drcRe-runs from a specific stage onward.
place_opt -to final_placeStops before a specific stage.
Healthy, Suspicious & Hard-stop Results
- Expected: each stage's log shows the operations it's documented to perform (e.g. initial_drc's log shows high-fanout-net synthesis and electrical DRC fixing, not timing optimization).
- Investigate: a stage's log shows activity that belongs to a different stage -- usually means an app-option intended for one stage is actually affecting another.
- Stop: -from/-to produces a design state that doesn't match any documented stage boundary -- re-run the full flow rather than trust a broken partial run.
Common Mistake
The Trap: Treating place_opt as an opaque single command and re-running the entire flow from scratch to fix a problem that only lives in one stage -- wasting runtime and losing legitimate progress from earlier stages.
What The Interviewer Is Testing
Whether you actually know place_opt has internal structure, not just that it "does placement" -- and whether you'd use -from/-to to debug efficiently instead of re-running everything.
Practical Example
Debug Scenario: A block's congestion looks fine after coarse placement but gets much worse after the full place_opt run. Instead of guessing, you run place_opt -to initial_drc, check congestion, then place_opt -from initial_drc -to initial_opto, check again -- and find initial_opto's timing optimization is the stage inserting the extra buffers that caused it.
Physical Design & Planning Handbook
Master ASIC Physical Design Planning & Floorplanning
Dive into 14 comprehensive chapters covering netlist sanity, FinFET grids, macro placement, power grids, CTS, and timing budgeting.
Continue practising