SI fixes change arrival times, so windows shift and other victims can start overlapping. A fix verified only on its own net can leave the design worse. A before-and-after table over all endpoints catches regressions.
before = {"e1": -0.020, "e2": 0.015, "e3": 0.040, "e4": 0.008, "e5": 0.120} # setup slack, ns
after = {"e1": 0.004, "e2": 0.010, "e3": 0.045, "e4": -0.006, "e5": 0.118}
fixed = sorted(e for e in before if before[e] < 0 <= after[e])
broken = sorted(e for e in before if before[e] >= 0 > after[e])
worse = sorted(e for e in before if after[e] < before[e] - 1e-9)
assert fixed == ["e1"] and broken == ["e4"]
assert worse == ["e2", "e4", "e5"]
wns_before, wns_after = min(before.values()), min(after.values())
assert wns_before == -0.020 and wns_after == -0.006
net_ok = len(broken) == 0
assert net_ok is False
print("PASS: fixed", fixed, "; newly broken", broken, "; slack worse on", worse, "; WNS", wns_before, "->", wns_after)Endpoint | Before (ns) | After (ns) | Verdict |
|---|---|---|---|
e1 | -0.020 | +0.004 | Fixed |
e2 | +0.015 | +0.010 | Slightly worse, still positive |
e3 | +0.040 | +0.045 | Slightly better |
e4 | +0.008 | -0.006 | Newly broken |
e5 | +0.120 | +0.118 | Slightly worse (2 ps), within noise |
The fix cleared e1, and the WNS improved from -0.020 to -0.006 ns, which looks like progress. But e4 went from +0.008 to -0.006 ns: the fix changed arrival times and e4 now overlaps with a different aggressor, or lost a speedup it relied on. The WNS is the same number as e4's slack, so the improvement hides the fact that a fresh violation has appeared. The summary row alone would have said 'better'; the endpoint table says 'one fixed, one broken'. e5 slipped by 2 ps, which is within analysis noise rather than a regression.
Verification compares slack for all endpoints in all scenarios, not just the targeted ones.
Newly broken endpoints are flagged and fixed before the ECO is accepted.
Small slack changes (a few picoseconds) are expected: noise in the analysis is not a regression.
The fix moved arrival times, so a window that previously did not overlap e4's victim now does, or a speedup that helped e4 disappeared.