Cruce del dominio del reloj y problema de metastablilty

2

Entiendo el problema de la metastabilidad y entiendo que no podemos obtener un valor estable en un tiempo limitado, por lo que necesitamos tiempo no vinculado pero no es práctico,

así que pusimos otro flip flop sin lógica para permitir que un período de reloj completo esté disponible para que el estado metaestable sea un estado estable

Pero el estado metaestable es igualmente probable que sea '0' o '1' como la analogía mecánica de una colina

entonces, ¿por qué después del sincronizador ff el valor estable dout será exactamente igual al din de entrada?

    
pregunta Aren dg

3 respuestas

1

TL; DR; El circuito no impide que el primer registro (el que está conectado a din) sea metaestable. Lo que sí hace es reducir la probabilidad de que el valor metaestable se propague al resto del circuito.

Comencemos con un sincronizador de 1-flop. El registro registrará el valor de din y lo alineará con el borde del reloj. ¿Todo bien? no del todo.

Si din sigue cambiando cuando se produce el reloj, la salida puede entrar en un estado metaestable. Si la salida de este registro está conectada a otros circuitos, este estado metaestable se propagará a través de los circuitos conectados. No es bueno: esto puede llevar a problemas de concurrencia si varios registros se envían desde la misma señal metaestable, a valores incorrectos generados desde la lógica combinacional, a máquinas de estados que ingresan en un estado incorrecto.

¿Qué sucede si agregamos un segundo registro? El estado metaestable de la primera todavía puede ocurrir. Sin embargo, el segundo registro siempre (*) registra el valor un ciclo de reloj posterior. Como tal, ahora hay un intervalo de tiempo entre el primer registro y el resto del circuito.

Si el primer registro es metaestable, pero se resuelve en 1 o 0 (podría ser cualquiera de los dos) en menos de un ciclo de reloj , entonces, cuando se produce el segundo ciclo de reloj, hay < fuerte> estado no metaestable cuando el segundo registro muestrea el valor . Se ha impedido la propagación del valor metaestable al resto del circuito. Como resultado, habrá 1 o 2 ciclos de retraso del reloj como resultado del segundo registro, dependiendo del valor al que se resuelva el estado metaestable.

Esto reduce enormemente la probabilidad de que un estado metaestable se propague (hay un tiempo medio antes del fallo (MTBF) que puede calcularse según las probabilidades) para un registro, puede ser tan bajo como 1 ciclo de reloj, para dos registros Puede ser tan larga como la edad del universo.

Agregar registros adicionales puede reducir aún más la probabilidad de metastabilidad al capturar cualquier valor metaestable en el segundo registro (en caso de que el primer registro no se resolviera dentro de un ciclo de reloj). Sin embargo, existe una ley de rendimientos decrecientes, por lo que en la mayoría de los diseños generales verás sincronizadores de 2 flop y 3 en los diseños de misión crítica.

(*) suponiendo que el reloj se enruta con un sesgo mínimo.

    
respondido por el Tom Carpenter
2

Sí, si se produce el estado metaestable, es igualmente probable que se resuelva en 0 o 1. Sin embargo, esto realmente no importa en el gran esquema de las cosas.

Digamos que la entrada asíncrona hace una transición de 0 a 1, y esta transición ocurre lo suficientemente cerca de un borde del reloj para hacer que el primer FF sea metaestable.

  • Si el estado metaestable se resuelve en 1, el segundo FF también irá a 1 un reloj más tarde, y todo está bien.

  • Si la metaestable se resuelve en 0, el segundo FF permanecerá en 0 para un ciclo de reloj más, pero en el siguiente ciclo de reloj, el primer FF irá a 1 (no es posible la metastabilidad) y el segundo FF ve a 1 un reloj después de eso.

En otras palabras, el único efecto de la metastabilidad que resuelve la manera "incorrecta" es simplemente retrasar la transición en la salida del segundo FF en un reloj. Este es el mismo resultado que obtendría si la señal de entrada original hubiera sido un poco más tarde (con respecto al reloj) para empezar. No tiene ningún efecto en el funcionamiento del sistema en general.

El punto es que el segundo FF tiene una probabilidad tremendamente reducida de ir hacia una mesa metaestable, esto solo puede suceder si el primer FF es metaestable en primer lugar Y esa metastabilidad se resuelve en una ventana cerrada alrededor del siguiente borde del reloj .

    
respondido por el Dave Tweed
1

La clave es comprender que los estados metaestables se resolverán por sí mismos en un tiempo (probablemente) finito. Así que la primera etapa adquiere los datos y la segunda espera un período de reloj antes de intentar capturarlos. La probabilidad de que un estado metaestable persista durante el tiempo t después del reloj es típicamente una función de e ^ -t, por lo que cuanto más tiempo espera el segundo, mayor es la posibilidad de obtener datos válidos, y la probabilidad de falla disminuye dramáticamente con el tiempo. p>

Por supuesto, la probabilidad nunca llega a cero, por lo que los sincronizadores tendrán una BER (tasa de error de bits) específica. Si la velocidad del reloj es alta, el tiempo de establecimiento es bajo y, en algunos casos, es inaceptablemente bajo. En este caso, la estrategia habitual es agregar otro flip-flop, o incluso más, según los números. Esto disminuye la probabilidad de error al costo de agregar el tiempo de latencia a los datos.

    
respondido por el WhatRoughBeast

Lea otras preguntas en las etiquetas