¿Qué es la metaestabilidad?


15

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?


2
Leslie Lamport (él de $ \ LaTeX $ fama) escribió una buena descripción de la metaestabilidad en este artículo: research.microsoft.com/users/lamport/pubs/buridan.pdf
markrages

@markrages Brillante. Esto también puede suceder con la caída de gatos y tostadas con mantequilla .
Rusty

Respuestas:


15

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".


3
¿Alguna dependencia del tipo de animal sacrificado?
Rusty

11

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:

Dos inversores conectados en un bucle, salida a entrada

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.

Función de transferencia del inversor

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:

Funciones de transferencia superpuestas para inversores consecutivos

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:

Inversores de acoplamiento cruzado con 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:

  • Muestreo lógico de una entrada externa, por ejemplo, un interruptor en el panel frontal o la salida de circuitos de monitor que pueden hacer la transición en cualquier momento (subtensión, sobretensión)
  • Lógica utilizando múltiples 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 requisitos de rendimiento diferentes. Por ejemplo, no toda la lógica en su CPU de 3 GHz se ejecuta realmente a 3 GHz. (Sin embargo, una CPU no es un gran ejemplo, ya que muchos de los relojes de una CPU son múltiplos sincrónicos entre sí).

En general, una buena respuesta, pero otra cosa que mencionar es que debido a los retrasos en la propagación, no hay un solo estado metaestable, sino una familia completa de ellos, y no hay una forma segura de identificar los estados metaestables. Se puede diseñar un circuito con una salida de tres estados (alto / bajo / metaestable) y organizar las cosas de modo que "alto" nunca se informe si la salida puede terminar baja, o viceversa, pero no hay garantía de que la salida no rebotará entre 'alto' y 'metaestable' (terminando 'alto'), o entre 'bajo' y 'metaestable' (terminando 'bajo').
supercat

+1 Esto es bueno, pero tiene más sentido después de leer la respuesta de @David Kessner. +2 para los gráficos.
Rusty

3

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.


2

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!


Todavía trabajo con sistemas basados ​​en 6502 como hobby. Sería bueno conocer algunos detalles de los problemas de metaestabilidad en los datos del bus. Ciertamente puedo imaginar que si el acumulador contiene $ FF y uno lee un valor que es $ 00 o $ 01, el acumulador podría terminar con cualquier valor posible. Sin embargo, antes de que se pudiera tomar cualquier rama, esperaría que dos ciclos más tuvieran que transcurrir, durante el cual las banderas se volverían a conectar dos veces. No puedo imaginar un estado metaestable que permanezca por tanto tiempo.
supercat

Esto fue algo que escuché de segunda o tercera mano hace unos 20 años, pero se originó de personas que sabían absolutamente lo que estaban haciendo: tenía que ver con la interfaz Tube en el procesador 6502 de segundo para la BBC Micro, y la lectura del estado banderas, y fue una vez una vez en la luna azul, pero lo suficientemente frecuente como para retrasar el lanzamiento del producto. No necesariamente habría tenido que durar 2 ciclos, ya que las señales probablemente se están bloqueando internamente en varias etapas de la tubería. Creo que también era la variante 6502 más rápida disponible en ese momento: 3MHz 65C02 ISTR.
mikeselectricstuff

Interesante. [Por cierto, ¿hay alguna forma de utilizar la puntuación sin que StackExchange lo mezcle?] En el comportamiento normal de, por ejemplo, "ADC 0xD000", la dirección se generaría en la fase 1 del cuarto ciclo, y los datos se enclavarían al final de la fase 2 de ese ciclo. Los datos se alimentarían en la ALU en la fase 1 del próximo ciclo (que sería la búsqueda de código de operación para la siguiente instrucción). El ciclo posterior sería la búsqueda de operandos. Si las cosas todavía fueran metaestables en ese punto, el sistema podría derrumbarse, pero eso parecería poco probable ya que los registros dinámicos se habrían vuelto a conectar dos veces.
supercat

No quiero decir que es imposible que la metaestabilidad del bus de datos afecte al 6502, porque sé que hay otros comportamientos extraños que no puedo explicar. Por ejemplo, el bus de datos se enclava durante la fase 2 del reloj y actúa durante la siguiente fase 1. Por lo tanto, no debería importar si cambia durante la fase 2, siempre que sea estable al final. Sin embargo, hay algunas instrucciones no documentadas, cuyo comportamiento se ve afectado por el contenido del bus de datos durante la primera parte del ciclo (demostrable en máquinas como C64 y Apple que obtienen video durante la fase 1). No sé cómo ...
supercat

... el comportamiento de esas instrucciones se ve afectado por el comportamiento del bus de datos temprano, pero sospecho que es una especie de condición de carrera extraña. IIRC, uno de los códigos de operación coincide con los patrones de decodificación para LDA #imm, LDX #imm y TAX, por lo que la salida de ALU se está asignando nuevamente a su entrada. Extraño.
supercat
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.