Anteriormente consideramos las violaciones en el primer borde del reloj del sincronizador de dos etapas, pero ¿qué pasa con las violaciones en el segundo o tercer borde del reloj?
Te digo, realmente no sé dónde está el tiempo. Parece que fue ayer cuando me preguntaba qué causa la metaestabilidad y cómo mitigar un poco el fraude (consulte las Partes 1, 2, 3 y 4).
Lamentablemente, no te dije todo lo que necesitabas saber (tenía la intención de hacerlo, pero me enojo fácilmente y lo olvido: ¡ardilla!)
Consulte también este índice de todos los artículos que componen nuestro proyecto informático HRRG de 4 bits y columnas de interés relacionadas.
En resumen, el enfoque principal de metaestabilidad en el contexto de las computadoras de 4 bits es cuando las señales asíncronas del mundo exterior (por ejemplo, los interruptores de palanca) alimentan las entradas síncronas (basadas en el reloj). Un sistema como un microcontrolador. Después de algunas discusiones, se decidió colocar un sincronizador de dos etapas en el pin de entrada como se muestra a continuación.
Sincronizador de dos etapas (Fuente: Max Maxfield)
Las cuatro señales de interés aquí son CLK (derivadas del reloj del sistema principal del microcontrolador), ASYNC (una señal asíncrona externa), META (salida del primer flip-flop tipo D, en un estado metaestable) y CLEAN. (La salida del segundo flip-flop tipo D se “limpia” en busca de contaminación metaestable).
Como parte de esto, también consideramos algunos escenarios que involucran cambios de estado del interruptor. Comenzamos con el cambio que ocurre antes del primer borde activo (ascendente) de CLK sin violaciones. Luego consideramos lo que sucedería si ocurriera una violación, lo que provocaría que DFF1 y su salida META entraran en un estado metaestable y, finalmente, “colapsaran” al estado que queríamos originalmente.
En última instancia, discutimos lo que creemos que es el peor de los casos, donde ocurre una violación y DFF1 y sus salidas META entran en un estado metaestable y finalmente “colapsan” en un estado no deseado, como se muestra a continuación. :

Una infracción de configuración desencadena la metaestabilidad. (Fuente: Max Maxfield)
Para asegurarnos de que todos estén bailando claqué al mismo ritmo de tambor, recordemos rápidamente esto paso a paso. Las señales ASYNC, META y CLEAN tienen todas el mismo valor 0 o 1 (no importa) que en la operación anterior. Esto se muestra en verde claro.
Poco antes del flanco ascendente del reloj en el tiempo t1, alguien activa el interruptor de palanca, cambiando la señal ASYNC a un nuevo valor. Esto se muestra en azul claro. Desafortunadamente, esta transición está demasiado cerca del borde del reloj, lo que desencadena una infracción de configuración que coloca a DFF1 y su salida META en un estado metaestable (que se muestra en rosa claro con una línea sombreada).
En el tiempo de recuperación, el estado metaestable “colapsa” a un valor de 0 o 1. Desafortunadamente, esto no es lo que queremos (es decir, el nuevo valor de la señal ASYNC). En cambio, es el valor antiguo de la señal ASYNC.
En el segundo borde del reloj en el momento t2, el nuevo valor de ASYNC se carga en DFF1 y aparece en la salida META después de un retraso de propagación de flip-flop. Desafortunadamente, al mismo tiempo, el valor no deseado de META se carga en DFF2 y aparece en la salida CLEAN después del retraso de propagación de ese flip-flop.
Por lo tanto, no es hasta el tercer reloj en el tiempo t3 que el nuevo valor de ASYNC finalmente llega a la salida CLEAN de DFF2.
Arriba está cómo se explica esto en casi todas partes que he visto. Una pregunta obvia me golpeó cuando toqué esto por primera vez. ¿Puedes adivinar cuál era la pregunta?
Y ahora el resto de la historia…
Érase una vez una estación de radio, Paul Harvey. Se destacó por su entrega única de noticias con pausas dramáticas y entonaciones extravagantes. Cuando cuenta parte de la historia, hace una pausa para un anuncio, regresa para contar la segunda parte de la historia y termina diciendo: “Y ahora ya sabes… el resto de la historia”.
Volviendo al suspenso que dejó el apartado anterior, surgieron interrogantes: ¿Qué pasa si un cambio en la señal ASYNC causó una violación en el reloj t2 o t3?
El problema aquí es que solo nos hemos centrado en un grupo de tres relojes. Para comprender el panorama general, debe “alejar” su vista para ver las cosas desde una perspectiva un poco más amplia. Recuerde que el interruptor de palanca está conectado a una de las entradas digitales estándar del microcontrolador. Un escenario muy común es un programa que se ejecuta en un bucle que realiza una serie de acciones. Uno de ellos es comprobar el estado del interruptor. Digamos que el bucle se ejecuta una vez cada milisegundo. En este caso, recordando que la señal CLK se deriva del reloj del sistema principal, podemos visualizarla como:

Un grupo de pulsos 3-CLK (Fuente: Max Maxfield)
El reloj de nuestro sistema principal hace tictac millones de veces por segundo. La forma en que configuro mi programa es tomar una lectura cada 1 ms en un pin de entrada digital. Esta operación de lectura activa tres pulsos de CLK que impulsan el sincronizador de dos etapas.
Habiendo visualizado cosas como esta, consideremos diferentes escenarios de violación, como se muestra en el siguiente diagrama.

Posible violación de metaestabilidad (Fuente: Max Maxfield)
Comencemos con el escenario (a). Las señales ASYNC, META y CLEAN contienen el mismo valor 0 o 1 (mostrado en verde brillante) de la hora anterior. El usuario finalmente activa el interruptor de palanca para cambiar el estado de la señal ASYNC al valor opuesto 0 o 1 (que se muestra en azul claro). Esta transición ocurre mucho antes del primer borde de reloj del primer grupo de 3 pulsos. t desencadena una violación. Como resultado, la nueva señal aparece en META después del primer borde del reloj y aparece en CLEAN después del segundo borde del reloj.
Ahora pasemos al escenario (b). Esta es otra representación de la infracción de configuración que vimos anteriormente. En este caso, una transición en ASYNC provoca una violación en el primer reloj. Esto hace que la señal META entre en un estado metaestable (que se muestra en rosa claro con líneas cruzadas) y luego decaiga a un estado no deseado (que se muestra en verde claro). En el segundo borde del reloj, el buen valor de ASYNC se carga en DFF1/META y el valor no deseado de META se carga en DFF2/CLEAN. Por lo tanto, no es hasta el tercer flanco del reloj que se carga el valor adecuado de DFF1/META en DFF2/CLEAN.
En el escenario (c), la transición ASYNC provoca número dos borde del reloj Esto hace que la señal META entre en un estado metaestable (que se muestra en rosa claro con líneas cruzadas) y luego decaiga a un estado no deseado (que se muestra en verde claro). En el tercer borde del reloj, DFF1/META se carga con el valor apropiado de ASYNC y el valor no deseado de META se carga en DFF2/CLEAN. Por lo tanto, el valor adecuado de DFF1/META no se carga con éxito en DFF2/CLEAN hasta el primer flanco de reloj asociado con la siguiente operación de lectura en (n + 1) ms.
Finalmente, en el escenario (d), la transición ASYNC provoca El tercero borde del reloj Esto hace que la señal META entre en un estado metaestable (que se muestra en rosa claro con líneas cruzadas) y luego decaiga a un estado no deseado (que se muestra en verde claro). Por lo tanto, el nuevo valor de ASYNC se carga en DFF1/META en lugar del primer borde de reloj asociado con la siguiente operación de lectura en (n + 1) ms, no hasta el segundo reloj. Finalmente se carga en DFF2/CLEAN.
Todos estos puntos significan que la tarea principal de un sincronizador de dos etapas es filtrar la metaestabilidad y garantizar que solo las señales 0 y 1 “limpias” lleguen al microcontrolador. Si se viola el primer reloj, el sincronizador puede eliminar la metaestabilidad y pasar la señal deseada al microcontrolador. Si ocurre una violación en el segundo o tercer reloj, el sincronizador eliminará la metaestabilidad, pero el microcontrolador no leerá el nuevo valor del interruptor hasta que el primer o segundo reloj asociado con la siguiente operación de lectura no lo reconozca.
Recuerde que asumimos que el ciclo del programa se repite una vez cada milisegundo. Entonces, el peor de los casos es que el microcontrolador no ve el nuevo valor del interruptor hasta aproximadamente 1/1000 de segundo después de que se cambia el interruptor. Para interruptores manuales, este retraso es completamente insignificante.
¿Entonces que dices? ¿Puede el conocimiento adicional presentado aquí ayudar a aclarar un poco las cosas?