Was ist Metastabilität?


15

Aus dem Wikipedia-Artikel Metastabilität in der Elektronik :

Metastabilität in der Elektronik ist die Fähigkeit eines digitalen elektronischen Systems, für eine unbegrenzte Zeit in einem instabilen Gleichgewicht oder metastabilen Zustand zu bestehen. In metastabilen Zuständen kann der Schaltkreis möglicherweise nicht in der Zeit, die für einen ordnungsgemäßen Schaltkreisbetrieb erforderlich ist, auf einen stabilen logischen Pegel '0' oder '1' absinken. Infolgedessen kann die Schaltung auf unvorhersehbare Weise arbeiten und zu einem Systemausfall führen.

Das scheint eine gute Definition zu sein, aber was bedeutet das in einer Anwendung?

Was sind aus Sicht eines Elektronikdesigners einige Beispiele dafür, wann dies auftreten könnte und wo diese Art von Fehler von Belang sein sollte?

Gibt es eine pragmatischere oder angewandte Definition - etwas in spezifischeren Begriffen?


2
Leslie Lamport (er von $ \ LaTeX $ Ruhm) hat eine gute Beschreibung der Metastabilität in diesem
Artikel

@ markrages Genial. Dies kann auch bei herabfallenden Katzen und gebuttertem Toast passieren .
Rusty

Antworten:


15

Schnelle Antwort: Wenn Sie das Setup und die Haltezeit am Eingang eines Flip-Flops verletzen, ist der Ausgang für einige Zeit unvorhersehbar. Diese unvorhersehbare Ausgabe wird als metastabil (oder Metastabilität) bezeichnet.

Lange Antwort: Wenn die Ausgabe nicht vorhersehbar ist, meine ich, dass sie nicht vorhersehbar ist. Es könnte hoch sein, es könnte niedrig sein, es könnte irgendwo dazwischen sein oder es könnte schwingen. Nach dieser metastabilen Periode wird die Ausgabe hoch oder niedrig sein, aber wir wissen nicht, in welche Richtung es gehen wird, bis es passiert.

Die Zeit, die nicht vorhersehbar ist, ist jedoch einigermaßen vorhersehbar. Es gibt zwei Hauptfaktoren, die die Länge der metastabilen Periode bestimmen: Die Geschwindigkeit des Flip-Flops und wie "nahe am Rand" Sie das Timing erhalten haben.

Die meisten metastabilen Zeiten sind ziemlich kurz, obwohl die Wahrscheinlichkeit einer langen Zeit ungleich Null ist. Theoretisch könnte man eine metastabile Zeit in der Größenordnung von Sekunden haben, obwohl die Chancen, dass dies passiert, unglaublich selten sind. Wenn die Geschwindigkeit des Flip-Flops zunimmt, nimmt die durchschnittliche metastabile Zeit ab - alle anderen Dinge sind gleich.

Es gibt eine "imaginäre" Zeit im Flip-Flop relativ zur Taktflanke, zu der Sie am anfälligsten für Metastabilitätsprobleme sind. Wann genau, hängt von vielen Faktoren ab, wie Temperatur, Spannung, Prozess, Mondphase, Tieropfern und welcher politischen Partei Sie angehören. Je näher Ihre Dateneingabe an dieser Zeit ist, desto länger ist die Metastabilitätszeit.

Der beste Weg, um mit Metastabilität umzugehen, besteht darin, Ihre gesamte Logik synchron zu machen und keine Ihrer Setup- und Haltezeiten zu verletzen. Dies ist natürlich für Schaltungen beliebiger Komplexität schwierig bis unmöglich. Wir versuchen also, die Stellen einzuschränken, an denen Metastabilität ein Problem sein könnte, und dann diese Stellen zu behandeln.

Die normale Methode wäre, die Daten "doppelt zu takten". Das heißt, Sie müssen zwei D-Flip-Flops in Reihe schalten, wobei der Ausgang des ersten den Eingang des zweiten speist. Die Hoffnung ist, dass, wenn das erste Flip-Flop metastabil wird, die metastabile Periode vorbei ist, bevor sie die Setup / Hold-Zeit des zweiten verletzt. In der Praxis funktioniert das ziemlich gut. In superkritischen Anwendungen kann es zu einer "Dreifachtaktung" kommen.


3
Abhängigkeiten von der Art des getöteten Tieres?
Rusty

11

Ein metastabiler Zustand ähnelt einem instabilen Gleichgewicht. Ein häufiges Beispiel für ein instabiles Gleichgewicht ist ein umgekehrtes Pendel . Wenn Sie das Pendel in vertikaler Position ausbalancieren können, ist dies ein stabiler Zustand. Wenn jedoch etwas den Hebel zur Seite drückt (z. B. Luftströmungen oder Bodenschwingungen), kehrt das Pendel nicht in die vertikale Position zurück, sondern fällt nach unten. Im Gegensatz dazu wird ein normales Pendel, das nach einer Seite gedrückt wird, irgendwann wieder in die Vertikale zurückkehren.

Stabile Gleichgewichte werden in elektrischen Systemen zur Erzeugung von Speicherelementen verwendet. Instabile Gleichungen sind keine guten Speicherelemente (da sie leicht ihren Zustand verlieren), sondern existieren oft als parasitärer Zustand.

Ein übliches digitales Speicherelement ist ein Paar kreuzgekoppelter Wechselrichter:

Zwei Wechselrichter, die in einer Schleife von Ausgang zu Eingang verbunden sind

Das Speicherelement weist zwei stabile Zustände auf, wobei der eine Knoten links an der Versorgungsspannung und der rechte Knoten an der Masse liegt und der andere im entgegengesetzten Zustand. Es gibt auch einen instabilen Zustand, in dem sich jeder Knoten auf einer Zwischenspannung befindet.

Um besser zu verstehen, wie der instabile Zustand entsteht, rufen Sie die Übertragungsfunktion für einen Wechselrichter auf. Das Diagramm der Übertragungsfunktion zeigt die Ausgangsspannung des Wechselrichters für eine bestimmte Eingangsspannung.

Wechselrichter-Übertragungsfunktion

Der Wechselrichter ist nicht linear. Eine einfache Möglichkeit, eine ungefähre Lösung einer nichtlinearen Schaltung zu erhalten, besteht darin, die Schaltungseigenschaften aufzuzeichnen. Die Schnittpunkte der Diagramme sind die Lösungen oder mit anderen Worten die Punkte, an denen die elektrischen Eigenschaften aller Komponenten der Schaltung erfüllt sind. Normalerweise geschieht dies mit iv-Plots wie in diesem Diodenbeispiel bei Wikipedia . Bei den Wechselrichtern machen wir dies jedoch mit vv-Plots. Überlagern einer zweiten Inverterübertragungsfunktion auf dem Plot (mit vertauschten Achsen, da der zweite Inverter rückwärts ist:

Überlagerte Übertragungsfunktionen für Wechselrichter

Es gibt drei Schnittpunkte der Diagramme: einen bei (0, Vs), einen bei (Vs, 0) und einen bei (Vs / 2, Vs / 2). Der Zustand (Vs / 2, Vs / 2) ist metastabil. Nach einer kleinen Störung eines Knotens wird die Schaltung fast immer in einen der stabilen Zustände übergehen, anstatt zu (Vs / 2, Vs / 2) zurückzukehren.

Um einen Wert in das Speicherelement mit zwei Wechselrichtern zu schreiben, muss einer der Knoten mit einem Treiber, der stärker als die Wechselrichter ist, auf den gewünschten Wert gesetzt werden. Ein üblicher Weg dies zu tun ist mit einem Durchlasstransistor:

Kreuzgekoppelte Wechselrichter mit Durchlasstransistor

Wenn Sie das Gate des Durchlasstransistors mit dem Takt verbinden, haben Sie einen D-Latch (ich lasse die Ausgangsstruktur weg). Wenn der Takt hoch ist und den Durchlasstransistor aktiviert, ist der Zwischenspeicher transparent - der Eingang gelangt direkt zum Ausgang. Wenn der Takt niedrig ist, hält der Zwischenspeicher den vorherigen Wert. Die Metastabilität tritt in dem Moment auf, in dem die Latch-Samples abgetastet werden. Wenn der Eingang beim Abtasten des Signalspeichers eine stabile Hoch- oder Niederspannung aufweist, funktioniert er ordnungsgemäß. Wenn der Eingang sich jedoch um den Vs / 2-Punkt befindet, wenn der Latch abtastet, besteht die Möglichkeit, dass der Latch im metastabilen Zustand (Vs / 2, Vs / 2) endet. Sobald es sich im metastabilen Zustand befindet, kann es unbegrenzt dort bleiben (vorausgesetzt, der Latch wird nicht erneut getaktet), aber da es sich um ein instabiles Gleichgewicht handelt, geschieht etwas normalerweise relativ schnell, um es aus dem metastabilen Zustand herauszuschlagen.

Wann sollte man sich um die Metastabilität sorgen?

Wenn Ihre Speicherelemente metastabil werden, verlieren Sie zumindest einen Teil des Zeitbudgets für die nachgelagerte Logik. Die Logik kann die gewünschte Auswertung erst durchführen, wenn der metastabile Zustand behoben ist. Im schlimmsten Fall bleibt der metastabile Zustand bestehen oder breitet sich durch Logik aus, und nachgeschaltete Speicherelemente werden ebenfalls metastabil, oder mehrere verwandte Speicherelemente erfassen inkonsistente Werte.

Richtig entworfene und funktionierende synchrone Logik hat keine Probleme mit der Metastabilität. Die Taktperiode ist länger als die Auswertezeit für die Logik, alle Flip-Flop-Eingänge sind bei der nächsten Taktflanke stabil (Setup-Anforderung erfüllt) und laden alle einen gültigen Wert.

Einige der häufigsten Situationen, in denen Metastabilität ein Problem darstellt, sind:

  • Logikabtastung eines externen Eingangs, z. B. eines Schalters auf der Vorderseite, oder des Ausgangs von Überwachungsschaltungen, die jederzeit übergehen können (Unterspannung, Übertemperatur).
  • Logik mit mehreren Uhren, die keine synchrone Beziehung haben. Dies tritt häufig bei E / A-Schnittstellen mit bestimmten Taktanforderungen auf, tritt jedoch auch intern auf, wenn verschiedene Teile eines Chips unterschiedliche Leistungsanforderungen haben. Beispielsweise läuft nicht die gesamte Logik Ihrer 3-GHz-CPU mit 3 GHz. (Eine CPU ist jedoch kein gutes Beispiel, da viele der Takte in einer CPU synchrone Vielfache voneinander sind.)

Sehr schöne Antwort, aber eine andere Sache, die zu erwähnen ist, ist, dass es aufgrund von Verzögerungen bei der Weitergabe keinen einzelnen metastabilen Zustand gibt, sondern eine ganze Familie von ihnen, und es gibt keine sichere Möglichkeit, metastabile Zustände zu identifizieren. Man kann eine Schaltung mit einem Ausgang mit drei Zuständen (hoch / niedrig / metastabil) entwerfen und die Dinge so anordnen, dass "hoch" niemals gemeldet wird, wenn der Ausgang niedrig wird, oder umgekehrt, aber es gibt keine Garantie für den Ausgang springt nicht zwischen 'hoch' und 'metastabil' (am Ende 'hoch') oder zwischen 'niedrig' und 'metastabil' (am Ende 'niedrig').
Supercat

+1 Das ist eine gute Sache, macht aber mehr Sinn, nachdem Sie die Antwort von David Kessner gelesen haben. +2 Für die Grafik.
Rusty

3

Ein metastabiles Signal ist eines, das in einem beliebigen Muster für eine beliebige Zeitdauer willkürlich als hoch oder niedrig erscheint. Wenn das Signal mehrere Gatter direkt oder indirekt speist, ist es möglich, dass einige dieser Gatter es hoch "sehen", während andere es niedrig sehen. Böses Zeug.

Bei Systemen mit einem einzigen Takt können metastabile Signale häufig durch zwei Latches verarbeitet werden. Ein kniffligeres Problem tritt beim Ansteuern von Uhren auf. Es gibt viele Schaltkreise (insbesondere mit RS-Latches), die wunderbar funktionieren würden, wenn keine Metastabilität möglich wäre, die jedoch bei Auftreten von Metastabilität unregelmäßige Taktimpulse erzeugen können (was wiederum eine nachgeschaltete Metastabilität verursachen kann).

Im Übrigen ist ein weiterer wichtiger Punkt in Bezug auf die Metastabilität zu beachten: Die Laufzeit eines Latchs gibt an, wann die Ausgabe bei Einhaltung der Abtast- und Haltezeiten auf ihrem neuen Wert stabil ist. Wenn die Rüst- und Haltezeiten nicht eingehalten werden, kann nicht garantiert werden, ob oder wann der Ausgang schaltet oder nicht, bis der Latch ein gültiges Taktereignis empfängt. Selbst wenn der Ausgang sauber zu schalten scheint, gibt es keine Garantie, dass er nicht spontan zurückschaltet.


2

Der klassische Fall ist, wenn Sie die Setup- / Hold-Zeiten für einen synchronen Latch verletzen, und dies ist ein Problem, das Sie beim Entwerfen von FPGAs berücksichtigen müssen (ich bin sicher, dass Xilinx und Altera diesbezüglich Hinweise haben werden). Wenn ein Signal zu einem beliebigen Zeitpunkt eingehen kann, können Sie niemals sicher sein, dass es sich beim Takten nicht innerhalb der Setup / Hold-Zeitfensterspezifikation ändert. Was passieren kann, ist, dass der Latch-Ausgang nicht zum festgelegten Zeitpunkt nach der Taktflanke hoch oder niedrig geht, sondern eine Weile schwankt, bevor er sich in einem stabilen Zustand einstellt. Die normale Möglichkeit, dies zu verhindern, ist die Verwendung eines zweistufigen Latchs, entweder mit demselben Takt oder mit einem verzögerten oder phasenverschobenen Takt, abhängig vom Gleichgewicht zwischen Ihren Latenzanforderungen und der Wahrscheinlichkeit der Metastabilität. Dies ermöglicht es der ersten Verriegelungszeit, sich zu stabilisieren, bevor die zweite Verriegelung einen stabilen Zustand verriegelt. Übrigens, Dies ist etwas, mit dem sich Mikrocontroller intern befassen müssen, da externe E / A-Signale normalerweise asynchron zum CPU-Takt sind, sodass E / A-Ports häufig doppelte Verriegelungsanordnungen aufweisen, um Probleme zu vermeiden, und die Software sich nicht darum kümmern muss . Eine vage Erinnerung an die Lektüre vor vielen Jahren über ein Problem mit dem 6502, bei dem ein Buslesen von Daten, die sich außerhalb der Setup- / Haltezeitspezifikation geändert haben, eine Verzweigung zu einer Adresse verursachen könnte, die weder das Verzweigungsziel noch die nächste Anweisung war, wie einige interne Zustand ging metastabil. Dieses Video zeigt einige Beispiele: Eine vage Erinnerung an die Lektüre vor vielen Jahren über ein Problem mit dem 6502, bei dem ein Buslesen von Daten, die sich außerhalb der Setup- / Haltezeitspezifikation geändert haben, eine Verzweigung zu einer Adresse verursachen könnte, die weder das Verzweigungsziel noch die nächste Anweisung war, wie einige interne Zustand ging metastabil. Dieses Video zeigt einige Beispiele: Eine vage Erinnerung an die Lektüre vor vielen Jahren über ein Problem mit dem 6502, bei dem ein Buslesen von Daten, die sich außerhalb der Setup- / Haltezeitspezifikation geändert haben, eine Verzweigung zu einer Adresse verursachen könnte, die weder das Verzweigungsziel noch die nächste Anweisung war, wie einige interne Zustand ging metastabil. Dieses Video zeigt einige Beispiele:http://www.youtube.com/watch?v=tKHCwjWMMyg

Eine Analogie ist, wenn man jemandem einen Ball wirft - meistens fängt er ihn oder lässt ihn fallen / verpasst er ihn, so dass er ihn nach einer bestimmten Zeit nach dem Werfen entweder hält oder nicht. Aber gelegentlich fummeln sie eine Weile herum, bevor sie es entweder fangen oder fallen lassen, so dass ihr Zustand weder hält noch fällt - dies ist der metastabile Zustand!


Ich arbeite immer noch mit 6502-basierten Systemen als Hobby. Es wäre schön, einige Einzelheiten zu Metastabilitätsproblemen bei Busdaten zu kennen. Ich kann mir sicher vorstellen, dass der Akku einen beliebigen Wert haben könnte, wenn der Akku $ FF enthält und man einen Wert liest, der entweder $ 00 oder $ 01 ist. Bevor jedoch ein Zweig genommen werden konnte, würde ich erwarten, dass zwei weitere Zyklen ablaufen müssten, in denen die Flags zweimal neu verriegelt würden. Ich kann mir nicht vorstellen, dass ein metastabiler Zustand so lange anhält.
Supercat

Dies war etwas, was ich vor vielleicht 20 Jahren aus zweiter oder dritter Hand gehört habe, aber es stammte von Leuten, die absolut wussten, was sie taten - es handelte sich um die Tube-Schnittstelle des 6502-Sekundenprozessors für die BBC Micro und das Lesen des Status Fahnen, und war ein Vorfall von einmal na-blau-Mond, aber häufig genug, dass es die Produkteinführung verzögerte. Es hätte nicht unbedingt 2 Zyklen dauern müssen, da die Signale wahrscheinlich in verschiedenen Phasen der Pipeline intern zwischengespeichert werden. Ich denke, es war auch die derzeit schnellste 6502-Variante - 3MHz 65C02 ISTR.
mikeselectricstuff

Interessant. [Übrigens, gibt es eine Möglichkeit, Interpunktion zu verwenden, ohne dass StackExchange sie mischt?] Im normalen Verhalten von z. B. "ADC 0xD000" würde die Adresse in Phase 1 des vierten Zyklus ausgegeben und die Daten würden am Ende der Phase zwischengespeichert 2 dieses Zyklus. Die Daten würden in Phase 1 des nächsten Zyklus in die ALU eingespeist (dies wäre der Opcode-Abruf für den folgenden Befehl). Der Zyklus danach wäre der Operandenabruf. Wenn die Dinge zu diesem Zeitpunkt noch metastabil wären, könnte das System einschmelzen, was jedoch unwahrscheinlich erscheint, da die dynamischen Register zweimal neu abgerufen worden wären.
Supercat

Ich möchte nicht sagen, dass die Metastabilität des Datenbusses den 6502 nicht beeinflussen kann, da ich weiß, dass es einige andere verrückte Verhaltensweisen gibt, die ich nicht erklären kann. Beispielsweise wird der Datenbus während der Phase 2 des Takts zwischengespeichert und während der folgenden Phase 1 bearbeitet. Es sollte daher keine Rolle spielen, ob er sich während der Phase 2 ändert, vorausgesetzt, er ist am Ende stabil. Es gibt jedoch einige undokumentierte Anweisungen, deren Verhalten vom Inhalt des Datenbusses zu Beginn des Zyklus beeinflusst wird (nachweisbar auf Computern wie dem C64 und Apple, die in Phase 1 Videos abrufen). Ich weiß nicht wie ...
Supercat

... das Verhalten dieser Anweisungen wird tatsächlich durch das frühe Verhalten des Datenbusses beeinflusst, aber ich vermute, es ist eine Art seltsamer Rennzustand. IIRC stimmt einer der Opcodes mit den Decodierungsmustern für LDA #imm, LDX #imm und TAX überein, sodass die Ausgabe der ALU auf ihre Eingabe zurück abgebildet wird. Seltsam.
Supercat
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.