Qu'est-ce que la métastabilité?


15

Extrait de l'article Wikipedia Metastability in electronics :

La métastabilité en électronique est la capacité d'un système électronique numérique à persister pendant une durée illimitée dans un équilibre instable ou un état métastable. Dans des états métastables, le circuit peut ne pas être en mesure de s'installer dans un niveau logique stable «0» ou «1» dans le temps nécessaire au bon fonctionnement du circuit. Par conséquent, le circuit peut agir de manière imprévisible et entraîner une défaillance du système.

Cela semble être une bonne définition, mais qu'est-ce que cela signifie dans une application?

Du point de vue d'un concepteur d'électronique, quels sont quelques exemples de cas où cela pourrait se produire et où ce type de défaillance devrait-il être préoccupant?

Existe-t-il une définition plus pragmatique ou appliquée - quelque chose en termes plus spécifiques?


2
Leslie Lamport (il de la renommée $ \ LaTeX $) a écrit une bonne description de la métastabilité dans cet article: research.microsoft.com/users/lamport/pubs/buridan.pdf
markrages

@markrages Brilliant. Cela peut également arriver avec des chats qui tombent et des toasts beurrés .
Rusty

Réponses:


15

Réponse rapide: Si vous violez la configuration et maintenez le temps à l'entrée d'une bascule, la sortie sera imprévisible pendant un certain temps. Cette sortie imprévisible est appelée méta-stable (ou métastabilité).

Réponse longue: Lorsque la sortie est imprévisible, je veux dire qu'elle est imprévisible. Ce pourrait être élevé, ce pourrait être bas, ce pourrait être quelque part entre les deux, ou il pourrait osciller. Après cette période métastable, la sortie sera élevée ou faible, mais nous ne savons pas dans quelle direction cela ira jusqu'à ce qu'il se produise.

La durée pendant laquelle elle est imprévisible est cependant quelque peu prévisible. Il y a deux facteurs principaux qui déterminent la longueur de la période métastable: la vitesse de la bascule et la façon dont "près du bord" vous avez obtenu le timing.

La plupart des temps métastables sont assez courts, bien que la probabilité d'avoir un temps long soit non nulle. Théoriquement, vous pourriez avoir un temps métastable de l'ordre de quelques secondes, bien que les chances que cela se produise sont incroyablement rares. À mesure que la vitesse de la bascule augmente, le temps métastable moyen diminue - toutes choses étant égales par ailleurs.

Il y a un temps "imaginaire" dans la bascule, par rapport au bord de l'horloge, où vous êtes le plus susceptible aux problèmes de métastabilité. Exactement lorsque cela dépend de nombreux facteurs tels que la température, la tension, le processus, la phase de la lune, les sacrifices d'animaux et le parti politique auquel vous êtes affilié. Chaque fois que ce temps est, plus votre front d'entrée de données est proche de ce temps, plus le temps de métastabilité sera long.

La meilleure façon de gérer la métastabilité est de rendre toute votre logique synchrone et de ne violer aucun de vos temps de configuration et de maintien. Ceci est, bien sûr, difficile voire impossible pour des circuits de toute complexité. Donc, ce que nous faisons, c'est essayer de limiter les endroits où la métastabilité pourrait être un problème, puis traiter ces endroits.

La méthode normale serait de "doubler" les données. Cela signifie que deux bascules D en série avec la sortie du premier alimentant l'entrée du second. L'espoir est que si la première bascule devient métastable, la période métastable serait terminée avant qu'elle ne viole le temps de configuration / maintien de la seconde. En pratique, cela fonctionne assez bien. Dans les applications super critiques, il peut y avoir un "triple-clocking" en cours.


3
Des dépendances sur le type d'animal sacrifié?
Rusty

11

Un état métastable est similaire à un équilibre instable. Un exemple courant d'équilibre instable est un pendule inversé . Si vous pouvez équilibrer le pendule en position verticale, c'est un état stable. Cependant, si quelque chose pousse le levier d'un côté ou de l'autre (courants d'air ou vibrations du sol, par exemple), le pendule ne se remettra pas en position verticale, il tombera. Contraste avec un pendule régulier qui, s'il est poussé d'un côté, finira par se redresser à la verticale.

Des équilibres stables sont utilisés dans les systèmes électriques pour créer des éléments de stockage. Les équibria instables ne font pas de bons éléments de stockage (car ils perdent facilement leur état), mais existent souvent comme état parasite.

Un élément de stockage numérique commun est une paire d'onduleurs à couplage croisé:

Deux onduleurs connectés en boucle, sortie-à-entrée

L'élément de stockage a deux états stables, l'un où le nœud à gauche est à la tension d'alimentation et le nœud à droite est à la masse, et l'autre dans la condition opposée. Il existe également un état instable, dans lequel chaque nœud est à une tension intermédiaire.

Pour mieux comprendre comment survient l'état instable, rappelez la fonction de transfert d'un onduleur. Le tracé de la fonction de transfert montre la tension de sortie de l'onduleur pour une tension d'entrée donnée.

Fonction de transfert de l'onduleur

L'onduleur est non linéaire; une façon simple d'obtenir une solution approximative d'un circuit non linéaire consiste à tracer les caractéristiques du circuit; les intersections des tracés sont les solutions, ou en d'autres termes, les points où les caractéristiques électriques de tous les composants du circuit sont satisfaites. Normalement, cela se fait avec des tracés iv comme dans cet exemple de diode sur Wikipedia . Cependant, pour les onduleurs, nous le ferons avec des tracés vv. Superposition d'une deuxième fonction de transfert de l'onduleur sur le tracé (avec les axes inversés, car le deuxième onduleur est à l'envers:

Fonctions de transfert superposées pour les onduleurs dos à dos

Il y a trois intersections des parcelles: une à (0, Vs), une à (Vs, 0) et une à (Vs / 2, Vs / 2). L'état (Vs / 2, Vs / 2) est métastable. Après une petite perturbation de l'un ou l'autre des nœuds, le circuit se stabilisera presque toujours dans l'un des états stables plutôt que de revenir à (Vs / 2, Vs / 2).

La façon d'écrire une valeur sur l'élément de stockage à double onduleur consiste à forcer l'un des nœuds à la valeur souhaitée à l'aide d'un pilote plus fort que les onduleurs. Une façon courante de le faire est d'utiliser un transistor de passage:

Onduleurs à couplage croisé avec transistor de passage

Si vous connectez la grille du transistor de passage à l'horloge, vous avez un verrou D (je laisse de côté la structure de sortie). Lorsque l'horloge est élevée, ce qui permet au transistor de passage, le verrou est transparent - l'entrée passe directement à la sortie. Lorsque l'horloge est basse, le verrou conserve la valeur précédente. La métastabilité survient au moment où les échantillons de verrouillage sont détectés. Si l'entrée est une tension haute ou basse stable lorsque le verrou échantillonne, cela fonctionnera correctement. Cependant, si l'entrée se situe autour du point Vs / 2 lorsque les échantillons de verrouillage, il est possible que le verrouillage se retrouve dans l'état métastable (Vs / 2, Vs / 2). Une fois qu'il est dans l'état métastable, il peut y rester indéfiniment (en supposant que le verrou n'est plus synchronisé), mais comme il s'agit d'un équilibre instable, quelque chose se produit généralement assez rapidement pour le faire sortir de l'état métastable.

Quand s'inquiéter de la métastabilité

Si vos éléments de stockage deviennent métastables, vous perdez au moins une partie du budget de synchronisation pour la logique en aval. La logique ne peut pas effectuer l'évaluation souhaitée tant que l'état métastable n'est pas résolu. Dans le pire des cas, l'état métastable persiste ou se propage via la logique, et les éléments de stockage en aval deviennent également métastables, ou plusieurs éléments de stockage associés capturent des valeurs incohérentes.

Une logique synchrone correctement conçue et fonctionnelle n'a pas de problèmes de métastabilité. La période d'horloge est plus longue que le temps d'évaluation pour la logique, toutes les entrées de bascule sont stables au bord d'horloge suivant (exigence de configuration satisfaite), et elles chargent toutes une valeur valide.

Certaines des situations courantes où la métastabilité est un problème sont les suivantes:

  • Échantillonnage logique d'une entrée externe, par exemple, un interrupteur sur le panneau avant, ou la sortie de circuits de contrôle qui peuvent passer à tout moment (sous-tension, surtempérature).
  • Logique utilisant plusieurs horloges qui n'ont pas de relation synchrone. Cela se produit souvent avec des interfaces d'E / S qui ont des exigences d'horloge particulières, mais cela se produit également en interne lorsque différentes parties d'une puce ont des exigences de performances différentes. Par exemple, toute la logique de votre processeur 3 GHz ne fonctionne pas réellement à 3 GHz. (Un CPU n'est pas un bon exemple, cependant, car la plupart des horloges d'un CPU sont des multiples synchrones les unes des autres.)

Généralement une bonne réponse, mais une autre chose à mentionner est qu'en raison des retards de propagation, il n'y a pas un seul état métastable mais plutôt toute une famille d'entre eux, et il n'y a pas de moyen certain d'identifier les états métastables. On peut concevoir un circuit avec une sortie à trois états (haut / bas / métastable) et arranger les choses de sorte que "haut" ne soit jamais signalé si la sortie peut finir par devenir basse, ou vice versa, mais il n'y a aucune garantie que la sortie ne rebondira pas entre «haut» et «métastable» (finissant «haut»), ni entre «bas» et «métastable» (finissant «bas»).
supercat

+1 C'est une bonne chose mais cela a plus de sens après avoir lu la réponse de @David Kessner. +2 Pour les graphiques.
Rusty

3

Un signal métastable est un signal qui peut arbitrairement sembler être haut ou bas dans n'importe quel modèle arbitraire pendant une durée arbitraire. Si le signal alimente plusieurs portes directement ou indirectement, il est possible que certaines de ces portes le «voient» haut tandis que d'autres le voient bas. Trucs méchants.

Pour les systèmes avec une seule horloge, les signaux métastables peuvent souvent être traités en passant par deux verrous. Un problème plus délicat survient lors du déclenchement des horloges. Il existe de nombreux circuits (en particulier à l'aide de verrous RS) qui fonctionneraient à merveille si la métastabilité n'était pas possible, mais qui peuvent, si la métastabilité se produit, finir par générer des impulsions d'horloge runt (qui à leur tour peuvent provoquer une métastabilité en aval).

Par ailleurs, un autre point important à faire concernant la métastabilité: le temps de propagation d'un verrou indique quand, si les temps d'échantillonnage et de maintien sont respectés , la sortie sera stable à sa nouvelle valeur. Si les temps de configuration et de maintien ne sont pas respectés, rien ne garantit si ou quand la sortie commutera ou non, jusqu'à ce que le verrou reçoive un événement de synchronisation valide. Même si la sortie «semble» passer proprement, il n'y a aucune garantie qu'elle ne reviendra pas spontanément.


2

Le cas classique est si vous violez les temps de configuration / maintien pour un verrou synchrone, et c'est un problème dont vous devez être conscient lors de la conception de FPGA (je suis sûr que Xilinx et Altera auront des annexes à ce sujet). Si un signal peut arriver à n'importe quel moment aléatoire, vous ne pouvez jamais être sûr que lorsque vous le synchronisez, il ne change pas dans les spécifications de la fenêtre de temps de configuration / maintien. Ce qui peut arriver, c'est qu'au lieu que la sortie de verrouillage augmente ou diminue à l'heure spécifiée après le front d'horloge, elle peut trembler pendant un certain temps avant de se stabiliser. La façon normale d'éviter cela est d'utiliser un verrou à 2 étages, avec la même horloge ou une horloge retardée ou déphasée en fonction de l'équilibre entre vos besoins de latence et la probabilité de métastabilité. Cela permet au premier temps de verrouillage de se stabiliser avant que le second verrou ne verrouille un état stable. Incidemment, c'est quelque chose que les microcontrôleurs doivent gérer en interne, car les signaux d'E / S externes sont généralement asynchrones à l'horloge du processeur, de sorte que les ports d'E / S ont souvent des dispositions de verrouillage doubles pour éviter les problèmes, et le logiciel n'a pas à s'en soucier. . Un rappel vague de la lecture il y a de nombreuses années d'un problème avec le 6502, où une lecture de données de bus qui a changé en dehors de la spécification de temps de configuration / maintien pourrait entraîner une branche vers une adresse qui n'était ni la cible de la branche ni l'instruction suivante, comme certains internes l'état est devenu métastable. Cette vidéo montre quelques exemples: Un rappel vague de la lecture il y a de nombreuses années d'un problème avec le 6502, où une lecture de données de bus qui a changé en dehors de la spécification de temps de configuration / maintien pourrait entraîner une branche vers une adresse qui n'était ni la cible de la branche ni l'instruction suivante, comme certains internes l'état est devenu métastable. Cette vidéo montre quelques exemples: Un rappel vague de la lecture il y a de nombreuses années d'un problème avec le 6502, où une lecture de données de bus qui a changé en dehors de la spécification de temps de configuration / maintien pourrait entraîner une branche vers une adresse qui n'était ni la cible de la branche ni l'instruction suivante, comme certains internes l'état est devenu métastable. Cette vidéo montre quelques exemples:http://www.youtube.com/watch?v=tKHCwjWMMyg

Une analogie est que si vous lancez une balle à quelqu'un - la plupart du temps, elle l'attrape ou la laisse tomber / manque, donc après un certain temps après le lancer, il la tiendra ou non. Mais de temps en temps, ils tâtonnent pendant un certain temps avant de l'attraper ou de le laisser tomber, de sorte que leur état ne tient ni ne tombe - c'est l'état métastable!


Je travaille toujours avec des systèmes basés sur 6502 comme passe-temps. Ce serait bien de connaître certains détails des problèmes de métastabilité sur les données de bus. Je peux certainement imaginer que si l'accumulateur contient $ FF et que l'on lit une valeur qui est soit 00 $ soit 01 $, l'accumulateur pourrait se retrouver avec n'importe quelle valeur possible. Avant qu'une branche ne puisse être prise, cependant, je m'attendrais à ce que deux cycles supplémentaires se soient écoulés, au cours desquels les drapeaux seraient réenclenchés deux fois. Je ne peux pas imaginer un état métastable restant aussi longtemps.
supercat

C'est quelque chose que j'ai entendu de seconde ou de troisième main il y a peut-être 20 ans, mais cela provenait de personnes qui savaient absolument ce qu'ils faisaient - c'était à cause de l'interface Tube sur le second processeur 6502 pour le BBC Micro, et la lecture de l'état drapeaux, et était une occurrence une fois na-blue-moon, mais suffisamment fréquente pour retarder le lancement du produit. Il n'aurait pas nécessairement dû durer 2 cycles, car les signaux sont probablement verrouillés en interne à différentes étapes du pipeline. Je pense que c'était aussi la variante 6502 la plus rapide disponible à l'époque - 3MHz 65C02 ISTR.
mikeselectricstuff

Intéressant. [BTW, existe-t-il un moyen d’utiliser la ponctuation sans que StackExchange l’accompagne?] 2 de ce cycle. Les données alimenteraient l'ALU dans la phase 1 du cycle suivant (qui serait l'extraction de l'opcode pour l'instruction suivante). Le cycle suivant serait la recherche d'opérande. Si les choses étaient encore métastables à ce moment-là, le système pourrait fondre, mais cela semblerait peu probable car les registres dynamiques auraient été relogés deux fois.
supercat

Je ne veux pas dire qu'il est impossible que la métastabilité du bus de données affecte le 6502, car je sais qu'il y a d'autres comportements étranges que je ne peux pas expliquer. Par exemple, le bus de données est verrouillé pendant la phase 2 de l'horloge et est pris en compte au cours de la phase 1. Cela ne devrait donc pas avoir d'importance s'il change pendant la phase 2 à condition qu'il soit stable à la fin. Il existe cependant quelques instructions non documentées, dont le comportement est affecté par le contenu du bus de données pendant la première partie du cycle (démontrable sur des machines comme le C64 et Apple qui récupèrent la vidéo pendant la phase 1). Je ne sais pas comment ...
supercat

... le comportement de ces instructions est en fait affecté par le comportement initial du bus de données, mais je soupçonne que c'est une sorte de condition de course étrange. IIRC, l'un des opcodes correspond aux modèles de décodage pour LDA #imm, LDX #imm et TAX, de sorte que la sortie de l'ALU est mappée à son entrée. Bizarre.
supercat
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.