Closure time is limited, and fixing the worst path first is not always the best use of it. A fix that clears 800 endpoints beats a fix that clears one even if the one is worse. A simple ranking by cause and impact keeps the team focused.
Priority | Question | Example |
|---|---|---|
1 | Is it a constraint or clock error? | A missing generated clock, wrong uncertainty: fix before touching any path |
2 | Is there a shared cause across many endpoints? | A shared fanout net, a macro output, a clock skew region |
3 | What is the violation removed per unit of effort? | A buffer that clears 120 endpoints |
4 | What is the worst remaining path? | A genuinely hard path needing design change |
# Effort-efficiency view only (the systemic-cause rule above is applied first by hand):
# (name, endpoints cleared, total negative slack removed ns, effort units)
fixes = [("clock skew region", 800, 24.0, 8), ("fanout buffering", 120, 6.0, 2),
("resize macro output", 40, 3.5, 1), ("restructure worst path", 1, 0.4, 6)]
score = {n: round(tns / effort, 2) for n, ep, tns, effort in fixes}
ranked = sorted(score, key=score.get, reverse=True)
assert score == {"clock skew region": 3.0, "fanout buffering": 3.0, "resize macro output": 3.5, "restructure worst path": 0.07}
assert ranked[0] == "resize macro output" and ranked[-1] == "restructure worst path"
print("PASS: TNS removed per effort unit:", score)This listing is an effort-efficiency view only: it ranks TNS removed per effort unit after the systemic-cause rule (priorities 1-2) has been applied first by hand. The worst single path (restructure, 0.4 ns removed for 6 effort units) ranks last by this measure, while cheap high-impact fixes rank first. A clock skew region fix (24 ns of TNS) is systemic, so it is done early regardless of its efficiency score, because it may change the other numbers. Re-run after every large fix: the ranking changes as the landscape changes.
The closure plan states its ranking logic and re-ranks after each major fix.
Systemic causes are ruled out before path-by-path work begins.
Hard paths are escalated to design early (RTL or architecture change), not left to the end.
Check the net effect: the 120 setup fixes against 20 new hold problems, and whether those 20 are cheaply fixed. Count both checks before judging; a fix is evaluated on all checks.