What specific failure mode does the nworst skew framework in multithreaded CTS fix, and why does it happen in the first place?
From PDVerse PnR Interview Handbook · pdVerse Mentor Guide
Short Answer
MTCTO (multithreaded CTS) minimizes global skew -- the gap between the longest and shortest clock path. If optimization stalls on the shortest path specifically, other paths remain under-optimized, because the algorithm's attention is consumed trying to fix the one extreme rather than distributing improvement across the whole distribution. cts.optimize.enable_nworst_skew_optimization addresses this by considering more than just the single worst-case pair.
Technical Explanation
- MTCTO minimizes global skew, defined as the gap between the longest and shortest clock path in the tree.
- The failure mode: if optimization stalls trying to fix the shortest path specifically, other paths remain under-optimized, because the algorithm's effort is consumed on one extreme case.
- This happens because global-skew optimization, by definition, is driven by the worst-case pair -- and if that pair is hard to improve further, the optimizer can get stuck there while genuinely fixable paths elsewhere go untouched.
- cts.optimize.enable_nworst_skew_optimization addresses this by considering multiple worst paths rather than fixating on the single extreme pair.
Formula Or Decision Rule
Default global-skew optimization can stall on the single shortest path; nworst skew optimization considers multiple worst paths instead of fixating on one extreme.
What To Check
- Warning sign: MTCTO reports skew optimization has converged, but several individual leaf-to-leaf skew values still look worse than expected.
- Inspect: check whether the reported global skew is being driven by a single stubborn worst-case pair that's masking under-optimization elsewhere.
- Correct: enable cts.optimize.enable_nworst_skew_optimization and re-run to see whether previously-stalled paths improve.
Command Checks & Actions
set_app_options -name cts.optimize.enable_nworst_skew_optimization -value trueConsiders multiple worst paths instead of the single global worst pair.
report_clock_qor -type local_skewReports worst local skew per group, useful for spotting paths the global-skew view alone would hide.
Healthy, Suspicious & Hard-stop Results
- Expected: local skew improves broadly across the tree after enabling nworst skew optimization, not just at the single previously-worst pair.
- Investigate: global skew looks converged, but report_clock_qor -type local_skew shows several paths still far from optimal -- a sign the optimizer may have stalled on one extreme.
- Stop: nworst skew optimization is enabled and runtime increases substantially with no measurable local-skew improvement -- re-evaluate whether this specific design actually has the stall pattern this option addresses.
Common Mistake
The Trap: Assuming a stalled global-skew optimization means the whole tree is near-optimal, when it may actually mean the optimizer is stuck on one hard-to-fix extreme path while other, genuinely improvable paths are left alone.
What The Interviewer Is Testing
Whether you understand WHY global-skew optimization can stall (fixation on one extreme pair) and what nworst skew optimization specifically changes about that.
Practical Example
Debug Scenario: A large clock tree's global skew metric looks converged, but report_clock_qor -type local_skew shows a cluster of paths with meaningfully worse skew than the rest. Enabling cts.optimize.enable_nworst_skew_optimization and re-running lets the optimizer address that cluster instead of continuing to fixate on the single global worst-case pair.
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