IntermediateQuestion 333 of 142Source PDF page undefined

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 Reference DiagramWhat do the different create_placement variants actually change about how coarse placement runs?
What do the different create_placement variants actually change about how coarse placement runs?, illustrating the physical design concept.

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

ICC2create_placement -timing_driven

Runs coarse placement with timing awareness built into the pass itself, rather than deferring all timing consideration to a later optimization stage.

ICC2create_placement -congestion -congestion_effort high

Runs 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

Dive into 14 comprehensive chapters covering netlist sanity, FinFET grids, macro placement, power grids, CTS, and timing budgeting.