Skip to content
DenseChip
Learn
PracticeCode labInterview

DenseChip

Navigate

Menu

LearnPracticeCode labInterview

Tools

All toolsSV editorCode repoResume
DenseChip

Practice, courses, and chip-design tools in one focused workspace.

LearnPracticeCode labInterviewToolsLearning paths

© 2026 DenseChip

AboutContactPrivacyTerms
Skip to lesson

Course contents

  • RTL Foundations36
  • Combinational Design25
  • Sequential Design27
  • FSM & Control27
  • Timing & Clocking39
  • Reset & CDC34
    • Reset Architecture
    • Metastability and Synchronisation
    • Asynchronous FIFO
    • CDC Protocols
    • Reset Domain Crossing
    • CDC Verification
      • Rules
      • Simulation
      • Assertion Patterns
      • FIFO Tests
      • Signoff
      • Reading a CDC Report
      • A CDC Mini Project
  • Memory & Buses57
  • Advanced RTL28
  • Senior & Interview76
  • Glossary and Notation
Loading lesson

‹CDC Verification
  1. Topics
  2. RTL Design
  3. Reset & CDC
  4. CDC Verification
  5. Rules

Part 6 · Reset & CDC · Intermediate

Rules

Structural CDC rules for synchronisers, multi-bit crossings, resets and enables.

On this page

    Why this matters

    A CDC tool accepts only structures it recognises, so a working custom synchroniser still shows as a violation. A clean report is not a proof either: the tool checks structure, not whether your handshake loses a word.

    After this lesson you can: read a CDC report (violations, cautions, info), decide between a fix and a waiver, and state what a clean report does not prove.

    Synchroniser structure rules

    A CDC tool recognises approved structures. Anything else is a violation.

    Each rule below names the violation, the reason and the fix.

    Rule

    Violation looks like

    Why it is a problem

    Fix

    Every crossing is synchronised

    A flop in clock A feeds a flop in clock B directly

    Metastability reaches logic

    Add a 2FF, handshake or FIFO

    No combinational logic before a synchroniser

    Source logic (AND/OR of flops) feeds the 2FF

    Glitches can be sampled

    Register the signal in the source domain first

    No logic between synchroniser flops

    Gate between flop 1 and flop 2

    Settling time reduced

    Remove it

    No fan-out of the first synchroniser flop

    Flop 1 also feeds other logic

    Metastable value used

    Use only the last flop

    Multi-bit crossings are coded safely

    N bits each through its own 2FF

    Bits may be sampled at different times

    Gray code, handshake or FIFO

    No reconvergence

    Two synchronised copies of related signals combine in the destination

    They may arrive on different cycles

    Synchronise once and share, or send as a single word

    Control and data are separated correctly

    Data crosses before its control signal is stable

    Data can be captured early

    Hold data until the synchronised control has been seen

    Reset crossings are synchronised

    Async reset used raw in a domain

    Recovery/removal violations

    Reset synchroniser per domain

    Clock enables do not cross domains unsynchronised

    An enable from domain A gates a flop in B

    Same as a data crossing

    Synchronise the enable

    Two rules, cycle by cycle

    Two rules in the table are about timing that a schematic does not show: logic in front of a synchroniser, and reconvergence. Each picture below is a small simulation.

    Each slot is 0.5 ns, from 8.0 ns. y_comb is a & b straight from the source flops; q_d is the first synchroniser flop fed by it; y_reg is the same AND registered in the source domain.

    • Slot 4: a rises. The falling b reaches the gate 1 ns later (slot 6), so y_comb is high for slots 4 and 5, although a & b is 0 before and after the edge.

    • Slot 5: a destination edge lands inside the glitch, and q_d captures 1: a false event.

    • All slots: y_reg stays 0. A flop changes only at its clock edge, so the registered signal cannot glitch. That is the fix in the table.

    Each slot is one destination clock cycle. s0 and s1 are the outputs of two separate two-flop synchronisers, and sel_d is {s1, s0}.

    • Slot 2: both source bits change together, from 01 to 10. Bit 0 arrives before the next destination edge; bit 1's longer path arrives 0.5 ns after it.

    • Slot 3: s0 has fallen but s1 has not yet risen, so sel_d reads 00: a value the source never held.

    • Slot 4: s1 catches up and sel_d is 10. Any logic that decoded 00 in slot 3 has already acted on it.

    Reading the report

    • Violations are crossings without a recognised structure. Each needs a fix or a justified waiver.

    • Cautions are crossings that look right but the tool cannot prove. Review each one and waive with a reason when it is correct.

    • Info items list the safe crossings the tool recognised. A missing entry means the tool did not see the intended structure.

    • Waivers carry a reason, an owner and a review date, and live under version control.

    Tip

    Name synchroniser modules and instances consistently (u_sync_*, cdc_*). Then the tool can be told which modules are approved synchronisers, and unrecognised custom structures stand out immediately.

    Common mistakes

    Common pitfall

    A clean CDC report is not a proof. The tool checks structure; it does not check that your handshake protocol never loses a word or that Gray pointers come from flops with the right constraints. The other layers are still needed.

    Check yourself Why does the tool flag combinational logic in front of a 2FF even though the logic is simple?

    Logic can produce brief glitches when its inputs (flops in the source clock) change at slightly different times. A glitch landing on the sampling edge is captured as a real pulse. A flop in the source domain between the logic and the synchroniser removes the glitches.

    Remember

    • A violation needs a fix or a justified waiver. A caution needs review. A missing info entry means the tool did not see the intended structure.

    • A waiver carries a reason, an owner and a review date, under version control.

    • Logic in front of a synchroniser can glitch on the sampling edge, so register in the source domain first.

    Rule of thumb: name synchroniser modules consistently, so the tool knows the approved ones and custom structures stand out.

    Keep going

    • Interview: run a mock interview on this topic

    Related topics

    • Simulation

    • Reading a CDC report

    Previous

    182 / 350

    Next: Simulation

    Up next

    Up nextSimulation

    Sign in to save progress

    Practice this lessonReport an error

    See also

    • Assertion Patterns
    • FIFO Tests
    • Signoff
    aby_combclk_dq_dy_reg
    Logic in front of a synchroniser: a and b change at the same source edge, a & b glitches high for 1 ns, and the destination edge inside the glitch captures a 1 that the source never meant
    clk_dsel_s0110s0s1sel_d010010
    Reconvergence: sel_s goes from 01 to 10, bit 0 reaches its synchroniser before the destination edge and bit 1 just after, so the recombined sel_d shows 00 for one cycle