Constraints are design intent written formally, so they are reviewed formally: every exception is checked against the crossing inventory, every bound against its protocol argument, and every change against the previous revision. A constraint review is the meeting where timing and CDC signoff shake hands — timing confirms the numbers are met, CDC confirms the numbers mean something.
List every asynchronous-group declaration and every false path touching a crossing, straight from the constraint sources — not from anyone's memory of them.
For each exception, find the crossing or crossings it releases, and demand the structural evidence: synchroniser, handshake, FIFO, or quasi-static qualification.
For each datapath delay bound, demand the protocol argument and check the bound is actually met in timing.
Diff the constraints against the previous signed-off revision and review every added, removed, or retargeted line; unchanged lines keep their previous approval.
Record the outcome per exception: accepted with evidence, accepted with a waiver and expiry, or rejected with an owner and a date.
Mistake | What it looks like | Why it is dangerous | How the review catches it |
|---|---|---|---|
Blanket false path | A whole clock pair or bus released with one broad statement | Future crossings inherit silence unreviewed | Require narrow, per-crossing statements; reject pair-wide releases |
Missing bound on a bus | Gray pointer or bus with synchronisers but no delay limit | Skew tears the value while every check passes | Cross-check the inventory: every multi-bit crossing needs a bound or a written reason |
Stale exception | Exception names hierarchy or signals that no longer exist | The intended path is unchecked under its new name | Diff constraints on every ECO; unresolvable targets fail the review, not the run |
Wrong relationship | Related clocks declared asynchronous, or async clocks left related | Real timing unmet, or floods of spurious crossings | Compare every declaration against the architecture clock diagram |
Bound without structure | A delay limit on a path with no synchroniser | A fast path mistaken for a safe one | Structural evidence is required before any bound is accepted |
Treats it as a new exception: finds the crossing it now releases, demands the structural evidence again, and records a fresh outcome. A retarget is a new claim, not a carried-forward approval.
Which three crossings lack a bound, and where is the written reason? The default assumption is a missing bound, and the burden is on the owner to show otherwise.