Co to jest metastabilność?

15

Z artykułu w Wikipedii Metastabilność w elektronice :

Metastabilność w elektronice to zdolność cyfrowego systemu elektronicznego do utrzymywania się przez nieograniczony czas w niestabilnej równowadze lub stanie metastabilnym. W stanach metastabilnych obwód może nie być w stanie osiągnąć stabilnego poziomu logicznego „0” lub „1” w czasie wymaganym do prawidłowego działania obwodu. W rezultacie obwód może działać w nieprzewidywalny sposób i może prowadzić do awarii systemu.

To wydaje się być dobra definicja, ale co to oznacza w aplikacji?

Z punktu widzenia projektanta elektroniki, jakie są przykłady tego, kiedy może się to zdarzyć i gdzie powinien być problem tego typu awarii?

Czy istnieje bardziej pragmatyczna lub stosowana definicja - coś bardziej szczegółowego?

Zardzewiały
źródło
2
Leslie Lamport (on o sławie $ \ LaTeX $) napisał dobry opis metastabilności w tym artykule: research.microsoft.com/users/lamport/pubs/buridan.pdf
markrages
@markrages Brilliant. Może się to zdarzyć również w przypadku upadających kotów i tostów masłem .
Rusty

Odpowiedzi:

15

Szybka odpowiedź: jeśli naruszysz konfigurację i przytrzymasz czas na wejściu przerzutnika, wyjście będzie nieprzewidywalne przez pewien czas. Ten nieprzewidywalny wynik nazywany jest metastabilnością (lub metastabilnością).

Długa odpowiedź: gdy wynik jest nieprzewidywalny, to znaczy, że jest nieprzewidywalny. Może być wysoki, może być niski, może być gdzieś pośrodku lub może oscylować. Po tym metastabilnym okresie wynik będzie wysoki lub niski, ale nie wiemy, w którą stronę pójdzie, dopóki się nie wydarzy.

Czas, który jest nieprzewidywalny, jest jednak dość przewidywalny. Długość dwóch metastabilnych okresów determinują dwa główne czynniki: szybkość przerzutu i czas „zbliżony do krawędzi”.

Większość metastabilnych czasów jest dość krótka, chociaż prawdopodobieństwo długiego czasu jest niezerowe. Teoretycznie możesz mieć metastabilny czas rzędu sekund, chociaż szanse na to są niezwykle rzadkie. Wraz ze wzrostem prędkości przerzutu zmniejsza się średni czas metastabilności - wszystkie inne rzeczy są równe.

W flip-flopie występuje „wyimaginowany” czas względem krawędzi zegara, w którym jesteś najbardziej podatny na problemy z metastabilnością. Dokładnie wtedy, gdy jest to zależne od wielu czynników, takich jak temperatura, napięcie, proces, faza księżyca, ofiary ze zwierząt i z jaką partią polityczną należysz. Ilekroć jest ten czas, im bliżej tego czasu znajduje się zbocze wejściowe danych, tym dłuższy będzie czas metastabilności.

Najlepszym sposobem radzenia sobie z metastabilnością jest zsynchronizowanie całej logiki i nienaruszanie czasu konfiguracji i wstrzymania. Jest to oczywiście trudne lub niemożliwe dla obwodów o dowolnej złożoności. Więc staramy się ograniczyć miejsca, w których metastabilność może być problemem, a następnie zająć się tymi miejscami.

Normalną metodą byłoby „podwójne zegarowanie” danych. Oznacza to, że mają dwa przerzutniki D połączone szeregowo z wyjściem pierwszego zasilającym wejście drugiego. Mamy nadzieję, że jeśli pierwszy flip-flop stanie się metastabilny, okres metastabilności skończy się, zanim naruszy on czas ustawienia / wstrzymania drugiego. W praktyce działa to całkiem dobrze. W aplikacjach o bardzo krytycznym znaczeniu może występować „potrójny taktowanie”.


źródło
3
Jakieś zależności od rodzaju poświęconego zwierzęcia?
Rusty
11

Stan metastabilny jest podobny do niestabilnej równowagi. Typowym przykładem niestabilnej równowagi jest odwrócone wahadło . Jeśli potrafisz wyważyć wahadło w pozycji pionowej, jest to stan stabilny. Jeśli jednak cokolwiek popchnie dźwignię w którąkolwiek stronę (na przykład prądy powietrza lub wibracje gruntu), wahadło nie powróci do pozycji pionowej, spadnie. Kontrastuj ze zwykłym wahadłem, które po przesunięciu na bok ostatecznie ustabilizuje się z powrotem w pionie.

Stabilne równowagi są stosowane w systemach elektrycznych do tworzenia elementów magazynowych. Niestabilne equlibria nie tworzą dobrych elementów do przechowywania (ponieważ łatwo tracą swój stan), ale często istnieją jako stan pasożytniczy.

Wspólnym cyfrowym elementem pamięci jest para falowników sprzężonych krzyżowo:

Dwa falowniki połączone w pętli, wyjście-do-wejścia

Element magazynujący ma dwa stabilne stany, jeden, w którym węzeł po lewej stronie znajduje się pod napięciem zasilającym, a węzeł po prawej stronie znajduje się na ziemi, a drugi w odwrotnym stanie. Istnieje również stan niestabilny, w którym każdy węzeł jest pod napięciem pośrednim.

Aby lepiej zrozumieć, jak powstaje stan niestabilny, przywołaj funkcję przenoszenia falownika. Wykres funkcji przenoszenia pokazuje napięcie wyjściowe falownika dla danego napięcia wejściowego.

Funkcja przenoszenia falownika

Falownik jest nieliniowy; jednym prostym sposobem na uzyskanie przybliżonego rozwiązania obwodu nieliniowego jest wykreślenie charakterystyki obwodu; punktami przecięcia wykresów są rozwiązania, czyli innymi słowy, punkty, w których właściwości elektryczne wszystkich elementów obwodu są spełnione. Zwykle odbywa się to za pomocą wykresów iv, jak w tym przykładzie diod na Wikipedii . Jednak w przypadku falowników zrobimy to z wykresami vv. Nakładanie drugiej funkcji przenoszenia falownika na wykres (z zamienionymi osiami, ponieważ drugi falownik jest odwrócony:

Nakładane funkcje przesyłania dla falowników typu back-to-back

Istnieją trzy przecięcia wykresów: jeden przy (0, Vs), jeden przy (Vs, 0) i jeden przy (Vs / 2, Vs / 2). Stan (Vs / 2, Vs / 2) jest metastabilny. Po niewielkim zaburzeniu któregoś z węzłów obwód prawie zawsze ustabilizuje się w jednym ze stabilnych stanów, zamiast wracać do (Vs / 2, Vs / 2).

Sposobem na zapisanie wartości do elementu pamięci z podwójnym falownikiem jest wymuszenie jednego z węzłów do pożądanej wartości za pomocą sterownika, który jest silniejszy niż falowniki. Jednym z powszechnych sposobów na to jest tranzystor pass:

Falowniki sprzężone krzyżowo z tranzystorem przejściowym

Jeśli podłączysz bramkę tranzystora przejściowego do zegara, otrzymasz zatrzask D (pomijam strukturę wyjściową). Gdy zegar jest wysoki, umożliwiając tranzystor przejściowy, zatrzask jest przezroczysty - wejście przechodzi bezpośrednio na wyjście. Gdy zegar jest niski, zatrzask przechowuje poprzednią wartość. Metastabilność powstaje w momencie, gdy próbki zatrzasku. Jeśli na wejściu jest stabilne wysokie lub niskie napięcie, gdy próbka zatrzasku pobiera próbki, będzie działać poprawnie. Jeśli jednak wejście znajduje się wokół punktu Vs / 2, gdy próbki zatrzasku próbkują, istnieje możliwość, że zatrzask skończy się w stanie metastabilnym (Vs / 2, Vs / 2). Gdy znajdzie się w stanie metastabilnym, może pozostać tam w nieskończoność (zakładając, że zatrzask nie jest taktowany ponownie), ale ponieważ jest to niestabilna równowaga, coś zwykle dzieje się stosunkowo szybko, aby wybić go ze stanu metastabilnego.

Kiedy martwić się o metastabilność

Jeśli twoje elementy pamięci stają się metastabilne, to tracisz przynajmniej część budżetu czasowego dla logiki niższego rzędu. Logika nie może wykonać żądanej oceny, dopóki stan metastabilny nie zostanie rozwiązany. W najgorszym przypadku stan metastabilny utrzymuje się lub propaguje za pomocą logiki, a elementy pamięci masowej niższego rzędu również stają się metastabilne lub wiele powiązanych elementów pamięciowych przechwytuje niespójne wartości.

Prawidłowo zaprojektowana i działająca logika synchroniczna nie ma problemów z metastabilnością. Okres taktowania jest dłuższy niż czas oceny dla logiki, wszystkie wejścia flip-flop są stabilne przy następnym zboczu zegara (spełnione są wymagania konfiguracji) i wszystkie ładują prawidłową wartość.

Niektóre z typowych sytuacji, w których problemem jest metastabilność, to:

  • Logiczne próbkowanie zewnętrznego wejścia, na przykład przełącznika na panelu przednim lub wyjścia obwodów monitorujących, które mogą przejść w dowolnym momencie (podnapięcie, przekroczenie temperatury).
  • Logika wykorzystująca wiele zegarów, które nie mają związku synchronicznego. Często pojawia się to w przypadku interfejsów I / O, które mają określone wymagania dotyczące zegara, ale występuje również wewnętrznie, gdy różne części układu mają różne wymagania dotyczące wydajności. Na przykład nie cała logika procesora 3 GHz działa z częstotliwością 3 GHz. (Procesor nie jest jednak świetnym przykładem, ponieważ wiele zegarów w procesorze to synchroniczne wielokrotności.)
Andy
źródło
Przeważnie miła odpowiedź, ale należy również wspomnieć, że z powodu opóźnień w propagacji nie ma jednego stanu metastabilnego, ale cała ich rodzina i nie ma określonego sposobu na identyfikację stanów metastabilnych. Można zaprojektować obwód z wyjściem trójstanowym (wysoki / niski / metastabilny) i tak ustawić, aby „wysoki” nigdy nie był zgłaszany, jeśli sygnał wyjściowy może spaść lub odwrotnie, ale nie ma gwarancji, że wyjście nie odbije się między „wysokim” i „metastabilnym” (kończącym się na „wysokim”), ani między „niskim” a „metastabilnym” (kończącym się na „niskim”).
supercat
+1 To dobra rzecz, ale ma więcej sensu po przeczytaniu odpowiedzi Davida Kessnera. +2 Za grafikę.
Rusty
3

Sygnał metastabilny to taki, który może przez dowolnie długi czas wydawać się wysoki lub niski w dowolnym dowolnym wzorze. Jeśli sygnał zasila wiele bramek bezpośrednio lub pośrednio , możliwe, że niektóre z nich „zobaczą” go wysoko, a inne - niskiego. Paskudne rzeczy.

W systemach z jednym zegarem często można sobie radzić z sygnałami metastabilnymi, przechodząc przez dwa zatrzaski. Trudniejszy problem pojawia się przy bramkowaniu zegarów. Istnieje wiele obwodów (szczególnie przy użyciu zatrzasków RS), które działałyby wspaniale, gdyby metastabilność nie była możliwa, ale które, jeśli wystąpi metastabilność, mogą w końcu generować impulsy zegara runt (co z kolei może powodować metastabilność w dół).

Nawiasem mówiąc, kolejna ważna kwestia dotycząca metastabilności: czas propagacji zatrzasku wskazuje, kiedy, jeśli zostaną spełnione czasy próbkowania i wstrzymania , wynik będzie stabilny na nowej wartości. Jeśli czasy ustawiania i wstrzymania nie są spełnione, nie ma gwarancji, czy lub kiedy wyjście zostanie przełączone, czy nie, aż do momentu, gdy zatrzask otrzyma prawidłowe zdarzenie taktowania. Nawet jeśli wyjście „wydaje się” przełączać czysto, nie ma gwarancji, że nie spontanicznie się przełączy.

supercat
źródło
2

Klasyczny przypadek polega na tym, że naruszasz czasy konfiguracji / wstrzymania synchronicznego zatrzasku i jest to problem, o którym musisz pamiętać przy projektowaniu układów FPGA (jestem pewien, że Xilinx i Altera będą miały na ten temat przypisy). Jeśli sygnał może nadejść w dowolnym momencie losowym, nigdy nie możesz być pewien, że po jego taktowaniu nie zmienia się on w ramach okna ustawień / czasu wstrzymania. To, co może się zdarzyć, to zamiast wyjścia wysokiego lub niskiego poziomu zatrzasku w określonym czasie po zboczu taktowania, może chwilę się rozejrzeć, zanim ustabilizuje się. Normalnym sposobem uniknięcia tego jest użycie 2-stopniowego zatrzasku, z tym samym zegarem lub zegarem opóźnionym lub niefazowym, w zależności od równowagi między wymaganiami dotyczącymi opóźnienia i prawdopodobieństwem metastabilności. Umożliwia to ustabilizowanie się czasu pierwszego zatrzasku, zanim drugi zatrzask zatrzaśnie stan stabilny. Nawiasem mówiąc, jest to coś, z czym mikrokontrolery mają do czynienia wewnętrznie, ponieważ zewnętrzne sygnały we / wy są zwykle asynchroniczne z zegarem procesora, więc porty we / wy często mają podwójne ustawienia zatrzasków, aby uniknąć problemów, a oprogramowanie nie musi się tym martwić . Nieokreślone wspomnienie przeczytane wiele lat temu o problemie z 6502, w którym odczyt magistrali danych, które zmieniły się poza specyfikacją czasu ustawiania / wstrzymania, może spowodować rozgałęzienie na adres, który nie był ani celem rozgałęzienia, ani następną instrukcją, jak niektóre wewnętrzne stan przeszedł w metastabilność. Ten film pokazuje kilka przykładów: Nieokreślone wspomnienie przeczytane wiele lat temu o problemie z 6502, w którym odczyt magistrali danych, które zmieniły się poza specyfikacją czasu ustawiania / wstrzymania, może spowodować rozgałęzienie na adres, który nie był ani celem rozgałęzienia, ani następną instrukcją, jak niektóre wewnętrzne stan przeszedł w metastabilność. Ten film pokazuje kilka przykładów: Nieokreślone wspomnienie przeczytane wiele lat temu o problemie z 6502, w którym odczyt magistrali danych, które zmieniły się poza specyfikacją czasu ustawiania / wstrzymania, może spowodować rozgałęzienie na adres, który nie był ani celem rozgałęzienia, ani następną instrukcją, jak niektóre wewnętrzne stan przeszedł w metastabilność. Ten film pokazuje kilka przykładów:http://www.youtube.com/watch?v=tKHCwjWMMyg

Analogią jest, jeśli rzucisz komuś piłkę - przeważnie albo łapie ją, albo upuszcza / tęskni, więc po pewnym czasie od rzucenia, będzie ją trzymała lub nie. Ale od czasu do czasu będą się grzebać, zanim je złapią lub upuszczą, więc ich stan nie trzyma się ani nie upuszcza - jest to stan metastabilny!

mikeselectricstuff
źródło
Nadal pracuję z systemami opartymi na 6502 jako hobby. Byłoby miło poznać niektóre szczegóły problemów z metastabilnością danych magistrali. Mogę z pewnością wyobrazić sobie, że jeśli akumulator zawiera $ FF i ktoś odczytuje wartość, która jest albo 00, albo 01 USD, akumulator może otrzymać dowolną możliwą wartość. Jednak zanim zdołano wykonać jakąkolwiek gałąź, spodziewałbym się, że upłyną jeszcze dwa cykle, podczas których flagi zostaną ponownie załadowane dwukrotnie. Nie wyobrażam sobie, by stan metastabilny pozostał tak długo.
supercat
To było coś, co słyszałem z drugiej lub trzeciej ręki może 20 lat temu, ale pochodziło od ludzi, którzy absolutnie wiedzieli, co robią - miało to związek z interfejsem Tube na drugim procesorze 6502 dla BBC Micro i odczytem statusu flagi i występował raz na niebiesko-księżycowym zdarzeniu, ale na tyle często, że opóźniał wprowadzenie produktu na rynek. Nie musiałoby to koniecznie trwać 2 cykli, ponieważ prawdopodobnie sygnały są blokowane wewnętrznie na różnych etapach rurociągu. Myślę, że był to również najszybszy dostępny wówczas wariant 6502 - 3MHz 65C02 ISTR.
mikeselectricstuff
Ciekawy. [BTW, czy jest jakikolwiek sposób na stosowanie interpunkcji bez mungowania przez StackExchange?] W normalnym zachowaniu np. „ADC 0xD000” adres byłby wysyłany w fazie 1 czwartego cyklu, a dane byłyby zatrzaśnięte na końcu fazy 2 tego cyklu. Dane wprowadzane byłyby do ALU w fazie 1 następnego cyklu (co byłoby pobieraniem kodu operacji dla następującej instrukcji). Kolejnym cyklem byłoby pobranie operandu. Gdyby w tym momencie rzeczy były wciąż metastabilne, system mógłby się stopić, ale wydawałoby się to mało prawdopodobne, ponieważ rejestry dynamiczne zostałyby ponownie uruchomione dwukrotnie.
supercat
Nie chcę powiedzieć, że metastabilność magistrali danych nie ma wpływu na 6502, ponieważ wiem, że istnieją inne dziwne zachowania, których nie potrafię wyjaśnić. Na przykład szyna danych jest zatrzaśnięta podczas fazy 2 zegara i działa na nią podczas następnej fazy 1. Dlatego nie powinno mieć znaczenia, czy zmienia się w fazie 2, pod warunkiem, że jest stabilna na końcu. Istnieje jednak kilka nieudokumentowanych instrukcji, na których zachowanie wpływa zawartość magistrali danych we wcześniejszej części cyklu (możliwe do wykazania na komputerach takich jak C64 i Apple, które pobierają wideo podczas fazy 1). Nie wiem jak ...
supercat
... na zachowanie tych instrukcji ma wpływ wczesne zachowanie magistrali danych, ale podejrzewam, że to jakiś dziwny stan wyścigu. IIRC, jeden z kodów operacyjnych odpowiada wzorcom dekodowania dla LDA #imm, LDX #imm i TAX, więc wyjście ALU jest odwzorowywane z powrotem na jego wejście. Dziwne.
supercat