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
  • Memory & Buses57
  • Advanced RTL28
  • Senior & Interview76
    • Low-Power RTL Hub
    • DFT and Scan Hub
    • Physical Awareness Hub
    • Waveform Debug Hub
    • STA and ECO Hub
    • RTL-to-Implementation Closure
    • DFT-Ready RTL
    • Capstone: Resilient Streaming Peripheral
    • Principal Design Review
    • Senior RTL Interview Questions & Model Answers
      • Interview: Combinational and Arithmetic
      • Interview: Sequential and Pipelines
      • Interview: FSM and Control
      • Interview: Timing and STA
      • Interview: CDC and Reset
        • A CDC review: what to check
        • Reset assertion vs release
        • Why an async FIFO uses Gray pointers
        • Pulse synchronizers and reset-domain crossings
      • Interview: Memories and Buses
      • Interview: Low-Power Design
      • Interview: Debug and ECO
      • Interview: Coding and Whiteboard
  • Glossary and Notation
Loading lesson

‹Interview: CDC and Reset
  1. Topics
  2. RTL Design
  3. Senior & Interview
  4. Senior RTL Interview Questions & Model Answers
  5. Interview: CDC and Reset
  6. A CDC review: what to check

Part 9 · Senior · Senior

A CDC review: what to check

How to review clock-domain crossings: classify each one, then match it to a synchroniser, Gray code, handshake, or FIFO.

On this page

    Why this matters

    "How do you review CDC?" separates people who know one synchroniser from people with a method. A bus run through per-bit two-flop synchronisers passes simulation and mixes old and new bits in silicon.

    After this lesson you can: walk a crossing list, classify each crossing as single-bit, multi-bit or stream, and name the structure and constraint for each.

    The question

    “How do you approach CDC in RTL review?” The interviewer is asking for a method, not a definition.

    A strong answer walks a crossing list: every signal between clocks, its class, its structure, and its constraint. The short answer names the classes: single-bit control, multi-bit values, and data streams.

    Model answer

    Classification comes first. The structure follows from the traffic shape.

    Crossing

    Structure

    Constraint to close

    Slow single bit (status, enable)

    Two-flop synchroniser on the destination clock (baseline).

    Scoped exception to the first stage only; keep interstage timing and short routing for settling and MTBF.

    One-cycle pulse

    From a fast or comparable clock: toggle synchroniser or handshake. A source pulse guaranteed to span at least three destination edges in every clock mode can use a 2FF plus edge detect (pulse lesson).

    As for a single bit, plus a minimum spacing between events.

    Counter or pointer stepping by 1

    Gray code plus one 2FF per bit (bus lesson).

    Bus skew and arrival bound below the fastest allowed source step.

    Single word (config, command)

    Four-phase handshake or held word with load pulse (handshake).

    Data settled before the earliest permitted capture and held through acknowledgement.

    Continuous stream

    Async FIFO with Gray pointers (async FIFO).

    Gray pointer skew bound; each word written before the pointer that publishes it can be seen.

    Read each row left to right: the traffic shape picks the structure, and the structure brings its own physical obligation.

    Asynchronous clock groups remove checks rather than bounding delay. Audit active exception precedence: a broad group or false-path exception may override the required max-delay checks in the right-hand column. Review structural CDC, implemented physical bounds and characterized MTBF separately; see crossing-specific constraints.

    Follow-ups

    Check yourself Why two flops and not one or three?

    Two is a common starting structure, not a frequency-based guarantee. Select depth from characterized device/PVT parameters, actual interstage settling time, asynchronous input activity, and the required system MTBF. Account for all crossings in the reliability budget. More stages add settling time and latency; inspect the implementation's MTBF report (see when to use three flops).

    Check yourself Two 500 MHz designs use two-stage synchronisers. Must they have the same reliability?

    No. Different cells, PVT, input toggle rates and interstage routing can produce different MTBF. Stage count and clock frequency alone are insufficient evidence.

    Check yourself What must never sit between the two flops?

    Logic of any kind. No branch may use the first flop output either. Only the second flop feeds destination logic.

    Check yourself The source toggles every destination cycle. Does a 2FF still work?

    No. The source must hold each value for more than one destination period, preferably two. Faster sources need a pulse synchroniser, a handshake, or a FIFO.

    Common wrong answers

    Common pitfall

    Putting a two-flop synchroniser on every bit of a related bus. The bits settle independently and the destination mixes old and new values.

    • “A FIFO fixes every crossing.” A FIFO for a single event wastes area and adds latency. A pulse synchroniser or a handshake fits.

    • “A false path constraint makes the crossing safe.” It only silences timing. The synchroniser structure is what makes it safe.

    Testbench

    A finite digital check of 20 slow toggles across two clocks. It checks delivery under the shown hold and reset assumptions.

    sync2.sv
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    // Two-flop synchroniser for one slow single-bit signal.
    module sync2 (
      input  logic clk_d,
      input  logic rst_d_n,
      input  logic d,
      output logic q
    );
      logic q1;
      always_ff @(posedge clk_d or negedge rst_d_n)
        if (!rst_d_n) begin q1 <= 1'b0; q <= 1'b0; end
        else begin q1 <= d; q <= q1; end
    endmodule
    

    Remember

    • Classify first: single-bit control, multi-bit value, or data stream. The structure follows the traffic shape.

    • Only the second flop feeds destination logic. A source must hold a value for more than one destination period.

    • A false-path or clock-group exception silences timing. It does not make a crossing safe.

    Rule of thumb: cross one bit with two flops, many bits with Gray code, a handshake or a FIFO, and never judge safety by the timing report alone.

    How this was checked

    Testbench Run with Icarus Verilog 13.0 (2026-10-16): prints PASS. It checks delivery across 20 slow toggles under the shown hold and reset assumptions. It does not model metastability and is not physical CDC signoff.

    Keep going

    • Practice: A unified CDC strategy: handshake, FIFO and synchronisers

    • Practice: Debugging multi-bit bus corruption without a handshake

    • Interview: run a mock interview on this topic

    Related topics

    • Metastability and synchronisation

    • Two-flop synchroniser

    Previous

    329 / 350

    Next: Reset assertion vs release

    Up next

    Up nextReset assertion vs release

    Sign in to save progress

    Practice this lessonReport an error

    See also

    • Why an async FIFO uses Gray pointers
    • Pulse synchronizers and reset-domain crossings