Als een flip-flop een setup-overtreding heeft en metastabiel wordt, is het dan gegarandeerd dat hij zich op de invoerwaarde vestigt als hij klaar is met oscilleren?

Als ik moderne D-flip-flops gebruik en de installatietijd mis (dat wil zeggen dat mijn D-ingang dichtbij de klok verandert), bestaat het gevaar dat de F/F "metastabiel" wordt en enige tijd oscilleert.

Standaardontwerpen gebruiken 2 F/F's als een synchronisator om een ​​dergelijk asynchroon signaal naar behoren binnen het lokale klokdomein te verwerken. Bij het lezen van dit ontwerp heb ik gezien dat de F/F's er zijn om ervoor te zorgen dat dergelijke oscillaties van de eerste F/F afnemen tegen de tijd dat de tweede klokrand het binnenkomende signaal opslaat in de tweede F/F F.

Waar ik nieuwsgierig naar ben, is of de synchroniserende F/F na de oscillatietijd gegarandeerd is af te stemmen op de invoerwaarde. Als mijn asynchrone signaal is veranderd van '1' naar '0' aan de kant van de klok, is de Q-uitgang dan een '0' na het oscilleren? Of moet ik aannemen dat ik een extra klokperiode zou kunnen krijgen waarbij mijn "gesynchroniseerde" signaal nog steeds een '1' is?

4

3 antwoord

Wanneer een flip-flop metastabiel is, oscilleert deze niet. Het loopt gewoon vast op een onbepaald niveau tussen Vhi en Vlow.

Wanneer het uiteindelijk uit de metastabiele toestand valt, kan het naar de hoge of lage toestand gaan.

Het is niet duidelijk wat u bedoelt met "genoegen nemen met de invoerwaarde". Normaal gesproken bereik je een metastabiele status door een invoerwaarde te hebben die zich in het midden van een overgang bevindt wanneer de klok arriveert. Het is niet op een wettelijke hoge of lage waarde. Dus als u de "invoerwaarde" zegt, weet noch ik noch de flip-flop of u de waarde vóór de transistie of na de overgang bedoelt.

Edit: Here is a scope trace showing the output of a flip-flop going through a metastable state, with the exit from the metastable state taking a random amount of time: enter image description here Picture taken from W. J. Dally, Lecture notes for EE108A, Lecture 13: Metastability and Synchronization Failure (ow When Good Flip-Flops go Bad) 11/9/2005.

6
toegevoegd
Om te voorkomen dat een flip-flop metastabiel wordt, is het noodzakelijk om niet alleen te voldoen aan de instel- en vasthoudtijden voor de datadraad, maar ook met minimale hoge en lage tijden voor de klok en met minimale actieve tijden en een minimale release-to -clock tijden voor alle asynchrone ingangen. Een flip-flop die zich in een metastabiele toestand bevindt, kan zijn uitgangsschakelaar willekeurig hebben, in elk patroon, zolang deze zich in een metastabiele toestand blijft bevinden; er is geen manier om te vertellen of een flop met één output in een metastabiele staat is, tenzij men heeft opgemerkt dat de laatste "beslissende" inputstimulus geldig was.
toegevoegd de auteur firedfly, de bron
Merk op dat het mogelijk is om een ​​flip-flop "vooringenomen" te maken, zodanig dat deze nooit hoog zal worden uitgevoerd tenzij de uitvoer stabiel hoog is; men zou het ook kunnen vooringenomen om nooit laag uit te voeren tenzij de output stabiel laag is. Men zou zelfs een flip-flop kunnen ontwerpen met twee uitgangen, waarvan er één elk gedrag zou vertonen. Helaas zijn dergelijke vaardigheden vaak niet zo nuttig als ze zouden lijken. Het lijkt misschien leuk om een ​​"latch kan metastabiele" uitvoer te hebben, maar omdat dat signaal nergens mee gesynchroniseerd kan worden, kan men het niet gebruiken zonder het op de een of andere manier te vergrendelen (in een latch die zelf zou kunnen gaan metastabiele).
toegevoegd de auteur firedfly, de bron
Ik heb nog nooit een flop gezien waarbij de output gewoon op een stabiel niveau zou zitten dat noch hoog noch laag was. Hoewel het waar is dat flops in het algemeen niet kunnen "oscilleren" in de normale betekenis van het woord (aangezien dat een feedbacklus zou vereisen met totale fasevertraging die een nauwkeurig veelvoud van 360 graden is, en bij een normale flip-flop zijn er twee fasen met een fasevertraging van elk iets meer dan 180 graden), kan het mogelijk zijn dat de binnenkant van een grendel past in een toestand die de stroomafwaartse logica soms als hoog en soms als laag beschouwt.
toegevoegd de auteur firedfly, de bron
Dus je bedoelt dat de uitvoer een tijdje op een tussenliggend niveau zit voordat je een schoon hoog of laag resultaat krijgt. Ik zal daarmee meegaan als een beschrijving van het vergrendelingselement zelf; mijn punt was dat in veel gevallen men de spanning intern aan het vergrendelingselement niet direct kan waarnemen, maar in plaats daarvan wat van de uitvoer van sommige combinatorische logica observeert die wordt gevoed door het vergrendelende element, en het is heel goed mogelijk dat dergelijke stroomafwaartse circuits soms kunnen interpreteren het signaal van de vergrendeling zo hoog en soms zo laag. De schakeldrempel van een poort kan bijvoorbeeld ...
toegevoegd de auteur firedfly, de bron
... enigszins beïnvloed door een signaalinvoer naar een aangrenzend hek. Als ingangssignalen nooit in de buurt van de schakeldrempel blijven hangen, is dat meestal geen probleem, maar als de uitvoer van een metastabiele vergrendeling wel in de buurt van de schakeldrempel zit, kan die uitgang als willekeurig hoog en laag overschakelen.
toegevoegd de auteur firedfly, de bron
@supercat, terwijl niets wordt gegarandeerd wanneer u een onderdeel gebruikt buiten de bedrijfsomstandigheden die worden beschreven in het gegevensblad, in de echte wereld voor echte flip-flops (van gevestigde commerciële CMOS- of TTL-logica-families, of binnen een FPGA of CPLD) een metastabiele status zal niet resulteren in oscillatie --- het zal inhouden dat de output vastzit tussen de hoge en lage niveaus.
toegevoegd de auteur The Photon, de bron
@supercat, het is niet stabiel. Het is metastabiel. Uiteindelijk (meestal binnen een paar ps of ns gezet met een zeer lage waarschijnlijkheid dat het een willekeurig lange tijd zou kunnen vergen), vervalt het naar een correct logisch niveau.
toegevoegd de auteur The Photon, de bron

Er is geen remedie voor metastabiliteit. Periode. Einde van.

Metastabiliteit is een probleem in geklokte systemen wanneer de uitvoer van een grendel waarvan de ingangstijdbeperking is geschonden, tweemaal wordt gelezen. Dit betekent ofwel op twee verschillende plaatsen, of op twee verschillende tijdstippen. Met een goed signaal zullen deze twee waarden identiek zijn. Met metastabiliteit is er een mogelijkheid dat de twee waarden verschillend zijn.

For instance, the interrupt syncroniser of a uP, 'has an interrupt occurred?' The external interrupt signal is async, so will eventually violate tsu or th. The 'there was an interrupt this cycle' signal gets read in two places. If the program counter thinks there was an interrupt, and the interrupt controller thinks there wasn't, crash!

Hoewel er geen remedie is voor metastabiliteit, kan het worden beheerst. Elke flip-flop zal bezinken met een kleine tijdconstante, die in een goed ontworpen systeem een ​​kleine fractie van de klokperiode is. Laten we voor een bepaalde overtreding stellen dat 100% van de uitvoer metastabiel wordt. Na 1 keer constante is er een kans van 1/e dat het nog steeds metastabiel is, 36%. Na 10 tijdconstanten is dit slechts 36/miljoen. Dat klinkt misschien niet al te veel, maar met een 10Mhz-klok, dat zijn 360 mislukte gebeurtenissen per seconde, veel te veel. Na 20 tijdconstanten is het ongeveer 1/miljard. Eén faalt om de 100 seconden. Ik zou geen pc willen gebruiken die zo vaak crashte.

Nu kunnen we een willekeurig aantal tijdconstanten krijgen door onze klok te vertragen. Dit heeft echter invloed op de systeemsnelheid. We kunnen speciale 'metastable harde' slippers kopen, die veel kortere tijdconstanten hebben dan gewone flip-flops.

De echte overwinning komt wanneer we twee of meer flip-flops op een rij gebruiken. Dit verhoogt de signaallatentie in een systeem, maar stelt ons in staat de kloksnelheid hoger te houden. Maakt het mij echt uit of het externe interruptsignaal twee of drie klokcycli in beslag neemt om het programma te laten springen? Helemaal niet.

Dus laten we zeggen dat we een flip-flop hebben met 15 tijdconstanten per klokcyclus. Dat staat een 0,2/miljoen faalkans voor elke metastabiele gebeurtenis. Als ik 1000 interrupts per seconde krijg van mijn diskdrive, krijg ik mogelijk meerdere crashes per dag. Nog steeds niet erg goed. Nu cascade ik twee flip-flops en ontvang 30 tijdconstanten. Ik heb nu 40e-15 kans op falen. Het is onwaarschijnlijk dat dit systeem tijdens mijn leven zal falen. Maar wacht, stel ik ben de fabrikant, en heb 100 miljoen van deze systemen in het veld. Nu cascade ik drie flip-flops, en mijn verwachte mislukkingstarief daalt aan 8e-21. Ik verwacht in mijn leven geen fouten van welk systeem dan ook.

Merk op dat de failure rate nog steeds eindig is, het is niet nul. Het is echter zeer onwaarschijnlijk.

4
toegevoegd
Dit is een goed geschreven antwoord op de vraag: "wat is metastabiteit en hoe op te lossen, ... eh ... beheer het." Maar ik vroeg naar de waarschijnlijkheid dat, nadat je de metastabiliteit hebt "gemanaged", de output van je synchronizer gelijk is aan de asynchrone ingangswaarde. Krijgt u altijd een "TRUE" op die gesynchroniseerde INT-invoer?
toegevoegd de auteur Barry, de bron
In de woorden van de late, geweldige, Patrick Moore, 'we weten het gewoon niet!' Laten we zeggen dat de asynchrone ingang een overgang maakt rond de klokrand. In de vorige cyclus is aan tsu voldaan en de sync is het eens met de aysnc, afhankelijk van de pijplijnvertraging. In de volgende cyclus zal aan deze voorwaarde worden voldaan en zij zullen het ook eens zijn. In deze cyclus kunnen ze het eens of oneens zijn, en dat veronderstelt zelfs geen metastabiliteit. Met metastabiliteit kunt u twee metingen uitvoeren van de sync-uitvoer, waarvan er één overeenkomt, de andere niet, met de asynchrone ingang.
toegevoegd de auteur Neil_UK, de bron

Wanneer een flip-flop metastabiel wordt, is niets gegarandeerd over zijn uitgangstoestand tot de volgende klokgebeurtenis. Het is theoretisch mogelijk dat de verkeerde klok lijkt geen effect te hebben, maar de uitgang een seconde later laat schakelen (in de praktijk is de kans dat de schakeling er niet in is geslaagd om een ​​stabiele toestand te bereiken binnen de tijd t (implicerend dat de output spontaan enige tijd daarna zou kunnen veranderen) seconden nadat de klok exponentieel afneemt met t , dus als het raken van de data en klokinput met een bepaalde timingrelatie een kans van 1% zou hebben van de output die zich niet binnen 1us heeft gestabiliseerd, zou er een kans van 1/1.000.000 zijn dat deze niet binnen 1 ms kan stabiliseren, en een kans van 1/1.000.000.000.000 om niet binnen 1 sec te stabiliseren).

De reden waarom dubbele synchronisatoren als effectief "pantser" tegen metastabiliteit worden beschouwd, is dat metastabiliteit op de invoer naar een dubbele synchronisator alleen metastabiliteit op de uitvoer veroorzaakt als de uitvoer van de eerste flop gebeurt om precies te schakelen in het "gevaar" -venster van de tweede. Stel dat bijvoorbeeld een kloksnelheid van 1 MHz wordt gebruikt en dat de flops netjes schakelen, behalve wanneer de gegevens in een bepaald venster van 0,1ns veranderen, in welk geval de uitvoer enige tijd later kan veranderen met de waarschijnlijkheidverdeling die hierboven is genoemd. Zelfs als er een kans van 1% zou zijn dat de eerste latch na één keer geneigd zou zijn om op enig moment te veranderen, zou de kans dat deze tijdens het 0.1ns-venster verandert wanneer de tweede latch "kwetsbaar" zou zijn, veel kleiner zijn.

Merk op dat zelfs met een dubbele synchronisatie het voor sommige metastabiele toestanden mogelijk is om de tweede latch te bereiken. Als de invoer naar de eerste latch opzettelijk wordt getimed om dergelijke omstandigheden te induceren, kan het mogelijk zijn om metastabiele toestanden uit de tweede latch te krijgen met enige voorspelbare regelmaat (bijvoorbeeld één in een miljoen latch-events of zo). Zelfs deze zullen echter niet noodzakelijk resulteren in een circuitstoring als ze worden gebruikt om andere synchrone logica te voeden. Stel dat het signaal van de tweede latch twee circuits voedt, waarvan er een een vertraging van propagandavertraging van 100 seconden heeft voor een latch en de andere geen vertraging heeft. Om ervoor te zorgen dat het circuit niet goed functioneert, moet de uitvoer van de tweede vergrendeling ergens binnen het venster van 100ns vóór de volgende klokrand worden geschakeld. Dat is een groter venster dan nodig zou zijn om ervoor te zorgen dat een register metastabiel kan worden, maar meestal, zelfs wanneer de tweede latch metastabiel wordt, zou dit niet resulteren in een schakelgebeurtenis binnen dat venster.

2
toegevoegd