Te recomendamos que pruebes esta respuesta en un ambiente controlado antes de enviarlo a producción, un saludo.
Solución:
Respuesta rápida: si viola la configuración y el tiempo de espera en la entrada de un flip flop, la salida será impredecible durante algún tiempo. Esa salida impredecible se llama metaestable (o metaestabilidad).
Respuesta larga: cuando la salida es impredecible, me refiero a que es impredecible. Podría ser alto, podría ser bajo, podría estar en algún punto intermedio o podría oscilar. Después de este período metaestable, la salida será alta o baja, pero no sabemos qué dirección tomará hasta que suceda.
Sin embargo, la cantidad de tiempo que es impredecible es algo predecible. Hay dos factores principales que determinan la duración del período metaestable: la velocidad del flip-flop y qué tan “cerca del borde” obtuviste el tiempo.
La mayoría de los tiempos metaestables son bastante cortos, aunque la probabilidad de tener un tiempo prolongado es distinta de cero. Teóricamente, podría tener un tiempo metaestable del orden de segundos, aunque las probabilidades de que eso suceda son increíblemente raras. A medida que aumenta la velocidad del flip-flop, el tiempo metaestable promedio disminuye, en igualdad de condiciones.
Hay un tiempo “imaginario” en el flip-flop, relativo al borde del reloj, donde eres más susceptible a problemas de metaestabilidad. Exactamente cuándo eso depende de muchos factores como la temperatura, el voltaje, el proceso, la fase de la luna, los sacrificios de animales y el partido político al que se afilia. Siempre que sea ese momento, cuanto más cerca esté el borde de entrada de datos a ese momento, mayor será el tiempo de metaestabilidad.
La mejor manera de lidiar con la metaestabilidad es sincronizar toda su lógica y no violar ninguno de sus tiempos de configuración y espera. Por supuesto, esto es difícil o imposible para circuitos de cualquier complejidad. Entonces, lo que hacemos es tratar de limitar los lugares donde la metaestabilidad podría ser un problema y luego ocuparnos de esos lugares.
El método normal sería “duplicar el reloj” de los datos. Es decir, tenga dos Flip-Flops D en serie con la salida del primero alimentando la entrada del segundo. La esperanza es que si el primer flip-flop se vuelve metaestable, entonces el período metaestable habrá terminado antes de que viole el tiempo de configuración / retención del segundo. En la práctica, esto funciona bastante bien. En aplicaciones supercríticas, puede haber algún “triple reloj”.
Un estado metaestable es similar a un equilibrio inestable. Un ejemplo común de equilibrio inestable es un péndulo invertido. Si puede equilibrar el péndulo en una posición vertical, ese es un estado estable. Sin embargo, si algo empuja la palanca hacia cualquier lado (corrientes de aire o vibraciones del suelo, por ejemplo), el péndulo no volverá a la posición vertical, caerá. Contraste con un péndulo regular, que si se empuja hacia un lado, eventualmente volverá a la vertical.
Los equilibrios estables se utilizan en sistemas eléctricos para crear elementos de almacenamiento. La equlibria inestable no es un buen elemento de almacenamiento (ya que pierde su estado fácilmente), pero a menudo existe como un estado parasitario.
Un elemento de almacenamiento digital común es un par de inversores de acoplamiento cruzado:
El elemento de almacenamiento tiene dos estados estables, uno donde el nodo de la izquierda está en el voltaje de suministro y el nodo de la derecha está en tierra, y el otro en la condición opuesta. También hay un estado inestable, en el que cada nodo tiene un voltaje intermedio.
Para comprender mejor cómo surge el estado inestable, recuerde la función de transferencia de un inversor. El gráfico de la función de transferencia muestra el voltaje de salida del inversor para un voltaje de entrada dado.
El inversor no es lineal; una forma sencilla de obtener una solución aproximada de un circuito no lineal es trazar las características del circuito; las intersecciones de las gráficas son las soluciones, es decir, los puntos donde se satisfacen las características eléctricas de todos los componentes del circuito. Normalmente, esto se hace con gráficos iv como en este ejemplo de diodo en Wikipedia. Sin embargo, para los inversores, lo haremos con gráficos vv. Superposición de una segunda función de transferencia del inversor en el gráfico (con los ejes intercambiados, ya que el segundo inversor está al revés:
Hay tres intersecciones de las gráficas: una en (0, Vs), una en (Vs, 0) y una en (Vs / 2, Vs / 2). El estado (Vs / 2, Vs / 2) es metaestable. Después de una pequeña perturbación de cualquiera de los nodos, el circuito casi siempre se asentará en uno de los estados estables en lugar de volver a (Vs / 2, Vs / 2).
La forma de escribir un valor en el elemento de almacenamiento de inversor doble es forzar uno de los nodos al valor deseado utilizando un controlador que sea más fuerte que los inversores. Una forma común de hacer esto es con un transistor de paso:
Si conecta la puerta del transistor de paso al reloj, tiene un pestillo D (estoy dejando fuera la estructura de salida). Cuando el reloj está alto, habilitando el transistor de paso, el pestillo es transparente: la entrada pasa directamente a la salida. Cuando el reloj está bajo, el pestillo mantiene el valor anterior. La metaestabilidad surge en el momento en que el pestillo muestrea. Si la entrada es un voltaje alto o bajo estable cuando el pestillo muestrea, entonces funcionará correctamente. Sin embargo, si la entrada está alrededor del punto Vs / 2 cuando el pestillo muestrea, existe la posibilidad de que el pestillo termine en el estado metaestable (Vs / 2, Vs / 2). Una vez que está en el estado metaestable, puede permanecer allí indefinidamente (suponiendo que el pestillo no se vuelva a sincronizar), pero dado que es un equilibrio inestable, algo suele suceder relativamente rápido para sacarlo del estado metaestable.
Cuando preocuparse por la metaestabilidad
Si sus elementos de almacenamiento se vuelven metaestables, al menos está perdiendo parte del presupuesto de tiempo para la lógica descendente. La lógica no puede realizar la evaluación deseada hasta que se resuelva el estado metaestable. En el peor de los casos, el estado metaestable persiste o se propaga a través de la lógica, y los elementos de almacenamiento en sentido descendente también se vuelven metaestables, o varios elementos de almacenamiento relacionados capturan valores inconsistentes.
La lógica síncrona correctamente diseñada y funcionando no tiene problemas con la metaestabilidad. El período de reloj es más largo que el tiempo de evaluación para la lógica, todas las entradas del flip-flop son estables en el siguiente borde del reloj (se cumple el requisito de configuración) y todas cargan un valor válido.
Algunas de las situaciones comunes en las que la metaestabilidad es una preocupación son:
- Muestreo lógico de una entrada externa, por ejemplo, un interruptor en el panel frontal, o la salida de los circuitos de monitorización que pueden cambiar en cualquier momento (subtensión, sobrecalentamiento).
- Lógica que utiliza varios relojes que no tienen una relación sincrónica. Esto a menudo surge con interfaces de E / S que tienen requisitos de reloj particulares, pero también ocurre internamente cuando diferentes partes de un chip tienen diferentes requisitos de rendimiento. Por ejemplo, no toda la lógica en su CPU de 3 GHz realmente se ejecuta a 3 GHz. (Sin embargo, una CPU no es un gran ejemplo, ya que muchos de los relojes de una CPU son múltiplos síncronos entre sí).
Una señal metaestable es aquella que puede parecer arbitrariamente alta o baja en cualquier patrón arbitrario durante un período de tiempo arbitrario. Si la señal alimenta varias puertas directamente o indirectamente es posible que algunas de esas puertas lo “vean” alto mientras que otros lo vean bajo. Cosas desagradables.
Para sistemas con un solo reloj, las señales metaestables a menudo se pueden tratar pasando a través de dos pestillos. Un problema más complicado surge cuando se abren los relojes. Hay muchos circuitos (especialmente que usan pestillos RS) que funcionarían de maravilla si la metaestabilidad no fuera posible, pero que pueden, si ocurre la metaestabilidad, terminar generando pulsos de reloj de ejecución (que a su vez pueden causar metaestabilidad descendente).
Por cierto, otro punto importante a destacar con respecto a la metaestabilidad: el tiempo de propagación de un pestillo indica cuándo, si se cumplen los tiempos de muestreo y retención, la salida será estable en su nuevo valor. Si no se cumplen los tiempos de configuración y retención, no hay garantía de si o cuándo la salida cambiará o no, hasta que el pestillo reciba un evento de reloj válido. Incluso si la salida ‘parece’ cambiar limpiamente, no hay garantía de que no vuelva a cambiar espontáneamente.
Más adelante puedes encontrar las críticas de otros programadores, tú de igual forma tienes la habilidad insertar el tuyo si te apetece.