Del artículo de Wikipedia Metaestabilidad en electrónica :
La metaestabilidad en la electrónica es la capacidad de un sistema electrónico digital de persistir por un tiempo ilimitado en un equilibrio inestable o estado metaestable. En estados metaestables, el circuito puede ser incapaz de establecerse en un nivel lógico estable '0' o '1' dentro del tiempo requerido para la operación adecuada del circuito. Como resultado, el circuito puede actuar de manera impredecible y puede provocar una falla del sistema.
Esa parece ser una buena definición, pero ¿qué significa en una aplicación?
Desde el punto de vista de un diseñador electrónico, ¿cuáles son algunos ejemplos de cuándo podría ocurrir esto y dónde debería ser preocupante este tipo de falla?
¿Existe una definición más pragmática o aplicada, algo en términos más específicos?
Respuestas:
Respuesta rápida: si viola la configuración y el tiempo de espera en la entrada de un flip flop, entonces la salida será impredecible durante cierto tiempo. Esa salida impredecible se llama metaestable (o metaestabilidad).
Respuesta larga: cuando la salida es impredecible, quiero decir 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 hacia dónde irá 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 no es cero. Teóricamente, podría tener un tiempo metaestable del orden de segundos, aunque las probabilidades de que eso ocurra son increíblemente raras. A medida que aumenta la velocidad del flip-flop, el tiempo metaestable promedio disminuye; todas las demás cosas son iguales.
Hay un tiempo "imaginario" en el flip-flop, en relación con el borde del reloj, donde es más susceptible a problemas de metaestabilidad. Exactamente cuando eso depende de muchos factores como la temperatura, el voltaje, el proceso, la fase de la luna, los sacrificios de animales y con qué partido político se afilia. Siempre que ese tiempo sea, cuanto más cerca esté su límite de entrada de datos a ese tiempo, mayor será el tiempo de metaestabilidad.
La mejor manera de lidiar con la metaestabilidad es hacer que toda su lógica sea sincrónica y no violar ninguno de sus tiempos de configuración y retención. Esto es, por supuesto, difícil a 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 tratar con esos lugares.
El método normal sería "doble reloj" de los datos. Es decir, tener dos D Flip-Flops 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 finalizará antes de que viole el tiempo de configuración / retención del segundo. En la práctica esto funciona bastante bien. En aplicaciones súper críticas puede haber algo de "triple sincronización".
fuente
Un estado metaestable es similar a un equilibrio inestable. Un ejemplo común de un equilibrio inestable es un péndulo invertido . Si puede equilibrar el péndulo en posición vertical, ese es un estado estable. Sin embargo, si algo empuja la palanca hacia ambos lados (corrientes de aire o vibraciones del suelo, por ejemplo), el péndulo no se restaurará a la posición vertical, se caerá. Contraste con un péndulo regular, que si se empuja hacia un lado, eventualmente se asentará en 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 con acoplamiento cruzado:
El elemento de almacenamiento tiene dos estados estables, uno donde el nodo de la izquierda está en la tensión de alimentación 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, recupere la función de transferencia para 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 parcelas son las soluciones, o en otras palabras, los puntos donde se satisfacen las características eléctricas de todos los componentes del circuito. Normalmente esto se hace con tramas iv como en este ejemplo de diodo en Wikipedia . Sin embargo, para los inversores, lo haremos con trazados 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 los gráficos: uno en (0, Vs), uno en (Vs, 0) y uno 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 regresar a (Vs / 2, Vs / 2).
La forma de escribir un valor en el elemento de almacenamiento del inversor dual es forzar a 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 omitiendo 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 retiene el valor anterior. La metaestabilidad surge en el momento en que las muestras de retención. Si la entrada tiene un voltaje alto o bajo estable cuando el pestillo muestra, entonces funcionará correctamente. Sin embargo, si la entrada está alrededor del punto Vs / 2 cuando el latch muestrea, existe la posibilidad de que el latch 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 vuelva a cronometrarse), pero dado que es un equilibrio inestable, generalmente ocurre algo relativamente rápido para sacarlo del estado metaestable.
Cuándo preocuparse por la metaestabilidad
Si sus elementos de almacenamiento se están volviendo metaestables, entonces 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 posteriores también se vuelven metaestables, o varios elementos de almacenamiento relacionados capturan valores inconsistentes.
La lógica síncrona correctamente diseñada y en funcionamiento 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 de flip-flop son estables en el siguiente borde del reloj (requisito de configuración satisfecho), y todas cargan un valor válido.
Algunas de las situaciones comunes donde la metaestabilidad es una preocupación son:
fuente
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 múltiples compuertas directa o indirectamente , es posible que algunas de esas compuertas la "vean" alta mientras que otras la vean baja. 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 relojes. Hay muchos circuitos (especialmente con pestillos RS) que funcionarían maravillosamente si la metaestabilidad no fuera posible, pero que pueden, si se produce metaestabilidad, terminar generando pulsos de reloj en tiempo real (que a su vez pueden causar metaestabilidad aguas abajo).
Por cierto, otro punto importante que hacer 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 la salida cambiará o no, o hasta que el pestillo reciba un evento de sincronización válido. Incluso si la salida "parece" cambiar limpiamente, no hay garantía de que no vuelva a cambiar espontáneamente.
fuente
El caso clásico es si viola los tiempos de configuración / retención de un pestillo sincrónico, y es un problema que debe tener en cuenta al diseñar FPGA (estoy seguro de que Xilinx y Altera tendrán apuntes sobre esto). Si puede aparecer una señal en cualquier momento aleatorio, nunca puede estar seguro de que cuando la registra no está cambiando dentro de las especificaciones de la ventana de configuración / tiempo de espera. Lo que puede suceder es que, en lugar de que la salida del pestillo suba o baje a la hora especificada después del borde del reloj, puede oscilar durante un tiempo antes de establecerse en un estado estable. La forma normal de evitar esto es usar un pestillo de 2 etapas, ya sea con el mismo reloj o con un reloj retrasado o fuera de fase, dependiendo del equilibrio entre sus requisitos de latencia y la probabilidad de metaestabilidad. Esto permite que el primer tiempo de enclavamiento se estabilice antes de que el segundo enganche se estabilice. De paso, esto es algo con lo que los microcontroladores tienen que lidiar internamente, ya que las señales de E / S externas generalmente son asíncronas al reloj de la CPU, por lo que los puertos de E / S a menudo tienen arreglos de bloqueo doble para evitar problemas, y el software no necesita preocuparse por eso . Un recuerdo vago que se leyó hace muchos años sobre un problema con el 6502, donde una lectura del bus de datos que cambiaron fuera de la especificación del tiempo de configuración / retención podría causar una bifurcación a una dirección que no era el objetivo de la bifurcación ni la siguiente instrucción, ya que algunas instrucciones internas El estado se volvió metaestable. Este video muestra algunos ejemplos: Un recuerdo vago que se leyó hace muchos años sobre un problema con el 6502, donde una lectura del bus de datos que cambiaron fuera de la especificación del tiempo de configuración / retención podría causar una bifurcación a una dirección que no era el objetivo de la bifurcación ni la siguiente instrucción, ya que algunas instrucciones internas El estado se volvió metaestable. Este video muestra algunos ejemplos: Un recuerdo vago que se leyó hace muchos años sobre un problema con el 6502, donde una lectura del bus de datos que cambiaron fuera de la especificación del tiempo de configuración / retención podría causar una bifurcación a una dirección que no era el objetivo de la bifurcación ni la siguiente instrucción, ya que algunas instrucciones internas El estado se volvió metaestable. Este video muestra algunos ejemplos:http://www.youtube.com/watch?v=tKHCwjWMMyg
Una analogía es si le lanzas una pelota a alguien: en su mayoría la atrapa o la deja caer / la pierde, por lo que después de un tiempo dado de lanzar, la sostendrá o no. Pero de vez en cuando van a buscar un poco antes de atraparlo o soltarlo, por lo que su estado no se mantiene ni se cae: ¡este es el estado metaestable!
fuente