Why is one flip-flop not enough to bring a signal into another clock domain?
A flop sampling a signal that changes near its clock edge can go metastable and hold an invalid level for an unbounded time. A second flop gives it a full period to settle, which fixes metastability but not cycle alignment, so a multi-bit bus needs a handshake or an asynchronous FIFO rather than a synchroniser per bit.
Answer
Short answer
One flip-flop is not enough for a clock-domain crossing because a signal sampled near the clock edge can go metastable and feed invalid levels into logic. A two-flop synchronizer gives a single-bit level time to settle, but buses, pulses, and ordered data need handshakes, Gray-coded pointers, or asynchronous FIFOs.
Was this answer helpful?
Likely follow-ups
- Why are the pointers of an asynchronous FIFO Gray coded rather than binary?
- How would you get a single-cycle pulse from a fast domain safely into a slower one?
- What goes wrong if the output of the first synchroniser flop is used by any logic other than the second flop?
- How do you tell static timing analysis to stop reporting the path into the first synchroniser flop, and what have you asserted by doing so?
Related questions
- Your timing report shows a setup violation on a critical path. What do you do about it?mediumAlso on rtl-design6 min
- The trigger for the outage is gone and you have restarted the service, and it collapses again within a minute of taking traffic. Why will it not recover on its own?hardAlso on metastability7 min
- What is the KV cache, and why does it decide how many users one GPU can serve?hardSame kind of round: concept4 min
- Your team wants to expose internal systems to an agent through MCP servers. What does the Model Context Protocol standardise, and what does it leave you to secure?hardSame kind of round: concept5 min