The summary is the first thing read in every closure meeting. It is only useful if you can turn its numbers into hypotheses: a high endpoint count suggests a shared cause, a deep WNS with a low count suggests a few hard paths, a growing TNS with constant WNS suggests creeping degradation.
Pattern in the summary | Likely meaning | First check |
|---|---|---|
Many failing endpoints, small WNS | Systemic: clock uncertainty, constraint, derate | Constraints and clock model |
Few failing endpoints, large WNS | A handful of hard paths | Each path's breakdown |
WNS unchanged, TNS shrinking | Progress on many paths, worst still open | Is the worst path structurally limited? |
WNS improving, TNS growing | Fix moved violations around | What changed in the other groups |
Group suddenly empty | A clock or constraint was lost | Clock audit |
run_a = {"clk_core": (-0.05, -0.20, 6), "clk_io": (-0.40, -0.67, 3)}
run_b = {"clk_core": (-0.05, -0.05, 1), "clk_io": (-0.25, -0.80, 7)}
def delta(a, b): return tuple(round(y - x, 2) for x, y in zip(a, b))
changes = {g: delta(run_a[g], run_b[g]) for g in run_a}
assert changes == {"clk_core": (0.0, 0.15, -5), "clk_io": (0.15, -0.13, 4)}
# clk_io: WNS better by 0.15 but TNS worse by 0.13 and 4 more failing endpoints: moved violations around
print("PASS: run-to-run change (WNS, TNS, FEP):", changes)Between the two runs clk_core improved (five fewer failing endpoints, TNS better by 0.15) while clk_io's WNS improved by 0.15 ns but its TNS worsened and four more endpoints fail: a fix helped the worst path and damaged others. Looking at WNS alone would call this progress.
Run-to-run comparisons show all three numbers per group, and the comparison states the inputs that changed.
A group whose WNS improves but whose count or TNS worsens triggers a look at what the fix displaced.
Hold and setup summaries are reviewed side by side; a setup fix must not worsen hold.
Many paths were fixed; the worst path remains. That is real progress even though WNS did not move, so a TNS and count view is needed alongside WNS.