Qui, diamo uno sguardo al concetto di metastabilità per quanto riguarda i circuiti digitali – e quindi i progetti FPGA – e come la sua 'apparizione' possa essere notevolmente ridotta semplicemente aderendo a principi di progettazione provati che ne mitigano l'effetto.
Metastabilità! Potreste essere perdonati per pensare che questo possa essere relativo all'integrità di qualche futuristico contenitore o campo di forza: "La metastabilità del triangolatore di flusso dell'azionamento a curvatura e dell'involucro criogenico sta raggiungendo livelli critici, Capitano!"
Per coloro tra voi che vivono e respirano elettronica digitale quotidianamente, tuttavia, il termine sarà probabilmente accolto con una miscela di disprezzo e rispetto.
Qui, diamo uno sguardo al concetto di metastabilità in relazione a un circuito digitale – e quindi ai progetti FPGA – e come la sua 'apparizione' possa essere notevolmente ridotta, semplicemente aderendo a principi di progettazione provati che ne mitigano l'effetto.
La metastabilità riguarda le uscite dei registri (o dei flip-flop sincronizzati, in termini antichi) all'interno dei circuiti digitali e la potenziale capacità di un terminale di uscita di entrare in uno 'stato metastabile'. I dispositivi FPGA utilizzano tipicamente flip-flop di tipo D. Prima di esaminare come tale stato possa essere raggiunto, è una buona idea rinfrescare la nostra conoscenza con alcuni elementi chiave di base relativi al funzionamento di un registro:
'Tempo di preparazione' – questo è il tempo minimo per cui l'ingresso al registro deve rimanere stabile, prima dell'arrivo del prossimo fronte di clock. Tipicamente indicato come Tsu nei fogli dati.
'Tempo di mantenimento' – questo è il tempo minimo dopo l'arrivo del fronte di clock, durante il quale l'ingresso al registro deve continuare a rimanere nello stesso stato stabile. Tipicamente indicato come Th nei fogli dati.
'Tempo di ritardo da Clock a Uscita' – questo è l'intervallo di tempo, dopo l'arrivo del fronte di clock, in cui l'uscita del registro cambia. Questo è anche riferito come 'tempo di assestamento' o 'ritardo di propagazione' del registro. Può apparire nei fogli dati come, ad esempio, Tco, o Tphl e Tplh.
Ogni volta che un segnale viaggia tra due domini di clock asincroni - sottocircuiti digitali all'interno del progetto complessivo che funzionano su orologi differenti o non correlati - esiste la possibilità di incontrare metastabilità. Questo è vero anche per il trasferimento di dati da una regione non sincronizzata di un progetto a un sistema sincrono - per esempio, segnali esterni (fuori) alimentati in un FPGA.
L'immagine seguente illustra due esempi di segnali asincroni che entrano in un sistema sincrono. Nell'esempio superiore, un segnale viaggia tra diversi domini di clock. Nell'esempio inferiore, un segnale da un sistema non sincronizzato viene alimentato in un sistema sincronizzato (a clock).
Il problema sorge quando un segnale dati da un dominio di clock arriva alla logica dei registri in un altro dominio di clock. Il segnale dati in arrivo dal dominio sorgente può cambiare in qualsiasi momento rispetto al clock nel dominio di destinazione - non c'è sincronia tra i due domini, nessuna conoscenza delle velocità di transizione nei due sottocircuiti logici. Se il segnale dati cambia in un punto che viola i tempi richiesti di Set-up o Hold per il registro di destinazione, l'uscita di quel registro può entrare in uno 'stato metastabile' - uno stato in cui il segnale di uscita non è né logicamente Basso, né logicamente Alto, ma piuttosto nell'area instabile tra i due.
La durata durante la quale l'uscita continua a rimanere metastabile può superare il tempo specificato di ‘Ritardo da Clock a Uscita’ (tempo di assestamento) del registro. Nella maggior parte dei casi, i registri risolveranno rapidamente questa instabilità dell'uscita e torneranno a uno dei due stati definiti (e stabili). Il problema per un progetto, tuttavia, si verifica nella minoranza dei casi, quando il tempo per stabilizzarsi in uno stato stabile non è abbastanza rapido, o il segnale di uscita si risolve al livello logico sbagliato.
L'immagine seguente illustra l'uscita di un registro a seconda della transizione del segnale di dati in ingresso.
Considerando i tre ingressi:
Ingresso A: L'ingresso osserva i tempi di Set-up e Hold del registro e l'uscita è disponibile dopo il tempo di Ritardo da Clock a Uscita del dispositivo.
Ingresso B: L'ingresso transita durante il tempo di Set-up del registro, con l'uscita che diventa metastabile fino a stabilizzarsi al livello stabile corretto oltre il tempo di Ritardo da Clock a Uscita.
Ingresso C: L'ingresso transita durante il tempo di Hold del registro, con l'uscita che diventa metastabile. Non solo l'uscita si stabilizza in uno stato stabile oltre il tempo di Ritardo da Clock a Uscita, ma si stabilizza anche al livello logico sbagliato!
Se l'uscita di un registro alimenta più di un registro successivo nel circuito – in parallelo – esiste la possibilità che questi registri di destinazione catturino i dati a livelli logici differenti, a seconda che l'uscita metastabile dal registro sorgente si sia stabilizzata in uno stato stabile prima che ogni registro di destinazione venga azionato per catturare i dati successivi. I ritardi di percorso tra i registri sorgente e destinazione, aggiunti al tempo affinché l'uscita metastabile diventi stabile, fanno solo aumentare il problema.
In sintesi, la metastabilità è un nemico basato sulla statistica o sulla probabilità per un progettista. A seconda dei dispositivi utilizzati e del layout del circuito nel design, possono verificarsi stati di uscita metastabili, oppure no. Se si verificano, possono essere dannosi – causando il fallimento del progetto – o la fortuna potrebbe essere dalla tua parte e i tempi di assestamento dei dispositivi, le velocità di clock e i percorsi cablati potrebbero rendere la loro comparsa benigna. Il problema, però, come progettista, è: puoi davvero permetterti di correre quel 'rischio'? Cosa succede se il prodotto che stai progettando fa parte di un'installazione medica o di un aereo di linea commerciale – un fallimento del progetto potrebbe essere catastrofico.
Sebbene la metastabilità non possa essere completamente eradicata – nessun dispositivo al mondo può vantarsi di operare completamente libero dagli effetti potenziali della metastabilità – può essere ridotta al punto da diventare appena un 'segnale sul radar'.
Come misura dell'affidabilità di un progetto, in termini di fallimento indotto dalla metastabilità, parliamo di qualcosa chiamato Tempo Medio Tra Guasti – o MTBF. Con la metastabilità lasciata incontrollata – cioè, nessuna disposizione viene presa in un progetto per mitigarne l'effetto – il MTBF potrebbe essere di pochi secondi. Applicando metodologie di progettazione digitale collaudate per combattere la metastabilità, e facendo scelte accurate dei dispositivi digitali utilizzati in un progetto, il MTBF può essere notevolmente aumentato. Mille anni tra i guasti. Un milione di anni. Anche un miliardo di anni se calcolato matematicamente ed estrapolato. A questi valori per il MTBF, tale progetto può essere certificato come 'Altamente Affidabile' o praticamente 'A Prova di Fallimento' (o dovrebbe essere 'Libero da Fallimenti') – ma avete capito l'idea.
Le sezioni seguenti esaminano proprio come voi, come progettisti, potete estendere il MTBF, e come la tecnologia dei dispositivi gioca il suo ruolo.
Forse la soluzione più diffusa e ampiamente accettata al problema della metastabilità consiste nell'aggiunta di circuiti front-end per sincronizzare un segnale asincrono in arrivo con l'orologio del circuito sincrono di destinazione. Nella sua forma più semplice, questo circuito è costituito da uno o più flip-flop di tipo D, collegati in serie, e azionati utilizzando l'orologio del sistema di destinazione. Questo viene definito come una "catena di registri di sincronizzazione", o più semplicemente "sincronizzatore".
L'ulteriore ritardo imposto da ciascun registro permette al segnale in arrivo di recuperare da qualsiasi stato metastabile in cui potrebbe essere entrato. Più registri ci sono nella catena, maggiore è il ritardo e quindi più tempo è disponibile affinché un'uscita metastabile si risolva. Il ritardo totale è spesso noto come "Tempo di Assestamento della Metastabilità". Tipicamente, il circuito di sincronizzazione consiste di due registri, ma per applicazioni critiche – come quelle mediche e militari – tre non è raro.
L'immagine seguente illustra un esempio dell'aggiunta di un sincronizzatore a 2 stadi all'ingresso di un sistema sincrono, per sincronizzare un segnale asincrono in arrivo.
La logica di handshake tra circuiti in diversi domini di clock e/o la logica FIFO è utilizzata anche - in aggiunta alla sincronizzazione front-end - per garantire la ricezione di valori di dati corretti. Questo è particolarmente importante quando si ha a che fare con un gruppo di segnali asincroni collegati in bus, ognuno dei quali potrebbe cambiare in qualsiasi momento e indipendentemente dagli altri.
In un progetto digitale, possono esserci diversi domini di clock e una pletora di segnali che passano tra di loro. Inoltre, può esserci una varietà di segnali esterni asincroni - provenienti dall'esterno (specialmente per un design implementato in un FPGA e che utilizza componenti periferici esterni e interfacce di comunicazione). In tali casi, non è raro trovare molte catene di registri di sincronizzazione, che gestiscono i diversi trasferimenti di segnali asincroni all'interno del sistema complessivo.
In termini di MTBF, ogni catena di sincronizzazione avrà il proprio "valore". Poiché il tasso di guasto complessivo per un progetto è la somma dei tassi di guasto individuali per le catene di sincronizzazione al suo interno, e il tasso di guasto è 1/MTBF, si può facilmente vedere che una catena di sincronizzazione con un MTBF ridotto rispetto agli altri, avrebbe un effetto complessivamente dannoso sul MTBF generale del progetto. Infatti, il MTBF per il progetto seguirà essenzialmente il MTBF della catena di sincronizzazione peggiore - il che può essere disastroso se cinque catene avevano un MTBF di un milione di anni e una sesta catena aveva un MTBF di 50 anni!!
Per gestire questo, la soluzione è aggiungere un altro stadio di registro alla catena di sincronizzazione con le peggiori prestazioni nel progetto, aumentando così il tempo di assestamento della metastabilità e migliorando notevolmente il MTBF per quella catena - e quindi per il progetto complessivo - considerevolmente (se non esponenzialmente!).
Per ricapitolare, la metastabilità (anche se non c'è nulla di stabile in questo stato!) si verifica quando un segnale asincrono in arrivo transita in violazione del Tempo di Preparazione e/o di Mantenimento di un registro. La lunghezza complessiva del tempo, Preparazione + Mantenimento, definisce essenzialmente la "finestra" per la possibilità di metastabilità - la "finestra di metastabilità" se vogliamo.
È ragionevole pensare che, quanto più veloci sono i tempi di Set-Up e Hold di un registro, tanto minore sarà la finestra di metastabilità. Infatti, le famiglie di logica più veloci mostrano questi tempi ridotti e quindi diminuiscono la probabilità di un evento metastabile. Nel caso si verifichi un evento metastabile (ricordiamo che la metastabilità non può essere completamente eradicata), i registri sono abbastanza veloci da recuperare rapidamente. Ad esempio, un registro della famiglia 74F porterà a un MTBF migliore rispetto a un dispositivo utilizzato dalla famiglia 74LS – due estremi dello spettro della velocità dei dispositivi.
Con gli FPGA, la riduzione delle geometrie di processo (da 180nm, passando per 90nm e arrivando a 65nm, 40nm e oltre) si traduce in velocità di commutazione dei transistor più elevate – migliorando tipicamente l'MTBF a causa della metastabilità. Tuttavia, i vantaggi della riduzione delle dimensioni non sono privi di potenziali svantaggi. La riduzione delle geometrie porta naturalmente a tensioni di alimentazione ridotte. Durante uno stato metastabile, l'uscita da un registro è tipicamente la metà della tensione di alimentazione. Man mano che la tensione di alimentazione diventa sempre più piccola, la differenza di tensione tra il valore pieno e la metà si riduce, portando a una riduzione del guadagno del circuito e a tempi più lunghi affinché i registri si riprendano da uno stato metastabile.
I fornitori di FPGA eseguono tipicamente un'analisi rigorosa della metastabilità per garantire robustezza contro la metastabilità nei dispositivi fisici che utilizzano queste geometrie di processo in continua diminuzione.
Utilizza i seguenti link per accedere a documenti esterni che esaminano più da vicino e in modo più dettagliato il fenomeno della metastabilità e come il suo effetto viene reso sostanzialmente trascurabile nei progetti di elettronica digitale. Molti di questi documenti analizzano le equazioni utilizzate per calcolare il MTBF per un flip-flop e, successivamente, il MTBF per un intero progetto, e forniscono riferimenti per ulteriori informazioni sull'argomento.
Metastabilità nella Logica Digitale (www.interfacebus.com)
FPGA-FAQ 0017: Parlami della Metastabilità (Philip Freidin)
Metastabilità nell'elettronica (Wikipedia)
Cos'è la Metastabilità? (www.asic-world.com)
Metastabilità nel Design (The VLSI Homepage)
White Paper: Comprendere la Metastabilità negli FPGA (Altera)
Nota Applicativa: Recupero dalla Metastabilità nei Virtex-II Pro FPGA (Peter Alfke, Xilinx)
Nota Applicativa: Metastabilità e la Famiglia ECLinPS™ (Ingegneria Applicativa, ON Semiconductor)
Risposta Metastabile nei Circuiti Logici a 5-V (Texas Instruments)