Why does setup timing slack (WNS/TNS) frequently degrade after Legalization, and how is it resolved?
From PDVerse PnR Interview Handbook · pdVerse Mentor Guide
Short Answer
Global placement is a somewhat idealized floating-point world — cells can overlap slightly and sit at fractional coordinates. Legalization is where reality hits: every cell has to snap onto a real, non-overlapping row site, and that snapping can shove cells noticeably far from where the timing-optimized global placement wanted them. In dense regions (say, 90% local utilization), several timing-critical cells are all competing for the same handful of legal sites, forcing the legalizer to displace some of them outward — sometimes 5 to 20 µm — just to resolve the overlap.
Technical Explanation
- Global placement is a somewhat idealized floating-point world — cells can overlap slightly and sit at fractional coordinates. Legalization is where reality hits: every cell has to snap onto a real, non-overlapping row site, and that snapping can shove cells noticeably far from where the timing-optimized global placement wanted them.
- In dense regions (say, 90% local utilization), several timing-critical cells are all competing for the same handful of legal sites, forcing the legalizer to displace some of them outward — sometimes 5 to 20 µm — just to resolve the overlap.
- That displacement isn't free: a 15 µm shove on a critical data-path net measurably increases wire resistance and capacitance (Steiner-tree distortion), which degrades the signal's transition time and downstream cell delay — this is exactly why a clean −50 ps global-placement report can collapse into a −450 ps violation right after legalization.
- Legalization can also flip a cell's orientation or effectively push a driver further from its receiver, both of which quietly add delay that wasn't in your global-placement timing snapshot.
- The fix isn't to re-run placement blindly — it's to give the legalizer less room to make bad decisions: cap target local density to roughly 65–70% during global placement so there's slack for legalization to work with, use
create_boundto fence critical timing groups so they can't wander far, and run legalization in a timing-aware mode (legalize_placement -timing_driven) so it actively protects critical nets instead of treating every cell equally.
Common Mistake
The Trap: Rerunning global placement with higher timing effort without addressing local density hotspots. The placer will keep clustering cells and the legalizer will keep spreading them apart.
Follow-up Question & Model Response
"How do you detect excessive cell displacement during legalization?"
Candidate Model Response: Use report_placement -displacement to check maximum and average displacement. If maximum displacement exceeds 15 um on critical path instances, local density constraints must be tightened.
Practical Example
Mitigating Legalization Displacement:
# Synopsys ICC2: Create soft placement bounds on critical timing path
create_bound -name BND_ALU_CRIT -boundary {{100 100} {250 250}} [get_cells u_alu/*]
# Run timing-driven legalization
legalize_placement -timing_driven
report_placement -displacementPhysical 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