Metastability is simple after you get it. Lots of people, including some who should know better get it wrong.
The best real world analogy that I know of is rolling a ball over a bump. If the ball has lots of energy, it goes over over the bump and down the other side. If it doesn't have much energy, it only gets partway up the bump and then goes back to the side it started on. If it has just the right amount of energy, it gets to the top and stops there, wobbles around a bit, and then falls off on one side or the other. In terms of a flip-flop, you have to meet setup and hold times. If not, you get a runt pulse. The size of that pulse is similar to the energy of the ball. If it's big the FF cleanly changes state. If it's tiny, nothing happens. If it's in the middle you get in trouble. With older technology, you could get good scope pictures. I think there is a good section in Johnson and Graham's Black Magic. (Highly recommended but my copy isn't handy so I can't give you a page number.) One way to look at things is that the clock to out time gets longer. How much longer has an exponential tail. The only cure is to wait long enough. The key parameter is the excess time: the clock period less clock to out, less prop time, less setup time... If you put logic in there, that adds to the prop time or subtracts from the excess/settling time. That's why the classic pair of flip-flops is so simple. The other way to screwup the simple case is to put the two FFs on opposite sides of the board or chip. Then the prop time becomes significant. Note that the excess time is in a negative exponent on the probability of going metastable. It's often reasonable to make the MTBF greater than the age of the universe. Exponents are good! (at least in this case) Using a faster technology helps too. The key parameter is the gain-bandwidth of the inner loop of the flip-flop. It's reasonable to build a test circuit and measure things. You end up with two parameters. One is the size of the window. The other is the settling rate, the exponent. Xilinx has good app notes. Note that most manufacturers don't publish data and the data they do publish isn't in the data sheet where it would mean something. Many years ago, there was a flurry of stupid ideas/circuits for "fixing" the metastability problem. They just made things worse by moving the problem to a place where you didn't look for it. That sort of junk is actually a good test for understanding metastability. Anything other than wait long enough is a sign of not understanding. You can help/fix things by redesigning the circuit at a higher level. For example, batch things so rather than needing to cross clock domains every byte you only cross once per packet and can wait longer for that signal. -- These are my opinions, not necessarily my employer's. I hate spam. _______________________________________________ time-nuts mailing list [email protected] https://www.febo.com/cgi-bin/mailman/listinfo/time-nuts
