Si un flip flop tiene una infracción de configuración y es metaestable, ¿se garantiza que se ajustará al valor de entrada cuando termine de oscilar?

4

Si estoy usando D-Flip flops modernos y pierdo el tiempo de configuración (es decir, mi entrada D cambia cerca del reloj), existe el peligro de que el F / F se vuelva "metaestable" y pase algo de tiempo oscilando.

Los diseños estándar utilizan 2 F / F como sincronizador para que una señal asíncrona se maneje adecuadamente dentro del dominio del reloj local. Al leer sobre este diseño, he visto mencionar el hecho de que las F / F están allí para garantizar que tales oscilaciones de la primera F / F se extinguirán para cuando el segundo borde del reloj almacene la señal entrante en la segunda F / F.

Lo que me interesa es si se garantiza que la sincronización F / F se establecerá en el valor de entrada después del tiempo de oscilación. Si mi señal asíncrona cambió de '1' a '0' en el borde del reloj, ¿la salida Q será un '0' después de oscilar? ¿O debo asumir que podría obtener un período de reloj adicional en el que mi señal "sincronizada" sigue siendo un '1'?

    
pregunta Bill Nace

3 respuestas

6

Cuando un flip-flop es metaestable, no oscila. Simplemente se atasca en un nivel indeterminado entre Vhi y Vlow.

Cuando finalmente abandona el estado metaestable, puede pasar al estado alto o bajo.

No es obvio lo que quiere decir con "establecerse en el valor de entrada". Normalmente se llega a un estado metaestable al tener un valor de entrada que se encuentra en medio de una transición cuando llega el reloj. No es un valor legal alto o bajo. Por lo tanto, cuando dice el "valor de entrada", ni yo ni el flip-flop saben si se refiere al valor antes de la transición o después de la transición.

Editar: Aquí hay una traza de alcance que muestra la salida de un flip-flop pasando por un estado metaestable, con la salida del estado metaestable tomando una cantidad de tiempo aleatoria: ImagentomadadeWJDally, Notas de clase para EE108A, Clase 13: Metastabilidad y falla de sincronización (por ejemplo, cuando los buenos Flip-Flops salen mal) 11/9/2005.

    
respondido por el The Photon
4

No hay cura para la metastabilidad. Período. Fin de.

La metastabilidad es un problema en los sistemas temporizados cuando la salida de un pestillo cuyas restricciones de tiempo de entrada se han violado se lee dos veces. Esto significa ya sea en dos lugares diferentes, o en dos momentos diferentes. Con una buena señal, estas dos lecturas serán idénticas. Con la metastabilidad, existe la posibilidad de que las dos lecturas sean diferentes.

Por ejemplo, el sincronizador de interrupciones de una uP, '¿ha ocurrido una interrupción?' La señal de interrupción externa es asíncrona, por lo que eventualmente violará tsu o th. La señal de 'hubo una interrupción de este ciclo' se lee en dos lugares. Si el contador del programa piensa que hubo una interrupción, y el controlador de interrupciones cree que no lo hubo, crash!

Si bien no hay cura para la metastabilidad, se puede controlar. Cualquier flip flop se resolverá con una pequeña constante de tiempo, que en un sistema bien diseñado es una pequeña fracción del período de reloj. Para una violación en particular, digamos que el 100% de la salida se está volviendo metaestable. Después de 1 constante de tiempo, hay una probabilidad de 1 / e de que todavía sea metaestable, 36%. Después de 10 constantes de tiempo, es sólo 36 / millón. Puede que no suene demasiado, pero con un reloj de 10Mhz, eso es 360 eventos fallidos por segundo, demasiados. Después de 20 constantes de tiempo, es alrededor de 1 / billón. Uno falla cada 100 segundos. No me gustaría usar una PC que fallara tan a menudo.

Ahora podemos obtener cualquier número de constantes de tiempo ralentizando nuestro reloj. Sin embargo, eso afecta la velocidad del sistema. Podemos comprar chancletas especiales "metaestables" que tienen constantes de tiempo mucho más cortas que las chancletas normales.

La verdadera victoria llega cuando usamos dos o más chanclas en una fila. Esto aumenta la latencia de la señal en un sistema, pero nos permite mantener la velocidad de reloj alta. ¿Realmente me importa si la señal de interrupción externa toma dos o tres ciclos de reloj para hacer que el programa salte? En absoluto.

Entonces, digamos que tenemos un flip flop con 15 constantes de tiempo por ciclo de reloj. Eso representa una probabilidad de fracaso de 0.2 / millón para cada evento metaestable. Si obtengo 1000 interrupciones por segundo de mi unidad de disco, entonces podría tener varios bloqueos al día. Todavía no es muy bueno. Ahora conecto en cascada dos chanclas y obtengo 30 constantes de tiempo. Ahora tengo 40e-15 probabilidad de fracaso. Es poco probable que este sistema falle en mi vida. Pero espere, digamos que soy el fabricante y tengo 100 millones de estos sistemas en el campo. Ahora conecto en cascada tres chanclas, y mi tasa de fallas esperada cae a 8e-21. No esperaría ningún fallo de ningún sistema en mi vida.

Tenga en cuenta que la tasa de fallos sigue siendo finita, no es cero. Sin embargo, es muy poco probable.

    
respondido por el Neil_UK
2

Cuando un flip flop es metaestable, no se garantiza nada sobre su estado de salida hasta el siguiente evento de reloj. En teoría, es posible que parezca que el reloj equivocado no tiene ningún efecto, pero que la salida cambie un segundo más tarde (en la práctica, la probabilidad de que el circuito no haya alcanzado un estado estable en el tiempo t (lo que implica que la salida podría cambiar de forma espontánea algún tiempo después de eso) segundos después de que el reloj caiga exponencialmente con t , por lo tanto, si el acceso a los datos y las entradas de reloj con alguna relación de tiempo en particular tendría un 1% de probabilidad Si la salida no se estabiliza dentro de 1us, habría una probabilidad de 1 / 1,000,000 de que no se estabilice dentro de 1 ms, y una probabilidad de 1 / 1,000,000,000,000 de que no se estabilice dentro de 1 segundo).

La razón por la que los sincronizadores dobles se consideran efectivos "armadura" contra la metastabilidad es que la metastabilidad en la entrada a un sincronizador doble solo causará metastabilidad en la salida si la salida del primer flop cambia precisamente en el "peligro" Ventana del segundo. Supongamos, por ejemplo, que uno utiliza una frecuencia de reloj de 1 MHz y los flops cambiarán limpiamente, excepto cuando los datos cambien en una determinada ventana de 0.1ns, en cuyo caso la salida puede cambiar algún tiempo más tarde con la distribución de probabilidad mencionada anteriormente. Incluso si hubiera un 1% de probabilidad de que el primer pestillo se incline a cambiar en algún momento después de 1us, la probabilidad de que cambie durante la ventana de 0.1ns cuando el segundo pestillo sería "vulnerable" sería mucho menor. / p>

Tenga en cuenta que incluso con un doble sincronizador, es posible que algunos estados metaestables lleguen al segundo pestillo. Si la entrada al primer latch está cronometrada deliberadamente para inducir tales condiciones, puede ser posible obtener estados metaestables del segundo latch con cierta regularidad predecible (por ejemplo, uno en un millón de eventos de latch o menos). Sin embargo, incluso estos, no necesariamente darán como resultado un mal funcionamiento del circuito si se usan para alimentar otra lógica síncrona. Supongamos que la señal del segundo latch alimenta dos circuitos, uno de los cuales tiene 100 ns de retardo de propagación antes de un latch, y el otro no tiene retardo. Para que el circuito funcione mal, la salida del segundo pestillo debe cambiar en algún momento dentro de la ventana de 100 ns antes del próximo borde del reloj. Esa es una ventana más grande de lo que se requeriría para hacer que un registro sea metaestable, pero la mayoría de las veces, incluso cuando el segundo pestillo se vuelve metaestable, no ocurrirá un evento de cambio dentro de esa ventana.

    
respondido por el supercat

Lea otras preguntas en las etiquetas