¿Por qué necesitamos sincronizar entradas asíncronas en FSM?

He estado aprendiendo electrónica digital recientemente. Sé que hay puertas que realizan funciones lógicas, aprendí sobre RS-Latch, D-Latch y Master-Slave-D-Flip-Flop. Ahora que puedo realizar funciones lógicas y almacenar estados, puedo crear una máquina de estados finitos (por ejemplo, un semáforo). En clase, hablamos sobre este ejemplo de semáforo en particular y hubo una discusión sobre qué problemas surgen, si agregaríamos un botón de inicio/parada (señalar al semáforo que un peatón está esperando luz verde).

La conclusión fue que este botón sería una entrada asíncrona, necesitamos colocar un flip flop antes de la máquina de estado para que esta entrada pueda sincronizarse primero.

Lo que no entiendo es, ¿cuál es el problema con las entradas asíncronas? ¿Por qué necesitamos sincronizarlo? ¿Y por qué un flip flop en frente de la máquina de estado o en la parte posterior ayudaría con la sincronización? Leí varios artículos, hablando de "metaestabilidad", pero todavía no entiendo.

Muchas gracias.

Respuestas (2)

Como ya comprenderá, su máquina de estado del controlador de semáforo es una máquina síncrona. Es decir, es impulsado por algún reloj de tal manera que todos los cambios de lógica combinatoria ocurren y se establecen en valores estables antes del siguiente flanco del reloj para cumplir con los tiempos de configuración requeridos.

esquemático

simular este circuito : esquema creado con CircuitLab

ingrese la descripción de la imagen aquí

Si los datos cambian dentro de ese tiempo de configuración, el resultado final no solo será impredecible, sino que, debido a la metaestabilidad, puede flotar o bailar alrededor de algún valor intermedio durante un tiempo antes de que elija un valor final. Incluso puede oscilar entre el uno lógico y el cero lógico a alta frecuencia, lo que provoca un flujo de corriente y un calentamiento considerables.

ingrese la descripción de la imagen aquí

Como tal, cualquier entrada asincrónica a una máquina de estado debe sincronizarse en algún momento para que el sistema funcione como se espera. Sin embargo, eso no significa necesariamente que SIEMPRE necesite agregar otro pestillo al sistema.

Si la entrada solo procede a una sola "siguiente puerta" Y el estado de la entrada es independiente de todas las demás entradas, entonces realmente no importa si la señal llega tarde a la fiesta. Básicamente, debe preguntar... "Si perdemos la entrada de un ciclo de reloj, ¿importa?"

Sin embargo, si la entrada alimenta múltiples puertas, eso es diferente. Las siguientes puertas pueden ver diferentes niveles lógicos y propagar un estado erróneo al siguiente pestillo. Básicamente, una variedad de cosas malas pueden suceder.

Esto se puede ilustrar con su ejemplo simple. Tenga en cuenta que si la metaestabilidad en REG1 no se ha establecido antes del siguiente reloj, podría hacer que tanto el semáforo de CAMINAR como el de tráfico se enciendan al mismo tiempo, o que ninguno se encienda.

esquemático

simular este circuito

Además, si una entrada asíncrona tiene una relación con otra entrada asíncrona que espera que suceda al mismo tiempo, la segunda entrada puede reconocerse pero la primera no.

En ambos casos, debe agregar un pestillo de sincronización a la entrada para alinear la sincronización de la señal con el reloj de las máquinas de estado. Tenga en cuenta que esto agrega un retraso de ciclo de reloj, o un retraso de medio ciclo de reloj si usa el otro borde de la señal de reloj.

Sin embargo, es posible que te estés preguntando, "¿pero ESE pestillo no sufre el mismo problema?" y por supuesto, la respuesta sería sí lo hace. Pero el truco aquí es permitir que esa metaestabilidad potencial ocurra en un punto del circuito donde no importa, como destaqué anteriormente.

Encontrar ese punto puede ser problemático con entradas dependientes. Normalmente, es necesario agregar lógica adicional para calificar esas entradas.

Sin embargo, tenga en cuenta que la metaestabilidad es una cuestión de probabilidad. Aunque, debido a las diferencias en las tolerancias de fabricación, la mayoría de los pestillos se abren rápidamente, existe la posibilidad de que permanezcan inestables durante bastante tiempo. Cuanto más larga sea la brecha entre los pulsos del reloj, mayor será la probabilidad de que se haya asentado. Como tal, si el reloj de su sistema está en una frecuencia alta, es prudente dividirlo para hacer el preenclavamiento para permitir más tiempo de estabilización. Sin embargo, incluso entonces no hay garantías.

Un pensamiento final. Mencioné que existe la posibilidad de altas corrientes inducidas por metaestabilidad y calentamiento al sincronizar una entrada externa aleatoria. Desafortunadamente, es muy poco lo que puede hacer para corregir eso y los problemas de metaestabilidad prolongados además de eliminar los circuitos de entrada asíncronos.

¡Gracias! Entonces, ¿el ciclo de reloj adicional del flip flop agrega tiempo para que la metaestabilidad se estabilice? Además, ¿por qué pondríamos un flip flop al final de un FSM?
@Eren Yes agrega tiempo y le da un lugar seguro, lógicamente, para instalarse en el sincronismo. Generalmente desea que todas las salidas cambien al mismo tiempo. Entonces, la última etapa normalmente debería ser un flip-flop, o más exactamente, una salida de "bloqueo", para que todas las salidas sean síncronas.
te dio +1 para múltiples puertas, pero confío en que corrijas tus párrafos finales. La metaestabilidad en el pestillo de sincronización también es importante, porque eso se puede pasar al circuito. No hay cura para la metaestabilidad. Sin embargo, puede reducir la probabilidad a una probabilidad muy pequeña esperando más tiempo antes de la decisión final. Para evitar reducir la velocidad del reloj, esto generalmente se hace canalizando D-flops adicionales antes. Una vez que la probabilidad de error se reduce a una vez en la edad del universo, para mil millones de circuitos a la velocidad máxima del reloj, la mayoría de la gente considera que la metaestabilidad está 'curada'
@Neil_UK sí, estaba tratando de decir eso, sin confundir demasiado al OP. Todavía un trabajo en progreso. Sin embargo, tengo que salir por el día. Gracias.
La metaestabilidad es un hombre del saco en este tipo de discusiones. En realidad, la situación que describe en la que alimenta múltiples entradas a través del límite del reloj fallará con mucha más frecuencia que los eventos de metaestabilidad. Los retrasos en el enrutamiento pueden sesgarse en el orden de los nanosegundos, lo que significa que un cambio en los datos puede llegar a un flip flop antes del flanco ascendente del reloj receptor y puede llegar a otro flip flop después del flanco ascendente. Hago esta distinción porque la metaestabilidad es solo un problema en los casos en los que tiene muy poca holgura, mientras que el sesgo de enrutamiento siempre es un problema.
@jalalipop de hecho, esa es otra lata de gusanos. ;)

Un problema con los diseños asincrónicos es la presencia de carreras o peligros. Digamos, por ejemplo, en este circuito, sea A = 1, B = 0 y C = 1 inicialmente y, por lo tanto, D es estable y se establece en 1.

ingrese la descripción de la imagen aquí

Ahora deja que B cambie a 1 y C cambie a 0 en el mismo momento . Es obvio que D permanecerá en 1. Pero en los circuitos reales, los retrasos en la propagación y los retrasos en los cables son importantes. Por lo tanto, es muy posible que el cambio en C llegue a la puerta OR más rápido de lo que el cambio en B se propaga a la puerta OR, a través de la puerta AND. El resultado es que D se lleva a 0 momentáneamente, antes de volver a su estado estable 1. Esto se denomina carrera o peligro. Esta falla momentánea puede desencadenar cualquier circuito que esté presente después de D, y esta transición no deseada se propaga a través de todo el circuito. Esto provoca una disipación de energía no deseada y posiblemente un error en la funcionalidad.

Para evitar estos problemas, podemos registrar las entradas y salidas agregando un flip-flops D antes de todas las entradas A, B, C y después de la salida D. De modo que ahora nuestro circuito enganche solo entradas estables en los flancos del reloj, calcula la expresión, bloquea D y la emite solo en el siguiente borde del reloj. Esto asegura que tales fallas en las entradas o salidas no se propaguen en nuestro circuito, siempre que todas las entradas a los flip-flops cumplan con el tiempo de configuración y espera.

Esta es la razón principal por la que se prefieren los diseños sincrónicos, a pesar de la velocidad que brindan los diseños asincrónicos.

¡Muchos gracias! Solo tengo una pregunta más si eso está bien. Agregar los flip flops antes de las entradas y después de las salidas provocará un cambio de dos ciclos de reloj. ¿El cambio causará algún problema a nuestra máquina de estado? Había una analogía con la Persona A contando hasta 7 y preguntando a la Persona B si contó correctamente. B lo analizará y responde "Sí". Si tuviéramos un flip flop en el frente y después de la salida, la respuesta "sí" llegaría a la persona A cuando ya tiene 9. No veo cómo esto podría causar algún problema, además de la latencia.
Después de bloquear las entradas en un ciclo de reloj, obtenemos la salida en el siguiente ciclo de reloj. La funcionalidad seguirá siendo la misma. Transición de estado en cada ciclo de reloj. Así es como se suele diseñar FSM.
Sí, ese es el retraso causado por flip-flop, pero eso no afecta la funcionalidad.