IntermediateQuestion 335 of 142Source PDF page undefined

What do optimize_orientations and stream_place each actually change about how legalization moves cells?

From PDVerse PnR Interview Handbook · pdVerse Mentor Guide

Short Answer

place.legalize.optimize_orientations, when true, flips cells to reduce displacement -- sometimes a flipped orientation lands a cell on a legal site much closer than any unflipped position would. place.legalize.stream_place, when true, moves MANY cells a small amount each rather than one cell a long distance -- tunable via stream_effort and stream_effort_limit. Both target the same underlying goal (minimize disruptive displacement) through genuinely different mechanisms.

Technical Reference DiagramWhat do optimize_orientations and stream_place each actually change about how legalization moves cells?
What do optimize_orientations and stream_place each actually change about how legalization moves cells?, illustrating the physical design concept.

Technical Explanation

  • place.legalize.optimize_orientations, when true, flips cells to reduce displacement -- a flipped orientation can sometimes land a cell on a much closer legal site than any unflipped position would offer.
  • place.legalize.stream_place, when true, changes the STRATEGY of legalization itself: instead of moving one cell a long distance to reach a legal site, it moves many cells a small amount each -- distributing the disruption rather than concentrating it.
  • stream_place's behavior is tunable via place.legalize.stream_effort and place.legalize.stream_effort_limit, controlling how much of this distributed-movement strategy gets applied.
  • Both options target the same underlying goal -- minimizing disruptive displacement during legalization -- through genuinely different mechanisms: one changes a cell's orientation, the other changes the overall movement strategy.
  • Both settings are applied via set_app_options -name place.legalize.optimize_orientations -value true and set_app_options -name place.legalize.stream_place -value true -- naming the option alone does nothing without the actual command.

Common Mistake

The Trap: Assuming a large single-cell displacement during legalization is unavoidable -- both optimize_orientations (flip to find a closer site) and stream_place (spread movement across many cells) exist specifically to reduce exactly that outcome.

Follow-up Question & Model Response

"Why might stream_place's "many small moves" strategy sometimes be preferable to optimize_orientations' "flip to find a closer site" strategy, or vice versa?"

Candidate Model Response: optimize_orientations is a very localized fix -- it only helps if a flipped orientation genuinely has a closer legal site available, and does nothing otherwise. stream_place is a more global strategy that can help even when no single cell has an obviously better site, by redistributing the legalization burden across many cells -- the two aren't mutually exclusive and are often used together.

Practical Example

Debug Scenario: A legalization pass shows one cell displaced a very large distance to reach the nearest legal site. Enabling stream_place lets that large single displacement instead be distributed as many small moves across nearby cells, reducing the worst-case single-cell disruption.

Physical Design & Planning Handbook

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