Method choice is easier to judge on a population than on single paths. The comparison below builds twenty paths with a deterministic rule, so everyone gets the same numbers: stage counts of 3, 10, 17 and 24 repeated, and every fifth path containing two noisy cells.
import math
paths = []
for i in range(20):
n = 3 + (i * 7) % 28
noisy = 2 if i % 5 == 0 else 0
mean = 0.10 * n
sigmas = [0.005] * (n - noisy) + [0.03] * noisy
budget = round(mean * 1.10 + 0.02, 3) # nominal slack is 10% of the mean plus 0.02 ns
paths.append((i, n, mean, sigmas, budget))
def flat(p): return p[4] - p[2] * 1.15
def depth(p): return p[4] - p[2] * (1 + 0.15 / math.sqrt(p[1]))
def stat(p): return p[4] - (p[2] + 3 * math.sqrt(sum(s * s for s in p[3])))
def summary(f):
sl = {p[0]: f(p) for p in paths}
bad = sorted(i for i, s in sl.items() if s < 0)
return bad, round(sum(sl[i] for i in bad), 3), round(min(sl.values()), 3)
bf, bd, bs = summary(flat), summary(depth), summary(stat)
assert len(bf[0]) == 15 and bf[1] == -0.975 and bf[2] == -0.1
assert bd == ([], 0, 0.024)
assert bs[0] == [0, 5] and bs[1] == -0.092 and bs[2] == -0.078
print("PASS: flat", len(bf[0]), "violations; depth-based", len(bd[0]), "; statistical", bs[0], "TNS", bs[1], "WNS", bs[2])Method | Violating paths (of 20) | TNS (ns) | WNS (ns) |
|---|---|---|---|
Flat 1.15 | 15 | -0.975 | -0.100 |
Depth-based | 0 | 0 | +0.024 |
Statistical (3 sigma) | 2 (paths 0 and 5) | -0.092 | -0.078 |
Flat derating fails fifteen paths, essentially every path of ten stages or more, for a TNS of -0.975 ns. Depth-based derating passes all twenty with 0.024 ns of worst slack. Statistical analysis flags only the two paths that contain noisy cells and that have the least slack to spare: path 0 (three stages, two of them noisy) and path 5 (ten stages, two noisy). Of the four noisy paths the other two have enough slack to absorb their extra sigma. The most severe flag, path 0, is a three-stage path: depth-based analysis gives it +0.024 ns, statistical analysis -0.078 ns. A table indexed by depth cannot see that.
Observation | Consequence |
|---|---|
Flat is far more pessimistic than the others on deep paths | Use it for early work, not for final signoff unless the process requires it |
Depth-based passes everything here | Its result is only as good as its assumption that cells on the path are typical |
Statistical finds the two noisy-cell paths | Fix the noisy cells (stronger driver, shorter wire), not the whole path |
A comparison like this on real data before the signoff method is fixed, with the paths each method disagrees on reviewed by hand.
The reasons for disagreement are classified: depth, cell identity, correlation.
Whichever method is chosen, the paths that only a stricter method flags are listed as known risks.
Path 0 has three stages, so the table gives it a derate for three stages. It cannot see that two of the three cells have large sigma (0.03 ns each); the statistical method uses those sigmas and finds a 3-sigma delay larger than the budget.