What is clock domain crossing (CDC) in digital design?
CDC happens when a signal moves from one clock domain to another with a different clock. It can cause timing problems if not handled carefully.
Click to reveal answer
beginner
Why is CDC awareness important in Verilog designs?
Because signals crossing clock domains can cause metastability, leading to unpredictable behavior. Awareness helps prevent bugs and data corruption.
Click to reveal answer
intermediate
What is metastability in the context of CDC?
Metastability is when a flip-flop output is unstable for a short time because the input changes near the clock edge. It can cause wrong data or timing failures.
Click to reveal answer
intermediate
Name a common hardware technique to safely transfer signals across clock domains.
Using a two-stage synchronizer flip-flop chain helps reduce metastability by giving the signal time to settle in the new clock domain.
Click to reveal answer
advanced
What is a handshake protocol in CDC?
A handshake protocol uses signals to confirm data transfer between clock domains, ensuring data is safely passed without loss or corruption.
Click to reveal answer
What problem does clock domain crossing mainly cause?
APower loss
BMetastability
CSignal amplification
DClock skew
✗ Incorrect
Metastability occurs when signals cross clock domains without proper synchronization.
Which method helps reduce metastability in CDC?
AUsing combinational logic only
BIncreasing clock frequency
CRemoving clocks
DTwo-stage synchronizer flip-flops
✗ Incorrect
Two-stage synchronizers give signals time to stabilize in the new clock domain.
What does a handshake protocol in CDC ensure?
ASafe data transfer between clock domains
BFaster clock speed
CLower power consumption
DSignal inversion
✗ Incorrect
Handshake protocols confirm data transfer to avoid loss or corruption.
What is a common sign of a CDC problem in simulation?
APerfect timing
BNo output at all
CRandom or unstable output values
DConstant zero output
✗ Incorrect
Unstable outputs often indicate metastability from CDC issues.
Which of these is NOT a CDC technique?
ASingle flip-flop without synchronization
BTwo-stage synchronizer
CHandshake protocol
DAsynchronous FIFO
✗ Incorrect
A single flip-flop without synchronization is unsafe for CDC.
Explain what clock domain crossing is and why it can cause problems in digital circuits.
Think about signals moving between different clocks and what can go wrong.
You got /4 concepts.
Describe two hardware methods to safely transfer signals across clock domains.
Focus on flip-flops and communication protocols.
You got /4 concepts.
Practice
(1/5)
1. What is the main purpose of using a synchronizer in clock domain crossing?
easy
A. To safely transfer signals between different clock domains
B. To increase the clock frequency
C. To reduce power consumption
D. To generate a new clock signal
Solution
Step 1: Understand clock domain crossing
Signals crossing from one clock domain to another can cause timing errors if not handled properly.
Step 2: Role of synchronizers
Synchronizers, typically two flip-flops in series, help avoid metastability by safely transferring signals between different clock domains.
Final Answer:
To safely transfer signals between different clock domains -> Option A
Quick Check:
Synchronizer = Safe signal transfer [OK]
Hint: Synchronizers prevent timing errors between clocks [OK]
Common Mistakes:
Thinking synchronizers increase clock speed
Confusing synchronizers with power-saving methods
Assuming synchronizers generate clocks
2. Which Verilog code snippet correctly implements a 2-flip-flop synchronizer for a single-bit signal async_signal crossing into clk domain?
easy
A. reg sync_0, sync_1; always @(posedge clk) begin sync_1 <= async_signal; sync_0 <= sync_1; end
B. reg sync_0, sync_1; always @(posedge clk) begin sync_0 <= async_signal; sync_1 <= sync_0; end
C. reg sync_0, sync_1; always @(posedge async_signal) begin sync_0 <= clk; sync_1 <= sync_0; end
D. reg sync_0, sync_1; always @(negedge clk) begin sync_0 <= async_signal; sync_1 <= sync_0; end
Solution
Step 1: Identify correct clock edge and signal assignment
The synchronizer must sample the asynchronous signal on the positive edge of the destination clock (clk), so posedge clk is correct.
Step 2: Check flip-flop chaining order
The first flip-flop captures async_signal, the second captures the output of the first. This is correctly done as sync_0 <= async_signal; then sync_1 <= sync_0;.
Final Answer:
reg sync_0, sync_1; always @(posedge clk) begin sync_0 <= async_signal; sync_1 <= sync_0; end -> Option B
Quick Check:
Correct clock edge and flip-flop order = reg sync_0, sync_1; always @(posedge clk) begin sync_0 <= async_signal; sync_1 <= sync_0; end [OK]
Hint: Use posedge clk and chain flip-flops in order [OK]
Common Mistakes:
Using negedge instead of posedge
Swapping flip-flop assignments
Triggering on async_signal edge
3. Given the following Verilog code snippet crossing a signal data_in from clk_a domain to clk_b domain using a 2-flip-flop synchronizer, what is the expected output of data_sync after several clock cycles?
reg sync_0, sync_1;
always @(posedge clk_b) begin
sync_0 <= data_in;
sync_1 <= sync_0;
end
assign data_sync = sync_1;
medium
A. The code will cause a synthesis error
B. data_sync will always match data_in immediately
C. data_sync will never change from initial value
D. data_sync will be a delayed and synchronized version of data_in
Solution
Step 1: Understand synchronizer behavior
The 2-flip-flop synchronizer delays the asynchronous input by two clock cycles of clk_b and reduces metastability risk.
Step 2: Analyze output data_sync
data_sync reflects data_in but delayed and synchronized to clk_b domain, not immediate.
Final Answer:
data_sync will be a delayed and synchronized version of data_in -> Option D
Quick Check:
Synchronizer output = delayed synchronized signal [OK]
Hint: Synchronizer delays and syncs signals, no immediate match [OK]
Common Mistakes:
Expecting immediate signal match
Assuming no delay in synchronization
Thinking code causes synthesis error
4. Identify the problem in this Verilog code crossing a multi-bit signal data_bus[7:0] from clk_a to clk_b domain:
reg [7:0] sync_0, sync_1;
always @(posedge clk_b) begin
sync_0 <= data_bus;
sync_1 <= sync_0;
end
medium
A. The clock edge should be negedge instead of posedge
B. The code is correct and safe for multi-bit crossing
C. Multi-bit signals require handshake or FIFO, not simple flip-flop synchronizers
D. Missing reset signals causes metastability
Solution
Step 1: Recognize multi-bit signal crossing issues
Multi-bit signals crossing clock domains can cause data corruption if bits change at different times.
Step 2: Understand proper methods for multi-bit crossing
Simple flip-flop synchronizers are not safe for multi-bit buses; handshake protocols or FIFOs are needed.
Final Answer:
Multi-bit signals require handshake or FIFO, not simple flip-flop synchronizers -> Option C
Quick Check:
Multi-bit crossing needs handshake/FIFO [OK]
Hint: Use handshake or FIFO for multi-bit signals [OK]
Common Mistakes:
Assuming flip-flops alone are safe for buses
Changing clock edge without reason
Ignoring metastability risks
5. You need to transfer a 16-bit data word from clk_fast domain to clk_slow domain safely. Which method best ensures data integrity and avoids metastability?
hard
A. Use a handshake protocol with data valid and acknowledge signals
B. Directly assign the data bus without synchronization
C. Use a 2-flip-flop synchronizer on each bit individually
D. Use asynchronous reset on the data bus
Solution
Step 1: Consider multi-bit data crossing challenges
Transferring 16-bit data across clock domains risks partial updates and metastability if not handled properly.
Step 2: Evaluate synchronization methods
Using handshake protocols with valid and acknowledge signals ensures complete and safe data transfer between different clock domains.
Final Answer:
Use a handshake protocol with data valid and acknowledge signals -> Option A