Dual vs Triple synchronizer on FPGA input

Status
Not open for further replies.

shaiko

Advanced Member level 5
Joined
Aug 20, 2011
Messages
2,644
Helped
303
Reputation
608
Reaction score
297
Trophy points
1,363
Visit site
Activity points
18,302
When is it worthwhile considering Triple DFF synchronizers on FPGA inputs instead of the commonly used Dual DFF ?
 

Reactions: shaiko

    shaiko

    Points: 2
    Helpful Answer Positive Rating
Dual will always give you a 1 or a 0. I only use triple when I need to do edge detection, or data alignment.
 
Reactions: shaiko

    shaiko

    Points: 2
    Helpful Answer Positive Rating
What if the metastability isn't settled for a full clock T and proceeds to the second DFF ?
 

From my understanding, the only problem is the first FF sampling during a transition of the IP, and it can go metastable. The 2nd FF should never sample an edge, so will always flip to 0 or 1, even if the first FF is metastable.
 

The 2nd FF should never sample an edge, so will always flip to 0 or 1, even if the first FF is metastable.
You assume that the metastability condition is resolved befor the second clock edge arrives. But what if we are working at a very high frequency and the metastability condition doesn't have enough time to resolve - causing setup time violations?
 
It is not possible to guarantee that metastability problems are avoided.
The MTBF for a circuit can be calculated, and you add synchronizer stages if you want to increase it.

From Altera handbook 12.1, Volume 1, chapter 14:

"Designers commonly use two registers in a synchronization chain to minimize the
occurrence of metastable events, and a standard of three registers provides better
metastability protection. However, synchronization chains with two or even three
registers may not be enough to produce a high enough MTBF when the design runs at
high clock and data frequencies."
 
Status
Not open for further replies.

Similar threads

Cookies are required to use this site. You must accept them to continue using the site. Learn more…