rakko
Full Member level 4
When engineers are asked about metastability in the interviews. They all recite what they learned or they think the learned from a published paper. There are lots of published paper in the last five decades on this subject but not any of the papers push deep enough to answer a fundamental quation and that is how does a double synchronizer recovers from a metastable condition? Just because you put two flops back to back does not mean that it is not possible for the data to get corrupted once a metastable condition is encountered. Here is an example;
The 1st flop of a double synchronizer goes metastable for the reason we all understand. If this flop is not recovered in time(typically 1/2 clock time), then there are three posibilities; 1- the flop recovers to correct state. 2- the flop recovers but ends up in the wrong state. 3- the flop still has not recovered from metastability before the next clock. In the 1st condition, we were lucky. In 2nd condition, we corrupted the data. In the 3rd case, we pass the metastable to the 2nd statge and potentially to all other flops down the stream. All published litrature says the purpose of the 2nd flop is to maximize MTBF and assume that the metastable data of the 1st stage has recovered (as in case 1, above) by the time it reaches the 2nd synchronizer flop. This is a condition that can not be assumed and is not explained in any litrature. Can you explain it?
The 1st flop of a double synchronizer goes metastable for the reason we all understand. If this flop is not recovered in time(typically 1/2 clock time), then there are three posibilities; 1- the flop recovers to correct state. 2- the flop recovers but ends up in the wrong state. 3- the flop still has not recovered from metastability before the next clock. In the 1st condition, we were lucky. In 2nd condition, we corrupted the data. In the 3rd case, we pass the metastable to the 2nd statge and potentially to all other flops down the stream. All published litrature says the purpose of the 2nd flop is to maximize MTBF and assume that the metastable data of the 1st stage has recovered (as in case 1, above) by the time it reaches the 2nd synchronizer flop. This is a condition that can not be assumed and is not explained in any litrature. Can you explain it?