FREE — INTERVIEW QUESTIONS

CDC interview questions, with worked answers, RTL and numericals

90+ free clock domain crossing questions, from metastability and synchronizers to async FIFOs, reconvergence, RDC and silicon debugging. Includes 18 worked answers with code, 8 solved numericals, a CDC tool report walkthrough and an MTBF calculator.

550+ CDC Interview Questions ebook cover
CDC INTERVIEW QUESTIONS EBOOK · 580 QUESTIONS · 27 CHAPTERS

Get the full CDC question bank, every question answered

580 questions with interview-ready answers and tips, 20 coding exercises with solutions, 25 solved numericals and 30 debugging scenarios.

INSTANT PDF DOWNLOAD · 12 FREE PREVIEW PAGES
See the ebook

Clock domain crossing bugs are some of the hardest in chip design: they pass RTL simulation, then show up as rare hangs in the lab or in the field. That's why CDC appears in RTL, verification, SoC, FPGA and even STA interviews, and why interviewers keep asking "and then what?" after "use two flops".

This page is built around that. Start with the formula sheet, the MTBF calculator and the technique guide, browse 50 questions across ten topics, then work through the worked answers, numericals and the CDC report walkthrough. Try each one aloud, or on paper for the coding ones, before opening the answer.

HOW IT'S ASKED

Where CDC shows up in an interview

LEVEL 1

Fundamentals & single bits

Metastability, MTBF, why two flops, same-frequency trick questions, pulses into slower domains. Often with a quick code-writing task: a synchronizer or a safe edge detector.

LEVEL 2

Multi-bit schemes & FIFOs

Why not bit by bit, handshakes, MUX-enable, Gray code, drawing the async FIFO and its flags, and sizing it. This is the core of most RTL and DV rounds.

LEVEL 3

Signoff & debugging

Reconvergence, RDC, constraints, waivers, CDC tool reports, metastability injection, and "the chip hangs once a week at high temperature". They're testing method.

HOW TO ANSWER

Six habits that make CDC answers land

01

Classify the crossing first

Level or pulse? One bit or many? Occasional or streaming? Related or asynchronous clocks? The technique follows from the answers, so say them aloud.

02

Synchronize control, hold data

The universal recipe for multi-bit data: hold the bus stable and synchronize a single qualifier, or use Gray code so only one bit ever changes.

03

Talk in MTBF, not "safe"

Synchronizers lower the failure rate, they don't remove it. Saying how resolution time, frequency and stage count change MTBF is a strong signal.

04

Don't forget the source register

Glitches from combinational logic before a synchronizer can be captured as real pulses. Always drive a crossing from a flop in the source domain.

05

Separate STA from CDC

Constraints control timing analysis; they don't make a crossing safe. Clock groups for async clocks, bounded max-delay for Gray buses, real synchronizers in RTL.

06

Say how you'd verify it

Structural CDC tool, reviewed waivers, assertions on protocols, metastability injection in simulation, and a check that implementation didn't break the synchronizers.

FORMULA SHEET

Every CDC number you'll be asked to work out

The relationships behind synchronizers, handshakes and FIFOs.

MTBFMTBF = etr/τ / (T0 · fclk · fdata)τ and T0 are flop properties; tr is the resolution time you give it.
RESOLUTION TIMEtr ≈ (N − 1) · Tclk − Tco − Tsu − Troute  (N stages)
EXTRA STAGEmultiplies MTBF by about eTclk/τ
SYSTEM MTBF1 / MTBFsys = Σ 1 / MTBFiFailure rates add, across synchronizers and across every unit shipped.
LEVEL CROSSINGhold a level ≥ ~1.5 destination periods to guarantee capture
TOGGLE SYNCspace events ≥ ~2–3 destination cycles; pulse out = s[n] ^ s[n−1]
GRAY CODEg = b ^ (b >> 1);  bi = gi ^ bi+1 (from the MSB down)
FIFO FLAGSempty: rgray == wgray_sync · full: wgray == {~rgray_sync[N:N−1], rgray_sync[N−2:0]}
FIFO DEPTHdepth ≥ B − B · (read rate / write rate) + sync-latency margin
POINTER TIMINGset_max_delay -datapath_only ≈ one destination period on Gray bits
PPM DRIFTone symbol slip every 1 / Δppm symbols (600 ppm → ~1,667)
TRY IT

Synchronizer MTBF calculator

Add a stage or lower the clock and watch MTBF jump. Values update as you type.

RESOLUTION TIME–
MTBF PER SYNCHRONIZER–
CHIP MTBF–
ONE MORE STAGE GIVES–

 

PICK A TECHNIQUE

Which CDC scheme for which crossing

The question behind most CDC interview questions. Classify the signal, then choose.

TECHNIQUECROSSESLATENCYTHROUGHPUTKEY RULE
Two-flop synchronizer1-bit level2–3 dest cyclesSlow changes onlyRegistered source, no logic between stages
Toggle (pulse) synchronizer1-bit event2–3 dest cycles1 event per ~3 cyclesRespect minimum event spacing
Four-phase handshakeMulti-bit value~4–6 cycles each sideLowHold data until acknowledged
MUX-enable / qualifierMulti-bit value~3 cyclesLow–mediumSynchronize only the enable
Gray-coded counterCounter or pointer2–3 cyclesEvery cycleOnly ±1 steps; bound bus skew
Asynchronous FIFOData stream~3–5 cyclesFull rateGray pointers, conservative flags
Reset synchronizerReset release2–3 cycles—Assert async, de-assert sync, one per domain
BROWSE BY TOPIC

50 CDC interview questions across 10 topics

A sample of what interviewers draw from most. The full 580-question ebook covers each topic in much more depth, with every question answered.

CDC Fundamentals

What a crossing is and why it's dangerous.

  • What is a clock domain crossing, and why can't STA simply time it?
  • What are the three main CDC failure modes: metastability, data loss and incoherency?
  • Why do CDC bugs usually pass RTL simulation?
  • What's the difference between synchronous, asynchronous and related clocks?
  • Two clocks are both 100 MHz. Is a crossing between them safe without a synchronizer?

Metastability & MTBF

The physics and the numbers.

  • What physically happens inside a flop during metastability?
  • Write the MTBF formula and explain each term.
  • Why is MTBF exponential in resolution time but only linear in frequency?
  • Why does τ get worse at low voltage, and why does that matter for DVFS?
  • How do you compute MTBF for a whole chip with thousands of synchronizers?

Single-Bit Synchronizers

The two-flop synchronizer and its rules.

  • How does a two-flop synchronizer work? When do you need three stages?
  • Why must the source signal come straight from a flop?
  • What does the ASYNC_REG attribute (or a dedicated sync cell) do?
  • Why must there be no logic between the synchronizer stages?
  • Where should you edge-detect a synchronized signal, and why not on the first stage?

Pulses & Events

Crossing a single-cycle event without losing it.

  • Why can a fast pulse be missed by a two-flop synchronizer in a slow domain?
  • Write a toggle synchronizer. What limits how often events can be sent?
  • Pulse stretching vs toggle vs handshake: when do you use each?
  • What is the 1.5× rule for level crossings?
  • How do you count events from a fast domain in a slow one?

Multi-Bit CDC & Handshakes

Where most real CDC bugs live.

  • Why can't you put a two-flop synchronizer on each bit of a bus?
  • What's the general principle every safe multi-bit scheme follows?
  • Draw a four-phase req/ack handshake. Why is data held until ack?
  • Two-phase vs four-phase handshake: what's the trade-off?
  • How does a MUX-recirculation (enable-based) scheme work?

Gray Code & Async FIFOs

The most-asked CDC design question.

  • Why are FIFO pointers converted to Gray code before crossing?
  • Where are full and empty computed, and why are the flags pessimistic?
  • Why does the pointer need one extra bit?
  • How do you build an async FIFO with a non-power-of-two depth?
  • How do you size an async FIFO for a burst?

Reconvergence & Divergence

When correct synchronizers still give wrong results.

  • What is reconvergence, and why can two separately synchronized bits disagree?
  • Give an example of reconvergence breaking an FSM.
  • What is divergence, and why is synchronizing one signal twice risky?
  • How do you fix reconvergence?
  • Why do CDC tools flag "convergent" multi-bit crossings?

Resets & RDC

Resets cross domains too.

  • Draw a reset synchronizer. Why assert asynchronously and de-assert synchronously?
  • Why does each clock domain need its own reset synchronizer?
  • What is reset domain crossing, even when both flops share a clock?
  • How do you sequence resets across domains that depend on each other?
  • What are recovery and removal checks?

Constraints & Implementation

Keeping synchronizers intact through the flow.

  • Clock groups vs false path vs set_max_delay -datapath_only: when do you use each?
  • Why is a plain false path risky on Gray-coded pointers?
  • How can synthesis or retiming break a synchronizer?
  • Why should synchronizer flops be placed close together?
  • How does a glitch-free clock mux work?

Verification & Real Systems

Proving it, and the crossings in real SoCs.

  • What does a structural CDC tool check, and what can't it check?
  • What makes a waiver acceptable?
  • What is metastability injection, and why use it in simulation?
  • How do you safely read a free-running counter from another domain?
  • How do you handle crossings when the destination clock is gated or powered off?

This is a sample. The full bank goes much deeper.

580 questions across 27 chapters, all answered: 20 coding exercises with solutions, 25 solved numericals, 30 debugging scenarios, plus RDC, glitch-free clock switching, FPGA and low-power CDC.

See the full question bank
N1 · MTBFINTERMEDIATEAn 800 MHz destination, 20 MHz data toggle rate, τ = 40 ps, T0 = 50 ps. Two stages, with 250 ps of Tco + Tsu + routing. What is the MTBF? What does a third stage give?Show solution ↓
T = 1.25 ns → t_r = 1.25 − 0.25 = 1.00 ns
Denominator = 50e-12 × 800e6 × 20e6 = 8 × 10^5
MTBF = e^(1.0/0.04) / 8e5 = e^25 / 8e5 ≈ 9.0 × 10^4 s ≈ 25 hours
Third stage: t_r = 2.25 ns → e^56.25 / 8e5 ≈ 3.4 × 10^18 s

Note: one extra cycle of latency takes MTBF from about a day to roughly 100 billion years. These are the default values in the calculator above.

N2 · SYSTEM MTBFINTERMEDIATEA chip has 5,000 synchronizers, each with MTBF = 1013 s. What is the chip's MTBF? And across 1 million chips shipped?Show solution ↓
Failure rates add:
Chip MTBF  = 10^13 / 5,000 = 2 × 10^9 s ≈ 63 years
Fleet MTBF = 2 × 10^9 / 10^6 = 2,000 s ≈ 33 minutes

Note: a chip that looks safe on its own still fails somewhere in the field every half hour at that volume. That's why MTBF targets are set per product, not per synchronizer.

N3 · LEVEL WIDTHBEGINNERA 400 MHz source must send a level into an 80 MHz domain. Using the 1.5× rule, how many source cycles must it be held?Show solution ↓
Dest period = 12.5 ns → hold ≥ 1.5 × 12.5 = 18.75 ns
Source period = 2.5 ns → 18.75 / 2.5 = 7.5 → 8 cycles (20 ns)

Note: add margin if the destination frequency can drop (DVFS or clock tolerance).

N4 · TOGGLE SPACINGBEGINNERA toggle synchronizer feeds a 50 MHz domain and needs 3 destination cycles between events. What is the maximum event rate?Show solution ↓
Minimum spacing = 3 × 20 ns = 60 ns
Max rate = 1 / 60 ns ≈ 16.7 million events per second

Note: faster bursts need a counter crossed with Gray code, or a FIFO, instead of single events.

N5 · HANDSHAKE THROUGHPUTINTERMEDIATEA four-phase handshake crosses 64-bit words from a 200 MHz to a 100 MHz domain, with two-flop synchronizers both ways and one register cycle per step. Estimate throughput.Show solution ↓
REQ↑ into dest : 2–3 dest cycles ≈ 25 ns
ACK↑ into src  : 2–3 src cycles  ≈ 12.5 ns
REQ↓ into dest : ≈ 25 ns
ACK↓ into src  : ≈ 12.5 ns
Round trip ≈ 75 ns → 64 bits / 75 ns ≈ 0.85 Gb/s

Note: an async FIFO on the same 64-bit bus could move a word every destination cycle: 6.4 Gb/s.

N6 · FIFO DEPTHINTERMEDIATEThe writer runs at 300 MHz but writes on 80% of cycles, in bursts of 1,200 words. The reader reads every cycle at 150 MHz. Minimum depth?Show solution ↓
Write rate = 300 × 0.8 = 240 M words/s
Burst time = 1,200 / 240 M = 5.0 µs
Words read = 5.0 µs × 150 M = 750
Depth ≥ 1,200 − 750 = 450 → choose 512

Note: 512 leaves 62 words for synchronizer latency on the pointers and reader start-up.

N7 · GRAY CODEBEGINNERConvert binary 1011 to Gray, and Gray 1001 back to binary.Show solution ↓
Binary → Gray: g = b ^ (b >> 1)
  1011 ^ 0101 = 1110
Gray → binary (MSB down): b3 = 1
  b2 = b3 ^ g2 = 1 ^ 0 = 1
  b1 = b2 ^ g1 = 1 ^ 0 = 1
  b0 = b1 ^ g0 = 1 ^ 1 = 0  → 1110

Note: Gray to binary is a chain of XORs, so it's slower; do it after the synchronizer, not before.

N8 · PPM DRIFTINTERMEDIATETwo plesiochronous clocks are each ±150 ppm. How often does the elastic buffer slip by one symbol in the worst case?Show solution ↓
Worst-case difference = 150 + 150 = 300 ppm = 3 × 10^-4
Slip every 1 / 3e-4 ≈ 3,333 symbols

Note: protocols insert skip or idle symbols more often than that, so the buffer can drop or repeat them to stay centred.

CDC Analysis Summary    Design: soc_periph_top    Mode: functional
Clock domains: 6   Asynchronous clock pairs: 9   Reset domains: 4

  Category                                   Count
  --------------------------------------------------
  Crossings analysed                           648   (1)
  Recognised synchronizers (2/3-flop)          402
  Recognised FIFOs / handshakes                 61
  Waived                                       158   (2)
  Violations                                    27
    No synchronizer                               9   (3)
    Combinational logic before synchronizer       6   (4)
    Multi-bit bus synchronized bit by bit         5   (5)
    Reconvergence of synchronized signals         4   (6)
    Async reset crossing (RDC)                    3   (7)
  --------------------------------------------------
  Clocks inferred (not in constraints)            2   (8)
  Unclocked registers                            14
  1. 402 + 61 + 158 + 27 = 648: every crossing is accounted for.
  2. 158 waivers is a quarter of all crossings. Each needs a reason and an owner; field bugs often hide here.
  3. Missing synchronizers: real bugs unless the clocks are actually related.
  4. Combinational logic feeding a synchronizer can glitch, and the glitch can be captured.
  5. Bit-by-bit buses: incoherent values unless proven quasi-static or Gray-coded.
  6. Reconvergence: separately synchronized signals that combine downstream.
  7. Reset crossings belong in RDC analysis; don't waive them as CDC.
  8. Inferred clocks and unclocked registers mean the setup is incomplete: crossings involving them weren't analysed properly.
What would you fix first?

The setup: the 2 inferred clocks and 14 unclocked registers. Until every clock is defined with the right relationships, the counts above can't be trusted, and crossings may be missing from the report entirely. Then the 9 missing synchronizers and the 6 combinational-logic cases, which are usually real bugs.

Are 158 waivers a problem?

Not automatically, but it's high. Review them by category: quasi-static configuration registers and properly documented static signals are fine with an assertion; broad waivers by module or by wildcard are not. Every waiver should name the signal, the reason, who approved it and how the assumption is checked.

The five bit-by-bit buses: how do you decide what to do?

For each one, ask whether only one bit can change at a time (Gray), or whether it's truly static while the destination is active. If either can be proven, waive precisely and add an assertion. Otherwise redesign with a handshake, a qualifier with held data, or a FIFO.

Is the design CDC-clean once the violations reach zero?

Not yet. The analysis also has to run on the synthesized netlist (synthesis can break synchronizers), constraints must bound the Gray and handshake data paths, RDC needs its own sign-off, and protocols should be checked with assertions and metastability-injection simulation. The ebook walks through a detailed CDC tool report in Chapter 18.

Same frequency, different oscillators: synchronous?

No. Their phase drifts, so treat them as asynchronous.

Does a synchronizer remove metastability?

No. It makes failure unlikely; MTBF measures how unlikely.

What dominates MTBF?

Resolution time, because it's in the exponent.

Why must a synchronizer's input come from a flop?

Combinational logic can glitch, and the glitch can be captured.

When do you use three stages?

Very fast clocks or strict MTBF targets.

What does ASYNC_REG do?

Marks synchronizer flops so they're kept together and protected from optimisation.

Fast pulse into a slow domain?

Toggle synchronizer, pulse stretching or handshake.

The 1.5× rule?

Hold a level at least ~1.5 destination periods.

Universal multi-bit recipe?

Synchronize one control bit; hold the data stable.

Why Gray pointers in an async FIFO?

Only one bit changes per increment.

Async FIFO empty condition?

Read Gray pointer equals synchronized write Gray pointer.

Are async FIFO flags exact?

No, pessimistic: they release late, never early.

What is reconvergence?

Separately synchronized signals combining with different latencies.

Reset synchronizer in one line?

Assert asynchronously, de-assert synchronously.

How many reset synchronizers?

At least one per clock domain.

What is RDC?

A crossing between flops with different resets, even on one clock.

Constraint for asynchronous clocks?

set_clock_groups -asynchronous.

Constraint that bounds Gray-pointer skew?

set_max_delay -datapath_only of about one destination period.

Does a false path make a crossing safe?

No. It only stops timing analysis.

What is metastability injection?

Randomly delaying synchronizer outputs in simulation to model real resolution.

COMMON MISTAKES

What costs candidates the most in CDC rounds

×

"Just add two flops" to everything

Two-flop synchronizers are for single-bit levels. Pulses get lost and buses become incoherent. Classify the signal first.

×

Logic in front of the synchronizer

A decode or mux of several source flops can glitch. Register the crossing signal in the source domain.

×

Edge-detecting the first stage

The first flop may be metastable. Detect edges on the synchronized output and its delayed copy.

×

Treating constraints as synchronization

A false path or clock group silences STA. It doesn't make the crossing safe, and on Gray buses it leaves skew unbounded.

×

Ignoring resets

One reset synchronizer shared across domains, or a block reset while its neighbour keeps running, causes RDC bugs that CDC reports don't catch.

×

Trusting simulation

RTL simulation has no metastability. Use CDC tools, reviewed waivers, assertions and metastability injection.

QUICK FAQ

Before you start preparing

Which interviews ask CDC questions?

Almost all digital roles: RTL design, design verification, SoC integration, FPGA and often STA. Freshers get synchronizer and multi-bit questions; experienced candidates get async FIFOs, reconvergence, RDC, constraints and debugging scenarios.

Is a two-flop synchronizer always enough?

Only for a single-bit level that changes slowly compared with the destination clock. Pulses need a toggle synchronizer or handshake, multi-bit data needs Gray code, a handshake, MUX-enable or an async FIFO, and very fast clocks may need a third stage for enough MTBF.

Can simulation find CDC bugs?

Normal RTL simulation can't model metastability, so most CDC bugs pass it. Teams use structural CDC tools, metastability injection in simulation, assertions and formal checks, plus correct constraints for timing.

Is a false path enough for an asynchronous crossing?

No. A false path or clock group only tells STA not to time the path; it does nothing to make the crossing safe. The RTL still needs a correct synchronization scheme, and Gray-pointer crossings should get a bounded set_max_delay -datapath_only instead of a plain false path.

What is RDC, and how is it different from CDC?

Reset domain crossing happens when a flop reset by one reset drives a flop with a different reset, even on the same clock. An asynchronous reset asserting in the source can change its output at any time relative to the destination clock, causing metastability or corruption. It needs its own analysis and fixes.

How should a fresher prepare for CDC questions?

Learn metastability and MTBF, the two-flop synchronizer, why buses can't be synchronized bit by bit, toggle synchronizers, handshakes, Gray code and the async FIFO. Practise writing the synchronizer, edge detector and Gray converter, and drawing the async FIFO from memory. Then try our RTL design questions.

Want to be tested on these live?

Book a 1:1 mock interview with a mentor working in this exact domain.

Book a mock interview