Che cos'è la metastabilità?


15

Dall'articolo di Wikipedia Metastabilità in elettronica :

La metastabilità in elettronica è la capacità di un sistema elettronico digitale di persistere per un tempo illimitato in un equilibrio instabile o in uno stato metastabile. In stati metastabili, il circuito potrebbe non essere in grado di stabilizzarsi su un livello logico '0' o '1' stabile entro il tempo richiesto per il corretto funzionamento del circuito. Di conseguenza, il circuito può agire in modo imprevedibile e può causare un errore del sistema.

Sembra una buona definizione, ma cosa significa in un'applicazione?

Dal punto di vista di un progettista elettronico, quali sono alcuni esempi di quando ciò potrebbe accadere e dove dovrebbe essere questo tipo di guasto?

Esiste una definizione più pragmatica o applicata - qualcosa in termini più specifici?


2
Leslie Lamport (lui di $ \ LaTeX $ fame) ha scritto una buona descrizione della metastabilità in questo documento: research.microsoft.com/users/lamport/pubs/buridan.pdf
markrages

@markrages Brilliant. Questo può accadere anche con la caduta di gatti e toast imburrati .
Rusty

Risposte:


15

Risposta rapida: se si viola l'impostazione e si tiene il tempo sull'input di un flip flop, l'output sarà imprevedibile per un certo periodo di tempo. Quel risultato imprevedibile è chiamato meta-stabile (o metastabilità).

Risposta lunga: quando l'output è imprevedibile, intendo dire che è imprevedibile. Potrebbe essere alto, potrebbe essere basso, potrebbe essere da qualche parte nel mezzo o potrebbe oscillare. Dopo questo periodo di metastabile, l'output sarà alto o basso, ma non sappiamo da che parte andrà finché non accadrà.

Il tempo che è imprevedibile è in qualche modo prevedibile, tuttavia. Ci sono due fattori principali che determinano la durata del periodo metastabile: la velocità del flip-flop e quanto "vicino al bordo" hai ottenuto il tempismo.

La maggior parte dei tempi metastabili sono piuttosto brevi, sebbene la probabilità di avere un tempo lungo sia diversa da zero. Teoricamente potresti avere un tempo metastabile nell'ordine dei secondi, anche se le probabilità che ciò accada sono incredibilmente rare. All'aumentare della velocità del flip-flop, il tempo medio di metastabile diminuisce, a parità di tutte le altre cose.

C'è un tempo "immaginario" nel flip-flop, rispetto al limite dell'orologio, in cui sei più suscettibile ai problemi di metastabilità. Esattamente quando ciò dipende da molti fattori come la temperatura, la tensione, il processo, la fase lunare, i sacrifici di animali e il partito politico a cui si è affiliati. Ogni volta che il tempo è, più il bordo di input dei dati è vicino a quel momento più lungo sarà il tempo di metastabilità.

Il modo migliore per gestire la metastabilità è sincronizzare tutta la logica e non violare i tempi di configurazione e di attesa. Questo è, ovviamente, difficile o impossibile per circuiti di qualsiasi complessità. Quindi quello che facciamo è cercare di limitare i luoghi in cui la metastabilità potrebbe essere un problema e quindi occuparci di quei luoghi.

Il metodo normale sarebbe quello di "raddoppiare" i dati. Significato, hanno due infradito D in serie con l'uscita del primo che alimenta l'ingresso del secondo. La speranza è che se il primo flip-flop diventa metastabile, il periodo di metastabile sarebbe finito prima che violasse il tempo di setup / hold del secondo. In pratica funziona abbastanza bene. Nelle applicazioni super critiche potrebbe esserci un "triplo clock" in corso.


3
Qualche dipendenza dal tipo di animale sacrificato?
Rusty

11

Uno stato metastabile è simile a un equilibrio instabile. Un esempio comune di equilibrio instabile è un pendolo invertito . Se riesci a bilanciare il pendolo in posizione verticale, quello è uno stato stabile. Tuttavia, se qualcosa spinge la leva su entrambi i lati (correnti d'aria o vibrazioni del terreno, ad esempio), il pendolo non si ripristinerà in posizione verticale, cadrà. Contrasto con un pendolo regolare, che se spinto da un lato, alla fine tornerà in verticale.

Equilibri stabili sono utilizzati nei sistemi elettrici per creare elementi di memoria. L'equlibria instabile non costituisce un buon elemento di memorizzazione (poiché perde facilmente il suo stato), ma spesso esiste come uno stato parassitario.

Un comune elemento di memorizzazione digitale è una coppia di inverter cross-coupled:

Due inverter collegati in un loop, output-to-input

L'elemento di memorizzazione ha due stati stabili, uno in cui il nodo a sinistra è alla tensione di alimentazione e il nodo a destra è a terra e l'altro nella condizione opposta. C'è anche uno stato instabile, in cui ciascun nodo ha una certa tensione intermedia.

Per comprendere meglio come si presenta lo stato instabile, ricordare la funzione di trasferimento per un inverter. Il grafico della funzione di trasferimento mostra la tensione di uscita dell'inverter per una determinata tensione di ingresso.

Funzione di trasferimento dell'inverter

L'inverter non è lineare; un modo semplice per ottenere una soluzione approssimativa di un circuito non lineare è quello di tracciare le caratteristiche del circuito; le intersezioni dei grafici sono le soluzioni, o in altre parole, i punti in cui sono soddisfatte le caratteristiche elettriche di tutti i componenti del circuito. Normalmente questo viene fatto con grafici IV come in questo esempio di diodo su Wikipedia . Tuttavia, per gli inverter, lo faremo con grafici VV. Sovrapposizione di una seconda funzione di trasferimento dell'inverter sul grafico (con gli assi scambiati, poiché il secondo inverter è all'indietro:

Funzioni di trasferimento sovrapposte per inverter back-to-back

Esistono tre intersezioni dei grafici: uno a (0, Vs), uno a (Vs, 0) e uno a (Vs / 2, Vs / 2). Lo stato (Vs / 2, Vs / 2) è metastabile. Dopo una piccola perturbazione di uno dei due nodi, il circuito si sistemerà quasi sempre in uno degli stati stabili anziché tornare a (Vs / 2, Vs / 2).

Il modo per scrivere un valore sull'elemento di memoria a doppio inverter è forzare uno dei nodi sul valore desiderato utilizzando un driver più forte degli inverter. Un modo comune per farlo è con un transistor pass:

Inverter accoppiati a croce con transistor passante

Se colleghi il gate del transistor pass all'orologio, hai un D-lock (sto tralasciando la struttura di uscita). Quando l'orologio è alto, abilitando il transistor di passaggio, il fermo è trasparente - l'ingresso passa direttamente all'uscita. Quando l'orologio è basso, il fermo mantiene il valore precedente. La metastabilità sorge al momento dai campioni di chiavistello. Se l'ingresso è ad alta o bassa tensione stabile quando il latch campiona, allora funzionerà correttamente. Tuttavia, se l'ingresso è attorno al punto Vs / 2 quando il latch campiona, c'è una possibilità che il latch finisca nello stato metastabile (Vs / 2, Vs / 2). Una volta che si trova nello stato metastabile, può rimanere lì indefinitamente (supponendo che il fermo non sia nuovamente sincronizzato), ma poiché si tratta di un equilibrio instabile, di solito accade qualcosa di relativamente rapido per eliminarlo dallo stato metastabile.

Quando preoccuparsi della metastabilità

Se i tuoi elementi di archiviazione stanno diventando metastabili, allora stai almeno perdendo parte del budget di tempistica per la logica a valle. La logica non può eseguire la valutazione desiderata fino a quando lo stato metastabile non si risolve. Nel peggiore dei casi, lo stato metastabile persiste o si propaga attraverso la logica e anche gli elementi di archiviazione a valle diventano metastabili o più elementi di archiviazione correlati acquisiscono valori incoerenti.

La logica sincrona correttamente progettata e funzionante non ha problemi di metastabilità. Il periodo di clock è più lungo del tempo di valutazione per la logica, tutti gli ingressi flip-flop sono stabili al successivo fronte di clock (requisito di installazione soddisfatto) e caricano tutti un valore valido.

Alcune delle situazioni comuni in cui la metastabilità è una preoccupazione sono:

  • Campionamento logico di un ingresso esterno, ad esempio un interruttore sul pannello frontale o l'uscita di circuiti di monitoraggio che possono transitare in qualsiasi momento (sottotensione, sovratemperatura).
  • Logica che utilizza più clock che non hanno una relazione sincrona. Ciò si presenta spesso con interfacce I / O che hanno particolari requisiti di clock, ma si verificano anche internamente quando parti diverse di un chip hanno requisiti di prestazione diversi. Ad esempio, non tutta la logica della CPU da 3 GHz funziona effettivamente a 3 GHz. (Una CPU non è un grande esempio, tuttavia, poiché molti degli orologi in una CPU sono multipli sincroni l'uno dell'altro.)

Per lo più bella risposta, ma un'altra cosa da menzionare è che a causa dei ritardi di propagazione, non esiste un singolo stato metastabile ma piuttosto un'intera famiglia di essi e non esiste un modo certo per identificare gli stati metastabili. Si può progettare un circuito con un'uscita a tre stati (alto / basso / metastabile) e disporre le cose in modo tale che "alto" non venga mai segnalato se l'uscita potrebbe finire in basso, o viceversa, ma non c'è garanzia che l'uscita non rimbalzerà tra 'alto' e 'metastabile' (finendo 'alto'), o tra 'basso' e 'metastabile' (finendo 'basso').
supercat,

+1 Questa è roba buona, ma ha più senso dopo aver letto la risposta di @David Kessner. +2 Per la grafica.
Rusty

3

Un segnale metastabile è uno che può apparire arbitrariamente alto o basso in qualsiasi modello arbitrario per un certo periodo di tempo arbitrario. Se il segnale alimenta più gate direttamente o indirettamente , è possibile che alcuni di essi lo "vedano" in alto mentre altri lo vedono in basso. Roba cattiva.

Per i sistemi con un solo clock, i segnali metastabili possono spesso essere gestiti passando attraverso due chiavistelli. Un problema più complicato arriva quando si chiudono gli orologi. Esistono molti circuiti (in particolare l'uso di chiavistelli RS) che funzionerebbero meravigliosamente se la metastabilità non fosse possibile, ma che, se si verifica la metastabilità, finiscono per generare impulsi di clock (che a loro volta possono causare metastabilità a valle).

Per inciso, un altro punto importante da sottolineare per quanto riguarda la metastabilità: il tempo di propagazione di un latch indica quando, se i tempi di campionamento e di mantenimento sono soddisfatti , l'output sarà stabile al suo nuovo valore. Se i tempi di impostazione e di attesa non vengono rispettati, non vi è alcuna garanzia se o quando l'uscita cambierà o non cambierà, fino a quando il latch non riceve un evento di clock valido. Anche se l'output "sembra" cambiare in modo pulito, non vi è alcuna garanzia che non ritorni spontaneamente.


2

Il caso classico è se si violano i tempi di installazione / attesa per un latch sincrono ed è un problema che è necessario conoscere quando si progettano FPGA (sono sicuro che Xilinx e Altera avranno delle note su questo). Se un segnale può arrivare in qualsiasi momento casuale, non si può mai essere sicuri che quando lo si sincronizza, non cambia nelle specifiche della finestra del tempo di impostazione / attesa. Ciò che può accadere invece che l'uscita latch si alzi o si abbassi all'ora specificata dopo il limite dell'orologio, può dondolare per un po 'prima di stabilizzarsi in uno stato stabile. Il modo normale per evitare ciò è utilizzare un latch a 2 stadi, con lo stesso clock o con un clock ritardato o sfasato, a seconda dell'equilibrio tra i requisiti di latenza e la probabilità di metastabilità. Ciò consente al primo latch di stabilizzarsi prima che il secondo latch si stabilizzi. Per inciso, questo è qualcosa che i microcontrollori devono affrontare internamente, poiché i segnali I / O esterni sono generalmente asincroni rispetto al clock della CPU, quindi le porte I / O hanno spesso due modalità di blocco per evitare problemi e il software non deve preoccuparsene . Un vago ricordo di aver letto molti anni fa un problema con il 6502, in cui una lettura del bus di dati che cambiava al di fuori delle specifiche del tempo di configurazione / attesa potrebbe causare una diramazione a un indirizzo che non era né la destinazione del ramo né l'istruzione successiva, come alcuni interni lo stato è diventato metastabile. Questo video mostra alcuni esempi: Un vago ricordo di aver letto molti anni fa un problema con il 6502, in cui una lettura del bus di dati che cambiava al di fuori delle specifiche del tempo di configurazione / attesa potrebbe causare una diramazione a un indirizzo che non era né la destinazione del ramo né l'istruzione successiva, come alcuni interni lo stato è diventato metastabile. Questo video mostra alcuni esempi: Un vago ricordo di aver letto molti anni fa un problema con il 6502, in cui una lettura del bus di dati che cambiava al di fuori delle specifiche del tempo di configurazione / attesa potrebbe causare una diramazione a un indirizzo che non era né la destinazione del ramo né l'istruzione successiva, come alcuni interni lo stato è diventato metastabile. Questo video mostra alcuni esempi:http://www.youtube.com/watch?v=tKHCwjWMMyg

Un'analogia è se lanci a qualcuno una palla - per lo più la prendono o la lasciano cadere / perdere, quindi dopo un determinato tempo dal lancio, la terranno o no. Ma a volte armeggiano per un po 'prima di catturarlo o lasciarlo cadere, quindi il loro stato non è né trattenuto né lasciato cadere - questo è lo stato metastabile!


Lavoro ancora con i sistemi basati su 6502 come hobby. Sarebbe bello conoscere alcuni dettagli dei problemi di metastabilità sui dati del bus. Posso certamente immaginare che se l'accumulatore contiene $ FF e si legge un valore che è $ 00 o $ 01, l'accumulatore potrebbe finire con qualsiasi valore possibile. Prima di poter prendere qualsiasi ramo, tuttavia, mi aspetterei che debbano trascorrere altri due cicli, durante i quali le bandiere verrebbero rilanciate due volte. Non riesco a immaginare che uno stato metastabile rimanga così a lungo.
supercat,

Questo è qualcosa che ho sentito di seconda o terza mano forse 20 anni fa, ma ha avuto origine da persone che sapevano assolutamente cosa stavano facendo: aveva a che fare con l'interfaccia Tube sul secondo processore 6502 per BBC Micro e la lettura dello stato bandiere, ed era un evento una volta na-luna blu ma abbastanza frequente da ritardare il lancio del prodotto. Non sarebbe necessariamente necessario durare 2 cicli poiché i segnali vengono probabilmente bloccati internamente in varie fasi della pipeline. Penso che fosse anche la variante 6502 più veloce disponibile al momento - 3MHz 65C02 ISTR.
mikeselectricstuff,

Interessante. [A proposito, c'è un modo per usare la punteggiatura senza StackExchange che lo munga?] Nel comportamento normale, ad esempio "ADC 0xD000", l'indirizzo verrebbe emesso sulla fase 1 del quarto ciclo e i dati verrebbero bloccati alla fine della fase 2 di quel ciclo. I dati verrebbero inseriti nell'ALU nella fase 1 del ciclo successivo (che sarebbe il recupero del codice operativo per le seguenti istruzioni). Il ciclo successivo sarebbe il recupero dell'operando. Se le cose fossero ancora metastabili a quel punto, il sistema potrebbe sciogliersi, ma ciò sembrerebbe improbabile poiché i registri dinamici sarebbero stati recuperati due volte.
supercat,

Non voglio dire che è impossibile che la metastabilità del bus di dati influisca sul 6502, perché so che ci sono altri comportamenti strani che non posso spiegare. Ad esempio, il bus dati viene bloccato durante la fase 2 dell'orologio e agisce durante la seguente fase 1. Non dovrebbe quindi importare se cambia durante la fase 2 purché sia ​​stabile alla fine. Ci sono alcune istruzioni non documentate, tuttavia, il cui comportamento è influenzato dai contenuti del bus dati durante la parte precedente del ciclo (dimostrabile su macchine come C64 e Apple che recuperano video durante la fase 1). Non so come ...
Supercat,

... il comportamento di quelle istruzioni è effettivamente influenzato dal comportamento iniziale del bus dati, ma sospetto che sia una sorta di strana condizione di gara. IIRC, uno dei codici operativi corrisponde ai modelli di decodifica per LDA #imm, LDX #imm e TAX, quindi l'output della ALU viene mappato al suo input. Strano.
supercat,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.