What real problem does topological_ndr solve, and what's the actual sort order it enforces?
From PDVerse PnR Interview Handbook · pdVerse Mentor Guide
Short Answer
Without the level-based rule, post-CTS NDR application at different tree levels can be discontinuous -- an internal net at one level might get a heavier NDR than the root net feeding it, which is physically backwards. With cts.compile.topological_ndr enabled, NDRs are topologically sorted: Root NDR > Internal NDR > Sink NDR, ensuring the NDR weight actually decreases as you move from source toward leaves, matching real current/EM demand.
Technical Explanation
- Without the level-based rule, post-CTS NDR application at different tree levels can be discontinuous -- an internal net could end up with a heavier NDR than the root net feeding it, which is physically backwards for current/EM demand.
- cts.compile.topological_ndr, when enabled, sorts NDRs topologically: Root NDR > Internal NDR > Sink NDR -- ensuring NDR weight decreases monotonically from source toward leaves.
- This is implemented only during initial CTS, not as a general post-hoc fix -- it shapes how NDRs get assigned as the tree is first built, not something you apply after the fact to a tree that already has discontinuous NDRs.
- The underlying assignment rules feeding this: nets connected to a pure sink get sink NDR, nets connected to both a sink and intermediate cells get internal NDR, nets at root level until the branch point get root NDR.
Formula Or Decision Rule
Enforced order with topological_ndr enabled: Root NDR > Internal NDR > Sink NDR (heaviest near the source, lightest near the leaves).
What To Check
- Warning sign: post-CTS NDR inspection shows an internal net with a heavier NDR than the root net feeding it.
- Inspect: check whether cts.compile.topological_ndr was enabled BEFORE the initial CTS run, not applied afterward.
- Correct: if the tree already exists with discontinuous NDR assignment, this option won't retroactively fix it -- the tree likely needs to be rebuilt with the option enabled from the start.
Command Checks & Actions
set_app_options -list {cts.compile.topological_ndr true}Enforces Root > Internal > Sink NDR ordering during initial CTS.
report_clock_qor -type drc_violatorsCan surface issues stemming from NDR discontinuity indirectly via DRC violations.
Healthy, Suspicious & Hard-stop Results
- Expected: NDR weight decreases monotonically from root nets through internal nets to sink nets across the whole tree.
- Investigate: an internal net shows a heavier NDR than its feeding root net -- check whether topological_ndr was ever enabled for this tree's initial CTS run.
- Stop: topological_ndr is enabled on an already-built tree expecting retroactive correction -- it doesn't work that way; the tree needs rebuilding with the option set beforehand.
Common Mistake
The Trap: Applying cts.compile.topological_ndr after CTS has already built a tree with discontinuous NDR assignment, expecting it to retroactively fix the existing assignment -- it's implemented only during initial CTS, not as a post-hoc correction.
What The Interviewer Is Testing
Whether you know topological_ndr is an initial-CTS-only mechanism with a specific enforced order (Root > Internal > Sink), not a general-purpose NDR-consistency fixer you can apply at any stage.
Practical Example
Debug Scenario: Post-CTS NDR inspection on a tree finds an internal net with a heavier NDR assignment than the root net feeding it -- physically backwards. Checking the build script, cts.compile.topological_ndr was never enabled before the initial CTS run that built this tree, so the discontinuity was never prevented in the first place.
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