Structural analysis cannot see intent. A quasi-static crossing looks exactly like an unsynchronised one unless the intent is written into the setup: which signals are quasi-static, under what window, and where the proof lives. Waivers are that writing, which is why their hygiene decides whether they record engineering or hide bugs.
Each quasi-static signal needs a constraint entry that names the signal (never a bus wildcard that future signals inherit), states the stability window, and points at the proof: the enforcer plus the assertion from the previous lesson. The sketch below shows the shape in generic form, illustrative rather than tool syntax:
# Illustrative shape only, not tool syntax:
# signal cfg_live[15:0] is quasi-static: stable throughout RUN mode.
# Enforced by: write gating in mode_logic. Proven by: a_cfg_stable.
# Review with any change to the write path or the mode machine.Timing setup treats the path accordingly (no setup chase on a path that cannot change during use), but the entry above is what stops the next engineer from “cleaning up” the exception without understanding it.
Blanket waiver | What goes wrong |
|---|---|
“All crossings on this bus are static” | A new signal added to the bus inherits the waiver without its own proof. |
“Crossings between these clocks are false paths” | Every future crossing between the clocks, synchronised or not, is silently excused. |
“Waived: reviewed” with no evidence pointer | The next reviewer cannot tell what was reviewed, so the waiver is uncheckable and permanent. |
One waiver per inventory row or row group, naming the exact signals.
Every waiver carries the evidence pointer (assertion name, test result) and the stability window it depends on.
Every waiver has an owner and an expiry or re-review trigger, such as any change to the write path.
Waiver review is part of release signoff: re-confirm each one against the current RTL, because the design moved since it was written.
Strictly the trigger did not fire, but the release signoff still re-confirms it: the use window or the clocking may have shifted with the pipeline. Expiry triggers catch edits; release review catches side effects.