IntermediateQuestion 334 of 142Source PDF page undefined

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 Reference DiagramHow do you control how aggressively congestion-driven restructuring runs during placement, and what's the depth_aware safeguard for?
How do you control how aggressively congestion-driven restructuring runs during placement, and what's the depth_aware safeguard for?, illustrating the physical design concept.

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_options invocation to actually take effect: set_app_options -name place.coarse.cong_restruct_effort -value high and set_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

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