How do you control how aggressively congestion-driven restructuring runs during placement, and what's the depth_aware safeguard for?
From PDVerse PnR Interview Handbook · pdVerse Mentor Guide
Short Answer
place.coarse.cong_restruct_effort (low|medium|high|ultra, default medium) sets how aggressively the tool restructures nets to reduce congestion during coarse placement. place.coarse.cong_restruct_depth_aware, when true, limits path depth growth to 3 logic levels -- a safeguard against restructuring so aggressively that it adds excessive logic depth to a path, potentially trading a congestion win for a new timing problem.
Technical Explanation
- place.coarse.cong_restruct_effort (default medium) sets how aggressively the tool restructures nets to reduce congestion during coarse placement -- options low/medium/high/ultra represent genuinely different effort/runtime tradeoffs, not just a label.
- By default, the tool restructures nets to reduce congestion during create_placement (except with -timing_driven) and during the initial_place stage of place_opt.
- place.coarse.cong_restruct_depth_aware, when true, limits path depth growth to 3 logic levels -- a real safeguard.
- The reasoning: restructuring for congestion can add logic depth to a path (more stages inserted to relieve congestion), and unconstrained depth growth risks trading a congestion win for a new timing problem -- depth_aware caps that risk.
- Both options need to be wrapped in the real
set_app_optionsinvocation to actually take effect:set_app_options -name place.coarse.cong_restruct_effort -value highandset_app_options -name place.coarse.cong_restruct_depth_aware -value true.
Common Mistake
The Trap: Enabling aggressive (high/ultra) congestion restructuring effort without also considering cong_restruct_depth_aware -- a very aggressive restructuring pass with no depth cap risks introducing timing problems in the name of fixing congestion.
Follow-up Question & Model Response
"Why would restructuring specifically risk adding logic depth as a side effect of relieving congestion?"
Candidate Model Response: Because one way to relieve congestion is to reroute a net's logical structure through additional intermediate cells rather than direct connections -- which reduces the immediate routing demand at the cost of adding stages (and therefore combinational depth) to whatever path passes through that logic.
Practical Example
Debug Scenario: A congested block placed with cong_restruct_effort set to ultra (and depth_aware left at its default) shows a new timing violation on a path that wasn't previously critical. Enabling place.coarse.cong_restruct_depth_aware caps how much logic depth restructuring is allowed to add, preventing this specific side effect.
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