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, part of the 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.
PnR Flow Mentor Guide
Master the Physical Design Implementation Flow
Read the complete 8-chapter PnR Flow Mentor Guide free on the web โ library setup through placement, clock tree synthesis, routing, chip finishing, hierarchical implementation, and ECO, all the way to stream-out.
Offline PDF Bundle
Want all 1109 questions offline?
Get the complete 4-book PDF bundle (PnR, STA, MMMC, Low Power) with a clickable table of contents - no ads, no internet needed.

Continue practising