16 votos

¿Qué es la metaestabilidad?

Del artículo de Wikipedia La metaestabilidad en la electrónica :

La metaestabilidad en electrónica es la capacidad de un sistema electrónico digital de persistir durante un tiempo ilimitado en un equilibrio inestable o estado metaestable metaestable. En los estados metaestables, el circuito puede ser incapaz de establecerse en un nivel lógico estable "0" o "1" dentro del el tiempo necesario para el correcto funcionamiento del funcionamiento del circuito. Como resultado, el circuito puede actuar de manera impredecible, y puede conducir a un fallo del sistema.

Parece una buena definición, pero ¿qué significa en una aplicación?

Desde el punto de vista de un diseñador de electrónica, ¿cuáles son algunos ejemplos de cuándo podría ocurrir esto y dónde debería preocupar este tipo de fallo?

¿Existe una definición más pragmática o aplicada, algo en términos más específicos?

2 votos

Leslie Lamport (el de $\LaTeX$ fama) escribió una buena descripción de la metaestabilidad en este documento: research.microsoft.com/users/lamport/pubs/buridan.pdf

0 votos

@markrages Brillante. Esto también puede ocurrir con los gatos que caen y las tostadas con mantequilla .

19voto

Respuesta rápida: Si se viola el tiempo de preparación y retención en la entrada de un flip flop, la salida será impredecible durante cierto tiempo. Esa salida impredecible se llama metaestable (o metaestabilidad).

Respuesta larga: Cuando la salida es imprevisible, me refiero a que es imprevisible. Podría ser alta, podría ser baja, podría estar en algún punto intermedio, o podría oscilar. Después de este periodo metaestable, la salida será alta o baja, pero no sabemos qué camino tomará hasta que ocurra.

Sin embargo, la cantidad de tiempo que es impredecible es algo predecible. Hay dos factores principales que determinan la duración del periodo metaestable: La velocidad del flip-flop, y lo "cerca del borde" que tienes la sincronización.

La mayoría de los tiempos metaestables son bastante cortos, aunque la probabilidad de tener un tiempo largo no es nula. En teoría, se 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 medio disminuye, en igualdad de condiciones.

Hay un momento "imaginario" en el flip-flop, relativo al borde del reloj, en el que se es más susceptible de sufrir problemas de metaestabilidad. El momento exacto 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 te afilies. Sea cual sea ese momento, cuanto más cerca esté el borde de entrada de datos de ese momento, más largo 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 preparación y retención. Esto es, por supuesto, difícil o imposible para circuitos de cualquier complejidad. Así que 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 el de "doble reloj" de los datos. Es decir, tener 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 terminaría antes de violar el tiempo de preparación/retención del segundo. En la práctica, esto funciona bastante bien. En aplicaciones supercríticas puede haber algún "triple bloqueo".

3 votos

¿Depende del tipo de animal sacrificado?

11voto

Andy Puntos 1028

Un estado metaestable es similar a un equilibrio inestable. Un ejemplo común de un equilibrio inestable es un péndulo invertido . Si puedes equilibrar el péndulo en posición vertical, ese es un estado estable. Sin embargo, si algo empuja la palanca hacia un lado u otro (corrientes de aire o vibraciones del suelo, por ejemplo), el péndulo no volverá a la posición vertical, sino que caerá. En cambio, un péndulo normal, si es empujado hacia un lado, acabará volviendo a la vertical.

Los equilibrios estables se utilizan en los sistemas eléctricos para crear elementos de almacenamiento. Los equilibrios inestables no son buenos elementos de almacenamiento (ya que pierden su estado con facilidad), pero suelen existir como estado parásito.

Un elemento de almacenamiento digital común es un par de inversores acoplados en cruz:

Two inverters connected in a loop, output-to-input

El elemento de almacenamiento tiene dos estados estables, uno en el que el nodo de la izquierda está a la tensión de alimentación y el nodo de la derecha a tierra, y el otro en la condición opuesta. También hay un estado inestable, en el que cada nodo está a una tensión intermedia.

Para entender mejor cómo surge el estado inestable, recordemos la función de transferencia de un inversor. El gráfico de la función de transferencia muestra la tensión de salida del inversor para una tensión de entrada determinada.

Inverter transfer function

El inversor es no 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 los trazados son las soluciones, o lo que es lo mismo, los puntos donde se satisfacen las características eléctricas de todos los componentes del circuito. Normalmente, esto se hace con gráficos i-v como en este ejemplo de diodo en Wikipedia . Sin embargo, para los inversores, lo haremos con gráficos v-v. Superponiendo 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:

Overlayed transfer functions for back-to-back inverters

Hay tres intersecciones de los gráficos: una en (0, Vs), otra en (Vs, 0) y otra 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 doble inversor 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 hacerlo es con un transistor de paso:

Cross-coupled inverters with pass transistor

Si conectas la puerta del transistor de paso al reloj, tienes un latch D (estoy omitiendo la estructura de salida). Cuando el reloj es alto, habilitando el transistor de paso, el latch es transparente - la entrada pasa directamente a la salida. Cuando el reloj está bajo, el latch mantiene el valor anterior. La metaestabilidad surge en el momento en que el latch muestrea. Si la entrada es un voltaje alto o bajo estable cuando el latch muestrea, 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 (asumiendo que el latch no se muestrea de nuevo), pero como es un equilibrio inestable, algo suele ocurrir relativamente rápido para sacarlo del estado metaestable.

Cuándo preocuparse por la metaestabilidad

Si tus elementos de almacenamiento se vuelven metaestables, entonces estás perdiendo, como mínimo, parte del presupuesto de tiempo para la lógica descendente. La lógica no puede realizar la evaluación deseada hasta que el estado metaestable se resuelva. 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.

Una lógica sincrónica correctamente diseñada y en funcionamiento no tiene problemas de metaestabilidad. El periodo de reloj es más largo que el tiempo de evaluación de la lógica, todas las entradas del flip-flop son estables en el siguiente flanco de reloj (requisito de configuración satisfecho) 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 transitar en cualquier momento (subtensión, sobretemperatura).
  • Lógica que utiliza múltiples relojes que no tienen una relación sincrónica. Esto suele ocurrir con las 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 de tu CPU de 3 GHz funciona realmente a 3 GHz. (Aunque una CPU no es un gran ejemplo, ya que muchos de los relojes de una CPU son múltiplos sincrónicos entre sí).

0 votos

La respuesta es muy buena, pero otra cosa que hay que mencionar es que, debido a los retrasos de propagación, no hay un único estado metaestable, sino toda una familia de ellos, y no hay una forma segura de identificar los estados metaestable. Uno puede diseñar un circuito con una salida de tres estados (alto/bajo/metaestable), y arreglar las cosas para que "alto" nunca sea reportado si la salida puede terminar siendo baja, o viceversa, pero no hay garantía de que la salida no rebote entre "alto" y "metaestable" (terminando "alto"), o entre "bajo" y "metaestable" (terminando "bajo").

0 votos

+1 Este es un buen material, pero tiene más sentido después de leer la respuesta de @David Kessner. +2 Por los gráficos.

3voto

Alex Andronov Puntos 178

Una señal metaestable es aquella que puede aparecer arbitrariamente como alta o baja en cualquier patrón arbitrario durante un tiempo arbitrario. Si la señal alimenta directamente a varias compuertas o indirectamente es posible que algunas de esas puertas lo "vean" alto mientras otras lo ven bajo. Es una cosa desagradable.

En los sistemas con un solo reloj, las señales metaestables suelen solucionarse pasando por dos cierres. El problema es más complicado cuando se trata de sincronizar relojes. Hay muchos circuitos (especialmente los que utilizan latches RS) que funcionarían de maravilla si la metaestabilidad no fuera posible, pero que pueden, si se produce la metaestabilidad, acabar generando pulsos de reloj rúnicos (que a su vez pueden causar metaestabilidad aguas abajo).

Por cierto, otro punto importante a tener en cuenta sobre la metaestabilidad: el tiempo de propagación de un latch 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 establecimiento y retención, no hay garantía de que la salida conmute o no, hasta que el latch reciba un evento de sincronización válido. Incluso si la salida "parece" conmutar limpiamente, no hay garantía de que no vuelva a conmutar espontáneamente.

2voto

Sixty4Bit Puntos 2664

El caso clásico es si se violan los tiempos de configuración/retención de un latch síncrono, y es un problema que hay que tener en cuenta al diseñar FPGAs (estoy seguro de que Xilinx y Altera tendrán notas de aplicación sobre esto). Si una señal puede llegar en cualquier momento al azar, nunca puedes estar seguro de que cuando la cronometras, no está cambiando dentro de la especificación de la ventana de tiempo de configuración/retención. Lo que puede ocurrir es que en lugar de que la salida del latch se ponga alta o baja en el momento especificado después del flanco de reloj, puede vacilar durante un tiempo antes de establecerse en un estado estable. La forma normal de evitar esto es utilizar un latch de dos etapas, ya sea con el mismo reloj o con un reloj retrasado o desfasado, dependiendo del equilibrio entre los requisitos de latencia y la probabilidad de metaestabilidad. Esto permite que el primer latch tenga tiempo de estabilizarse antes de que el segundo latch alcance un estado estable. Por cierto, esto es algo con lo que los microcontroladores tienen que lidiar internamente, ya que las señales de E/S externas suelen ser asíncronas al reloj de la CPU, por lo que los puertos de E/S suelen tener arreglos de latching dual para evitar problemas, y el software no tiene que preocuparse por ello. Recuerdo vagamente haber leído hace muchos años un problema con el 6502, en el que una lectura de datos en el bus que cambiaba fuera de la especificación de tiempo de preparación/retención podía causar una bifurcación a una dirección que no era ni el objetivo de la bifurcación ni la siguiente instrucción, ya que algún estado interno se volvía metaestable. Este video muestra algunos ejemplos: http://www.youtube.com/watch?v=tKHCwjWMMyg

Una analogía es que si se lanza una pelota a alguien, la mayoría de las veces la coge o la suelta o la pierde, por lo que después de un tiempo determinado desde el lanzamiento, la tendrá en sus manos o no. Pero, en ocasiones, la persona tantea durante un tiempo antes de atraparla o dejarla caer, por lo que su estado no es ni de agarre ni de caída: ¡este es el estado metaestable!

0 votos

Todavía trabajo con sistemas basados en el 6502 como hobby. Estaría bien conocer algunos detalles de los problemas de metaestabilidad en los datos del bus. Ciertamente puedo imaginar que si el acumulador mantiene $FF and one reads a value that's either $ 00 o $01, el acumulador podría terminar con cualquier valor posible. Sin embargo, antes de que se pueda tomar cualquier bifurcación, yo esperaría que tuvieran que transcurrir dos ciclos más, durante los cuales las banderas se reajustarían dos veces. No puedo imaginar que un estado metaestable permanezca tanto tiempo.

0 votos

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

0 votos

Interesante. En el comportamiento normal de, por ejemplo, "ADC 0xD000", la dirección se emitirí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 entrarían en la ALU en la fase 1 del siguiente ciclo (que sería la búsqueda del opcode para la siguiente instrucción). El ciclo siguiente sería la obtención del operando. Si las cosas todavía fueran metaestables en ese punto, el sistema podría fundirse, pero eso parece poco probable, ya que los registros dinámicos se habrían reajustado dos veces.

0voto

Crystal Puntos 6

Creo que vale la pena señalar que la metaestabilidad es una manifestación de una ley de la naturaleza: Principio de Buridán ("No se puede formar en un tiempo limitado una visión asentada de una variable continua"). Lo mejor que puedes hacer es determinar la probabilidad de un fallo y dejar el tiempo suficiente (es decir, en esta aplicación, más registros secuenciales) para que esa probabilidad sea lo suficientemente baja para tu aplicación.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X