Propagación de errores de metaestabilidad con flip flop

Tengo una confusión con respecto a la resolución de la metaestabilidad usando flip flops, sé que debería agregar un sincronizador de dos o tres d-flip flop para garantizar una transmisión segura en el dominio del reloj que cruza los límites, pero mi confusión es que la salida de la metaestabilidad es impredecible. , podría conducir a un nivel alto o bajo, y esa salida se propagará al resto del circuito, entonces, ¿cómo puede el segundo o el tercer flip flop captar el valor correcto que se transmitirá, si el primer flip flop está siempre en estado metaestable y podría establecerse en un nivel incorrecto?

Respuestas (2)

El primer FF no siempre es metaestable. Suponiendo que los bordes de entrada se distribuyen uniformemente con respecto a su reloj, el primer FF tiene una cierta probabilidad de volverse metaestable que está relacionada con el período del reloj y sus requisitos de tiempo de configuración/retención. Si se vuelve metaestable, se resuelve por sí mismo dentro de una cierta cantidad de tiempo; la probabilidad de permanecer metaestable después del tiempo t es una función exponencialmente decreciente de t .

El segundo FF tiene una probabilidad mucho menor de volverse metaestable, porque tendría que sincronizarse en el instante justo cuando el primer FF (si era metaestable) se estaba resolviendo solo. De lo contrario, su salida será definitivamente alta o definitivamente baja. El cambio de señal puede retrasarse por una metaestabilidad extendida del primer FF, pero es muy poco probable que provoque que el segundo FF se vuelva metaestable y afecte negativamente el funcionamiento del resto de la lógica.

Un tercer FF reduce las posibilidades de metaestabilidad a niveles infinitesimales.

Tiene la única respuesta racional si 'D' es asíncrono con el reloj en el primer flip-flop. Se convierte en el "sincronizador" de las etapas posteriores, que tienen una probabilidad metaestable cercana a cero.
Gracias Dave, cuando el primer flip flop se vuelve metaestable, resolverse solo significa que será de nivel alto o bajo después de un cierto período de tiempo, ¿este nivel es idéntico a la entrada original del flip flop, o podría ser incorrecto y luego propagarse a todos los circuito
@HachaniAhmed. Si el primer flip-flop entra en un estado metaestable donde D = '1', pero Q = '0' (después de estabilizarse), entonces la primera etapa ha generado un valor lógico incorrecto. Es por eso que la primera etapa de un sincronizador de datos tiene una salida incierta. Su efecto cambia la probabilidad del valor no sincronizado de +1 error/-1 error a solo +1 error. Para filtrar esto, se necesita al menos un filtro digital de 2 polos para las decisiones lógicas '1' y las decisiones lógicas '0'. Un flip-flop de una etapa siempre es metaestable propenso a entradas asíncronas. Si está sobremuestreando a un ritmo rápido, es más probable que sea metaestable.
Para un promedio móvil de valores de entrada, los errores serán mucho menores con un sincronizador en la primera etapa. Su único buen propósito es alinear los datos con el reloj de muestreo, pero para una señal 'limpia' se usa un filtro digital aguas abajo. Si se pasa un valor de error desde el flip-flop de sincronización, será demasiado corto para pasar por el filtro y se ignorará.
@HachaniAhmed: Cuando un FF se vuelve metaestable, podría resolverse de cualquier manera. Pero si se resuelve de la manera "incorrecta", todo lo que significa es que ha retrasado la detección del cambio en la entrada por un período de reloj, sin daño real. Es el mismo resultado que habría obtenido si la señal de entrada sin procesar hubiera sido un poco más tarde de lo que realmente fue. Si se resuelve de la manera "correcta", eso solo significa que tuvo suerte y detectó el cambio un reloj antes de lo que podría haberlo hecho.
gracias @DaveTweed, cuando dijiste "no hubo daño real" por lo que entiendo, eso podría ser muy dañino si el flip flop se resuelve en el valor incorrecto que este valor se propaga (dependiendo del contexto)
@DaveTweed esto también me lleva a otra pregunta sobre el tiempo medio entre fallas (MTBF), ¿qué pasa con la primera falla? con MTBF, sabemos aproximadamente cuándo será la próxima falla, como dentro de 10 años usando 3 flip flop a partir de una falla anterior, ¿verdad? pero ¿cómo podemos determinar cuándo ocurrirá la primera falla?
No se hace daño, porque el valor "incorrecto" es simplemente el valor anterior. El circuito aguas abajo del sincronizador tiene el mismo comportamiento de cualquier manera, solo un reloj más tarde. Con respecto a MBTF, la primera "falla" termina cuando construyes el circuito y lo enciendes por primera vez.

Cuando tiene un escenario de metaestabilidad, es decir, la señal de entrada cambia exactamente en el borde del reloj de muestreo, tanto 0 como 1 son valores correctos. Lo importante es que toda la lógica posterior ve el mismo valor (suponiendo que la señal de la víctima se extienda a varios puntos de captura finales). Si el borde del reloj hubiera sido un poco más temprano o más tarde, obtendría un claro 0 o 1, por lo que debería ser razonable que no pueda elegir con precisión una u otra para que sea la respuesta correcta.

Los fracasos en cascada tendrán cada vez más probabilidades de resolverse en un valor estable dentro de un ciclo de reloj, por lo que la salida de la secuencia debe ser estática (para una entrada estática), o una transición dentro de +/- un ciclo de la transición de entrada más 2 o 3 ciclos dependiendo si es doble o triple sincronización.

Un efecto secundario de esto es que cuando se muestrean varias señales de forma asincrónica (o sin una configuración clara), debe anticipar todas las posibles condiciones de carrera y no depender de ver los cambios en las mismas combinaciones precisas de ciclo que fueron. generado.

Tu primera oración es confusa. '0' y '1'? Su respuesta no incluye los beneficios del sobremuestreo incluso en entradas asíncronas paralelas, lo que da tiempo para alinear los datos asíncronos en la tercera etapa. La segunda etapa determina y corrige la desviación menor (1 ciclo) de los datos. La primera etapa elimina solo el componente metaestable principal. La salida de la tercera etapa debe estar alineada y sincronizada con el reloj de datos.
Está aplicando su concepto de cómo debería funcionar a mi respuesta. Considere, t=1, la entrada es 0. t=2, la entrada es 1. Si toma una muestra en t=1.5, ¿qué valor espera funcionalmente? No está definido y depende del tiempo de la ruta. En el peor de los casos, su riel medio y la salida del primer flop aumentan y se derrumban, o aumentan lentamente y se mantienen altos. Entonces, espere con la misma probabilidad, un valor de 0 o 1 como resultado de la transición de entrada.
Deberías haber dejado claro que estabas hablando de probabilidades y no de lógica implícita.