IntermediateQuestion 138 of 222

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

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.

PnR Flow Mentor Guide

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.

See what's inside the bundle
PnR Flow Physical Design Mentor Guide โ€” eight chaptersPnR Flow Mentor GuideEight chapters, library setup through to stream-out.