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 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 trueandset_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
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