"A late functional ECO removed a gate level in one cone and added a gate level of new logic on a deeper cone, and the next run showed 214 hold violations in the fast corners and 31 setup violations in the slow corners, with 60 hours to tape-out. I first classified the change: a logic change, so it needs the full verification set including equivalence. Then I screened the hold endpoints by setup-plus-hold slack: 196 fit delay insertion, 18 do not, because delay at the endpoint would trade the hold violation for a setup violation. For those, 12 can take delay on the short branch only, ahead of the point where short and long paths merge, and 6 need the logic restructured to narrow the spread between longest and shortest paths. I would not waive hold: a fast-corner hold failure is a chip failure, and frequency does not fix it. The plan is three batches, each followed by a five-hour fast loop, then two 18-hour full runs: 51 of the 60 hours, with a nine-hour buffer. I will report the 18 structural cases and the schedule to the team now, because they carry the risk."
Step | Sentence |
|---|---|
Assumption | A logic change needs the full set; the violations are real |
Mechanism | A removed gate level shortened minimum paths (hold); an added gate level lengthened maximum paths elsewhere (setup); delay at the endpoint only trades setup for hold |
Trade-off | Endpoint delay costs setup slack, short-branch delay costs area, restructuring costs equivalence checking time |
Evidence | The sum screen, short-branch delay margins per corner, full-run summaries and the equivalence result |
Lead with what you can do, then with what you cannot, then with what you need.
Give a number for the risk (18 structural endpoints, 9 spare hours), not a feeling.
Name the waiver you refuse and the one thing that would change your mind (evidence that the path cannot occur (a proven false or static path), not evidence that the slack is small).
plan_hours, left = 51, 60
spare = left - plan_hours
structural = 18
assert spare == 9 and structural == 12 + 6
message = f"{structural} structural endpoints; {spare} h spare of {left} h"
assert message == "18 structural endpoints; 9 h spare of 60 h"
print("PASS:", message)A hold violation in the fast corner is not repaired by slowing the clock, so a waiver would ship a failure mode that frequency cannot fix.