A violating victim can be fixed in several ways: strengthen its driver, buffer it, space it from its aggressors, shield it, or reroute. They differ in effectiveness, in routing resources used, and in side effects. Applying them in a sensible order avoids over-fixing.
Fix | Effect on the victim | Typical cost or side effect |
|---|---|---|
Upsize the victim driver | Lower R: smaller delta and smaller glitch | Area, input capacitance on the previous stage |
Insert a buffer in the victim | Splits the coupled length; each part is held by a driver | Area, added cell delay |
Increase spacing to aggressors | Lower coupling capacitance | Routing resources; may need rerouting |
Shield with a grounded wire | Replaces coupling to the aggressor with coupling to ground | Tracks, extra ground capacitance |
Slow the aggressor | Smaller glitch, smaller delta | Aggressor's own timing |
Change layers | Different spacing and coupling rules | Resistance, vias |
needed = 25.0 # ps of delta to remove from the victim
fixes = { # name: (benefit in ps, cost in arbitrary units), illustrative and assumed additive
"upsize driver": (10.0, 1.0),
"buffer": (15.0, 2.0),
"spacing on 40% of length": (12.0, 3.0),
"shield": (25.0, 6.0),
}
ratio = {n: b / c for n, (b, c) in fixes.items()}
order = sorted(fixes, key=lambda n: -ratio[n])
assert order == ["upsize driver", "buffer", "shield", "spacing on 40% of length"]
chosen, gained, spent = [], 0.0, 0.0
for n in order:
if gained >= needed:
break
chosen.append(n)
gained += fixes[n][0]
spent += fixes[n][1]
assert chosen == ["upsize driver", "buffer"] and gained == 25.0 and spent == 3.0
print("PASS: order", order, "; chosen", chosen, "removing", gained, "ps at cost", spent)Ranked by benefit per cost, driver upsizing (10 ps per unit) comes first, then buffering (7.5), shielding (4.2) and spacing (4.0). Two fixes reach the 25 ps target at a cost of 3 units; shielding alone also reaches it but costs 6. The greedy order gives a cost-effective set, not a guaranteed minimal one: it can overshoot the target, and the benefits are assumed additive here for clarity, which is not true in practice. After each fix the analysis must be rerun, because the next fix's benefit changes.
Fixes are applied in order of benefit per cost, with a record of what each achieved.
Fixes that use scarce resources (routing tracks, shielding) are last unless the cheaper ones are exhausted.
Every fix is followed by a rerun of timing and SI, not just the targeted net.
Driver upsizing: it delivers 10 ps at a cost of 1 unit, the best ratio, and reaches the target alone.