What do the different create_placement variants actually change about how coarse placement runs?
From PDVerse PnR Interview Handbook · pdVerse Mentor Guide
Short Answer
create_placement (plain) does coarse placement and scan chain optimization if SCANDEF is present. -timing_driven adds timing awareness to the coarse pass. -buffering_aware_timing_driven additionally considers high-fanout/long nets and buffers to be added during placement itself. -congestion with -congestion_effort high biases toward routability. -congestion_driven_restructuring runs several iterations of placement plus restructuring together. -floorplan is used specifically in the RP (relative placement) plus hard-macro flow.
Technical Explanation
- create_placement (plain) performs coarse placement and, if SCANDEF is present, scan chain optimization -- the baseline behavior.
- -timing_driven adds timing awareness to the coarse placement pass itself, rather than leaving all timing consideration to a later stage.
- -buffering_aware_timing_driven goes further: it additionally considers high-fanout/long nets and buffers that will need to be added, factoring that into placement decisions up front.
- -congestion (with -congestion_effort high for maximum bias) explicitly prioritizes routability over other objectives.
- -congestion_driven_restructuring runs several iterations of placement PLUS restructuring together, rather than a single placement pass.
- -floorplan is used specifically in the relative-placement (RP) plus hard-macro flow -- a distinct use case from the general placement variants above.
What To Check
- Warning sign: a design placed with plain create_placement shows more timing violations or congestion than expected for its complexity.
- Inspect: check which create_placement variant was actually used -- plain coarse placement doesn't factor in timing or congestion awareness the way the specialized variants do.
- Correct: re-run with the variant matched to the design's actual risk (-timing_driven for timing-critical blocks, -congestion for high-density blocks) rather than always defaulting to plain create_placement.
Command Checks & Actions
create_placement -timing_drivenRuns coarse placement with timing awareness built into the pass itself, rather than deferring all timing consideration to a later optimization stage.
create_placement -congestion -congestion_effort highRuns coarse placement with maximum bias toward routability, appropriate for high-density blocks at real congestion risk.
Healthy, Suspicious & Hard-stop Results
- Expected: the create_placement variant used matches the block's actual risk profile (timing-critical, congestion-critical, or macro/RP-heavy).
- Investigate: a block placed with the plain (no-flag) create_placement shows problems a specialized variant was specifically built to prevent -- worth re-running with the matched variant.
- Stop: every block in a design is placed with the same create_placement variant regardless of its individual risk profile, with no consideration of which flags actually apply.
Common Mistake
The Trap: Always using plain create_placement (or always defaulting to one specific variant) regardless of a block's actual risk profile -- different variants exist specifically because different blocks have different dominant risks.
What The Interviewer Is Testing
Whether you know the real behavioral differences between the create_placement variants, not just that several flags exist.
Practical Example
Debug Scenario: A high-density block placed with plain create_placement shows significant routing congestion. Re-running with -congestion -congestion_effort high explicitly biases the coarse placement toward routability, trading some other objective (potentially timing margin) for a more routable result.
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