A real design has millions of coupled pairs. SI analysis applies thresholds to ignore the ones that cannot matter: very small coupling, or very small delta. These save run time, but each threshold hides a total. The hidden total must be measured, not assumed negligible.
# One victim with ten aggressors: (coupling fF, delta ps if counted)
aggs = [(3.2, 6.1), (1.8, 3.0), (1.2, 2.0), (0.8, 1.3), (0.6, 0.9), (0.4, 0.6), (0.3, 0.5), (0.25, 0.4), (0.2, 0.3), (0.15, 0.2)]
def hidden(min_coupling):
shown = [d for c, d in aggs if c >= min_coupling]
dropped = [d for c, d in aggs if c < min_coupling]
return round(sum(shown), 2), round(sum(dropped), 2), len(dropped)
assert hidden(0.0) == (15.3, 0.0, 0)
assert hidden(0.5) == (13.3, 2.0, 5)
assert hidden(1.0) == (11.1, 4.2, 7)
shown, dropped, n = hidden(0.5)
assert round(dropped / (shown + dropped), 3) == 0.131
print("PASS: with a 0.5 fF threshold", n, "aggressors are hidden, worth", dropped, "ps (", round(100 * dropped / (shown + dropped), 1), "% of the total )")Minimum coupling kept | Shown (ps) | Hidden (ps) | Aggressors hidden |
|---|---|---|---|
none | 15.3 | 0.0 | 0 |
0.5 fF | 13.3 | 2.0 | 5 |
1.0 fF | 11.1 | 4.2 | 7 |
Ten aggressors total 15.3 ps. A 0.5 fF threshold hides five of them, worth 2.0 ps (13% of the victim's total); a 1.0 fF threshold hides seven, worth 4.2 ps (27%). Most are individually small (the 0.8 fF aggressor is still worth 1.3 ps), but many small ones add up, which is why report headers should state the hidden total for every threshold. Some flows compensate by adding the hidden total back as a margin.
Filter | What it removes | Risk |
|---|---|---|
Minimum coupling | Weakly coupled neighbours | Many small ones add up |
Minimum delta | Aggressors with a small effect | Same, per victim |
Window overlap | Aggressors that cannot switch together | Windows move after fixes |
Noise threshold | Glitches well below tolerance | Margins of critical receivers |
Every threshold is documented, with the hidden total on the worst victims.
Thresholds are the same in implementation and signoff, or the difference is in the margin ledger.
Nets near the thresholds are spot-checked: they flip into view after small changes.
The aggressors below 0.3 fF: 0.25 (0.4 ps), 0.2 (0.3 ps) and 0.15 (0.2 ps), total 0.9 ps.