Метастабильность нельзя «вылечить», но если вы будете ждать достаточно долго , вероятность ее возникновения может быть сколь угодно малой. Когда вы дойдете до одного раза в эпоху вселенной, это вряд ли доставит вам неприятности.
Это как уравновешивание карандаша. Вероятно, он упадет, и чем дольше вы будете ждать, тем меньше вероятность, что он останется стоять.
Есть две проблемы с долгим ожиданием, и одна из них является фундаментальной.
Основная проблема заключается в том, что если у вас есть один элемент памяти (защелка или триггер, они оба страдают от метастабильности) в синхронизированной системе, получающей выходные данные от асинхронной внешней системы, то вы физически не можете определить нижний предел времени ожидания иногда внешний сигнал совершает переход вблизи грани фиксации. Вы должны передать сигнал на другой триггер, чтобы он дождался там. Это дает вам гарантированное минимальное время ожидания одного такта.
Вторая проблема заключается в том, что часто вы пытаетесь запустить систему настолько быстро, насколько это возможно, и системная тактовая частота не может быть уменьшена, чтобы дать достаточно времени во втором триггере. Единственный способ увеличить задержку сигнала до необходимого без снижения пропускной способности - это направить ожидание на большее количество этапов.
У некоторых людей возникают проблемы с визуализацией того, что происходит между шлепанцами. Есть два способа вызвать метастабильность, и оба они связаны с нарушением правил триггера. Одним из способов является нарушение настройки ввода и времени удержания, чтобы выполнить переход, когда триггер ожидает, что вход будет стабильным. Другой - нарушать логические уровни входа, чтобы входной сигнал триггера находился на промежуточном уровне напряжения. Триггер, который является метастабильным, может вызвать любой тип нарушения на его выходе, чтобы каскадно перейти к следующему триггеру.