Most CDC bugs are decided before any synchroniser is drawn: by where the design is cut into domains, how clocks are gated and muxed, what crosses each interface, and which signals are allowed to be static. This section collects the design rules that keep those decisions clean, so that signoff has a handful of well-defined crossings to check instead of dozens of ad-hoc ones.
Lesson | After it you can... |
|---|---|
Place a domain cut where it costs least and price what each cut costs. | |
Launch every crossing from a flop and explain why a combinational crossing is a violation. | |
Replace scattered signals with fewer, wider, well-defined crossings. | |
Keep the crossing table that signoff is built on. | |
Describe the safe mux structure and show a simulation with no runt pulses. | |
Say when a gated clock shares its parent domain and when the enable path is a crossing. | |
Keep handshakes alive when a clock may stop. | |
Order resets and state correctly across a clock-source change. | |
Say what the integrator must know and document about crossings inside hard IP. | |
Pick handshake, shadow register, or qualified capture for each direction. | |
Write an interface specification that signoff can be set up from. | |
Walk the integration and handoff checklists without missing a row. | |
Design signals so they are provably static in a mode, with sequencing rules. | |
State the stable-before-use proof obligation and assert it. | |
Communicate quasi-static intent to the checks without blanket waivers. | |
Change configuration while running through safe sequencing patterns. |
Partitioning: name the domains and the gated-clock relationships first, then list the macro boundary signals, and only then choose protocols. The section order is the triage order.