Toestand waarin de uitgang van een flipflop enige tijd noch 0 noch 1 is, doordat de setup- of holdtijd niet is gehaald. Als maatregel worden asynchrone signalen met een tweetraps-flipflop gesynchroniseerd.
Japanse benaming: メタステーブル
“Metastabiliteit” komt voor in 7 oefenvragen uit 3 onderwerpen, bijv. Timinganalyse en CDC, Logische schakelingen, LSI-ontwerpflow en EDA.
Waarom een flipflop tussen 0 en 1 kan blijven hangen
Een flipflop slaat zijn toestand op in kruislings gekoppelde inverters, die twee stabiele punten hebben met daartussen één instabiel evenwichtspunt. Als de data-ingang verandert binnen het venster dat wordt bepaald door de setuptijd (vóór de klokflank) en de holdtijd (erna), kan de latch dicht bij dat evenwichtspunt achterblijven. Meekoppeling versterkt dan de kleine onbalans met een tijdconstante τ, maar hoe dichter de start bij het evenwicht ligt, hoe langer de beslissing duurt, zonder harde bovengrens. De uitgang kan op een tussenliggende spanning blijven staan of te laat schakelen, en de uiteindelijke waarde is onvoorspelbaar.
Synchronizers en MTBF
Bij een asynchrone ingang kan metastabiliteit alleen zeldzaam worden gemaakt, niet worden voorkomen. Een synchronizer met twee flipflops geeft de eerste trap bijna een volledige klokperiode om tot een beslissing te komen voordat de tweede trap haar bemonstert. De gemiddelde tijd tussen storingen is ongeveer MTBF = e^(t_r/τ) / (T_0 × f_clk × f_data), waarbij t_r de beschikbare beslistijd is en τ en T_0 van de flipflop afhangen. Omdat t_r in een exponent staat, voegt een derde trap ongeveer één periode toe en vermenigvuldigt ze de MTBF enorm: met τ = 20 ps levert 1 ns extra een factor e^50 op, meer dan 10^21.
Wat een synchronizer niet oplost
Elke gesynchroniseerde bit kan een verandering één cyclus te vroeg of te laat vangen, dus een waarde van meerdere bits, zoals van 0111 naar 1000, kan aankomen als 1111 of 0000. Tellers gaan daarom over in Gray-code, waarbij per stap maar één bit verandert, zoals bij de pointers van asynchrone FIFO's; willekeurige data gebruikt een handshake of een asynchrone FIFO. Een korte puls uit een snel domein kan tussen de flanken van een langzame klok vallen en verdwijnen, dus moet hij worden verlengd of omgezet in een toggle. Signalen die een domeingrens oversteken, moeten rechtstreeks uit een flipflop komen, omdat een combinatorische glitch als geldige waarde kan worden gevangen.
Metastabiliteit versus gewone timingschendingen
In één synchroon klokdomein betekent een setupschending dat het datapad te traag is, en statische timinganalyse vindt dat; de klok vertragen of het pad versnellen lost het op. Tussen asynchrone klokken bestaat geen vaste faserelatie, dus schendingen treden vroeg of laat op, hoe snel de logica ook is, en timinganalyse kan ze niet sluiten. Daarom vertrouwen ontwerpen op CDC-verificatie (clock domain crossing), waarbij tools elke overgang opsporen en controleren op een correcte synchronizer, Gray-gecodeerde pointer of handshake. Zulke bugs zijn zeldzaam, dus gewone simulatie vangt ze zelden.
ADe tijd die beschikbaar is om de metastabiliteit te laten uitdoven neemt met ongeveer één periode toe, en de MTBF wordt exponentieel langer
BDe MTBF wordt evenredig met het aantal trappen 1,5 keer zo groot
CHoe makkelijk metastabiliteit optreedt, wordt aan de ingangskant bepaald, dus de MTBF verandert niet
Antwoord en toelichting tonen
Antwoord: A. De tijd die beschikbaar is om de metastabiliteit te laten uitdoven neemt met ongeveer één periode toe, en de MTBF wordt exponentieel langer
De MTBF van een synchronisator wordt bij benadering gegeven door MTBF = e^(t_r/τ) ÷ (T_0 × f_clk × f_data). Hierin is t_r de tijd die beschikbaar is om de metastabiliteit te laten uitdoven, en zijn τ en T_0 constanten die door de eigenschappen van de flip-flop worden bepaald. Een extra trap verlengt t_r met ongeveer één periode. Neemt t_r bijvoorbeeld bij τ = 20 ps met 1 ns toe, dan wordt de MTBF e^50 keer zo lang, oftewel meer dan 10^21 keer. De kans dat de eerste trap metastabiel wordt verandert niet, maar de kans dat de toestand uitdooft voordat hij verder doorloopt, neemt sterk toe.
Veelgestelde vragen
Wat veroorzaakt metastabiliteit in een flipflop?
Data die verandert binnen het setup-en-holdvenster rond de klokflank, waardoor de interne latch dicht bij haar instabiele evenwichtspunt achterblijft. Dat is onvermijdelijk wanneer de ingang asynchroon is ten opzichte van de klok.
Waarom worden twee flipflops gebruikt om een asynchroon signaal te synchroniseren?
De eerste flipflop kan metastabiel worden, en de tweede bemonstert haar een volledige klokperiode later, wanneer ze vrijwel zeker tot een beslissing is gekomen. Dit verhoogt de MTBF exponentieel, maar maakt falen niet onmogelijk.
Kun je een synchronizer gebruiken voor een bus met meerdere bits?
Niet bit voor bit, omdat verschillende bits in verschillende cycli kunnen worden gevangen en een ongeldige tussenwaarde opleveren. Gebruik Gray-code voor tellers, of een handshake of asynchrone FIFO voor algemene data.
“Metastabiliteit” in de toelichting
Hierin is t_r de tijd die beschikbaar is om de metastabiliteit te laten uitdoven, en zijn τ en T_0 constanten die door de eigenschappen van de flip-flop worden bepaald.
De tijd dat data na de flank moet worden vastgehouden, is de hold-tijd, en als een van beide niet wordt gehaald, kan dat leiden tot het overnemen van een foutieve waarde of metastabiliteit.
Wanneer een signaal rechtstreeks tussen asynchrone klokken wordt doorgegeven, ontstaat metastabiliteit, waarbij de uitgang van een flipflop noch 0 noch 1 is, of gaan gegevens verloren.