What does place.coarse.icg_auto_bound actually automate, and what's the default fanout cap on it?
From PDVerse PnR Interview Handbook · pdVerse Mentor Guide
Short Answer
place.coarse.icg_auto_bound, when true, auto-generates group bounds for ICGs and the sequential cells they drive -- created at the START of placement and removed at the END, excluding cells already in another group bound. place.coarse.icg_auto_bound_fanout_limit caps the fanout considered for an automatic bound, defaulting to 40 -- an ICG driving more than that many sequential cells doesn't get this automatic grouping treatment.
Technical Explanation
- place.coarse.icg_auto_bound, when true, auto-generates group bounds for ICGs and the sequential cells they drive.
- These automatic bounds are created at the START of placement and removed at the END -- a temporary structural aid during placement, not a permanent constraint left on the final design.
- Cells already in another group bound are EXCLUDED from this automatic ICG bounding -- it doesn't override an existing, more specific bound.
- place.coarse.icg_auto_bound_fanout_limit caps the fanout considered for an automatic bound, defaulting to 40 -- an ICG driving more sequential cells than that doesn't get this automatic treatment, presumably because grouping that many cells together would be too restrictive.
What To Check
- Warning sign: an ICG with a very large fanout doesn't show the expected auto-bound grouping behavior with its driven registers during placement.
- Inspect: check the ICG's actual fanout against the default 40-cell limit -- exceeding it means auto-bound doesn't apply, by design.
- Correct: if grouping is still desired for a high-fanout ICG despite exceeding the default limit, raise icg_auto_bound_fanout_limit explicitly rather than assuming something is broken.
Command Checks & Actions
set_app_options -name place.coarse.icg_auto_bound -value trueEnables automatic group-bound generation for ICGs and the sequential cells they drive during placement.
set_app_options -name place.coarse.icg_auto_bound_fanout_limit -value 60Raises the default 40-cell fanout cap if a specific high-fanout ICG still needs automatic bounding.
Healthy, Suspicious & Hard-stop Results
- Expected: ICGs with fanout under the configured limit show automatic group-bound behavior with their driven sequential cells during placement.
- Investigate: a high-fanout ICG's driven registers don't show expected clustering during placement -- check its fanout against icg_auto_bound_fanout_limit before assuming a configuration error.
- Stop: a design's ICG fanouts are being manually re-checked against the auto-bound limit repeatedly without ever adjusting the limit itself when a legitimate high-fanout case needs the grouping.
Common Mistake
The Trap: Assuming icg_auto_bound applies uniformly to every ICG regardless of fanout -- the default 40-cell limit means high-fanout ICGs are silently excluded unless the limit is explicitly raised.
What The Interviewer Is Testing
Whether you know the specific default fanout limit (40) and that it's a real, documented cap, not an unlimited automatic behavior.
Practical Example
Debug Scenario: An ICG driving 65 registers doesn't get the expected automatic group-bound treatment during placement, while a similar ICG driving 30 registers does. Checking place.coarse.icg_auto_bound_fanout_limit confirms the default 40-cell cap is why the higher-fanout ICG was excluded.
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