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

8

Recientemente he estado aprendiendo electrónica digital. 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 particular de semáforo y hubo una discusión sobre qué problemas surgen, si agregamos un botón de inicio / parada (señal al semáforo de que un peatón está esperando la luz verde).

La conclusión fue que este botón sería una entrada asíncrona, necesitamos poner 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 asincrónicas? ¿Por qué necesitamos sincronizarlo? ¿Y por qué un flip flop frente a la máquina de estado o la parte posterior ayudaría con la sincronización? Leí varios artículos, hablando de "metaestabilidad", pero todavía no entiendo

Muchas gracias

Eren
fuente

Respuestas:

6

Como ya comprende, 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 suceden y se asientan en valores estables el tiempo suficiente antes del próximo borde 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, la salida final no solo será impredecible, sino que debido a la metaestabilidad, puede flotar o bailar alrededor de algún valor intermedio por un tiempo antes de elegir un valor final. Incluso puede oscilar entre el uno lógico y el cero lógico a una frecuencia alta, causando un flujo de corriente y calentamiento considerables.

ingrese la descripción de la imagen aquí

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

Si la entrada solo procede a una "próxima 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 para un ciclo de reloj, ¿importa?"

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

Esto se puede ilustrar con su simple ejemplo. Tenga en cuenta que si la metaestabilidad en REG1 no se resolvió antes del próximo reloj, podría causar que tanto el WALK como el semáforo se enciendan al mismo tiempo, o que ninguno se encienda.

esquemático

simular este circuito

Además, si una entrada asincrónica tiene una relación con otra entrada asincrónica que espera que ocurra 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 ciclo de medio reloj si usa el otro borde de la señal de reloj.

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

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

Sin embargo, tenga en cuenta que la metaestabilidad es una cosa de probabilidad. Aunque, debido a las diferencias en las tolerancias de fabricación, la mayoría de los pestillos se abrirán rápidamente, existe la posibilidad de que permanezca inestable durante bastante tiempo. Cuanto mayor 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 pre-enclavamiento para permitir un mayor tiempo de establecimiento. Sin embargo, incluso entonces no hay garantías.

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

Trevor_G
fuente
¡Gracias! Entonces, ¿el ciclo de un reloj adicional del flip flop agrega tiempo para que se estabilice la metaestabilidad? Además, ¿por qué pondríamos un flip flop al final de un FSM?
Eren
@Eren Yes agrega tiempo y le da un lugar seguro, lógicamente, para establecerse en el sincronismo. En general, desea que todas las salidas cambien al mismo tiempo. Por lo tanto, la última etapa normalmente debería ser un flip-flop, o más exactamente, una salida "enclavada", por lo que todas las salidas son sincrónicas.
Trevor_G
1
te dio + 1 para múltiples puertas, pero confiando 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 extremadamente pequeña al esperar más tiempo antes de la decisión final. Para evitar reducir la velocidad del reloj, esto generalmente se hace canalizando los D-flops adicionales antes. Una vez que el probaility de error se ha reducido a una vez en la edad del universo, por 1billion circuitos de velocidad de reloj máxima, la mayoría de las personas consideran metaestabilidad 'curado'
Neil_UK
@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.
Trevor_G
1
La metaestabilidad es un hombre del saco en este tipo de discusiones. En realidad, la situación que describe donde 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 nanosegundos, lo que significa que un cambio en los datos puede alcanzar un flip flop antes del borde ascendente del reloj receptor y puede alcanzar otro flip flop después del borde ascendente. Hago esta distinción porque la metaestabilidad es solo un problema en los casos en que tiene muy poca holgura, mientras que el sesgo de enrutamiento siempre es un problema.
jalalipop
3

Un problema con los diseños asíncronos es la presencia de raza o peligros. Digamos, por ejemplo, en este circuito, que A = 1, B = 0 y C = 1 inicialmente y que D sea estable y se establezca en 1.

ingrese la descripción de la imagen aquí

Ahora deje 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 de propagación y los retrasos de los cables son importantes. Por lo tanto, es muy posible que el cambio en C alcance la puerta OR más rápido que el cambio en B se propaga a la puerta OR, a través de la puerta AND. El resultado es que D se pone momentáneamente en 0, antes de que vuelva a su estado estable 1. Esto se llama carrera o peligro. Esta falla momentánea puede activar cualquier circuito presente después de D, y esta transición no deseada se propaga por 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 D-flip-flops antes de todas las entradas A, B, C y después de la salida D. De modo que ahora nuestro circuito enclava solo entradas estables en los bordes del reloj, calcula la expresión, bloquea D y la genera solo en el siguiente borde del reloj. Esto garantiza que no se propaguen tales fallas en las entradas o salidas en nuestro circuito, siempre que todas las entradas a los flip-flops cumplan con la configuración y el tiempo de espera.

Esta es la razón principal por la que los diseños síncronos son más preferidos, a pesar de la velocidad que brindan los diseños asíncronos.

Mitu Raj
fuente
¡Muchas 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? Hubo una analogía con la Persona A contando hasta 7 y preguntando a la Persona B si contaba correctamente. B lo analizará y responderá "Sí". Si tuviéramos un flip flop al frente y después de la salida, la respuesta "sí" llegaría a la persona A cuando ya está en 9. No veo cómo esto podría causar algún problema además de la latencia
Eren
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 generalmente se diseña FSM.
Mitu Raj
Sí, esa es la demora causada por el flip-flop, pero eso no afecta la funcionalidad.
Mitu Raj