Running everything after every change is safe but slow, and slow loops mean fewer iterations per day. Running too little misses breakage. The middle path is a table from change type to required checks, with the batch's needs computed as a union.
costs = {"timing": 6, "si": 4, "extraction": 3, "drc": 1, "lvs": 1, "equivalence": 2, "power": 1}
need = {
"swap": {"timing", "power"},
"buffer": {"timing", "si", "extraction", "drc", "power"},
"logic": {"timing", "si", "extraction", "drc", "lvs", "equivalence", "power"},
}
def batch_cost(changes):
checks = set().union(*(need[c] for c in changes))
return sorted(checks), sum(costs[k] for k in checks)
everything = sum(costs.values())
b1 = batch_cost(["swap", "swap", "swap"])
b2 = batch_cost(["swap", "buffer"])
b3 = batch_cost(["swap", "buffer", "logic"])
assert everything == 18
assert (b1[1], b2[1], b3[1]) == (7, 15, 18)
assert b1[0] == ["power", "timing"]
print("PASS: cost of a swap-only batch", b1[1], "h; with a buffer", b2[1], "h; with a logic change", b3[1], "h; everything", everything, "h")Batch | Checks needed | Cost (h) |
|---|---|---|
Three cell swaps | timing, power | 7 |
A swap and a buffer insertion | timing, SI, extraction, DRC, power | 15 |
A swap, a buffer and a logic change | all seven | 18 |
A batch of three swaps needs only 7 of the 18 hours. Add a buffer and it needs 15 hours; add one logic change and the batch needs everything. Mixing the swaps with the logic change costs 18 h against 7 + 18 = 25 h run separately, so mixing saves total hours; but it delays feedback on the swaps and makes breakage harder to isolate, while homogeneous batches give faster early feedback. The check list for each change type is the one from the ECO risk ladder; the costs are invented to show the arithmetic.
A written table from change type to required checks, agreed in advance.
Every batch labelled with its highest-risk change and the checks it triggered.
A periodic full run regardless of what was changed, to catch anything the table missed.
Union: timing 6, SI 4, extraction 3, DRC 1, LVS 1, power 1 = 16 hours; the swaps add nothing new.