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.
simular este circuito : esquema creado con CircuitLab
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.
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.
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.
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.
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.
fuente