Forum: FPGA, VHDL & Co. VHDL Input Signal Synchronization


von King Julian (Gast)


Lesenswert?

Mir ist klar, dass ich Signale aus unterschiedlichen Clockdomains 
mittels Register synchronisieren muss. Wo ich allerdings noch nach einer 
logischen Erklärung suche ist bei der Anzahl der Register.

Es wird grundsätzlich geraten (z.B. Altera/Intel) eine 
Synchronisation-Chain aus 2 Registern zu bauen... worin besteht der 
Unterschied zu nur einem Register? Kann der Ausgang eines Registers 
immernoch Metastabil sein, wenn sein Eingang Metastabil ist? Dann könnte 
ich aber auch mit 2 seriellen Registern noch eine Metastabilität haben 
und habe einfach die Wahrscheinlichkeit dafür verringert indem ich 2 
Register zur synchronisation verwendet habe?

von Andreas S. (Firma: Schweigstill IT) (schweigstill) Benutzerseite


Lesenswert?

Genau so ist es. Metastabilität lässt sich nicht komplett vermeiden, 
sondern die Wahrscheinlichkeit ihres Auftretens reduzieren. Bei modernen 
FPGAs hat man mit zwei bis drei Synchronisationsstufen die mittlere Zeit 
schon bis zum Sankt-Nimmerleins-Tag ausgedehnt. Bei früheren 
programmierbaren Logikbausteinen hielten sich metastabile Zustände wohl 
tatsächlich über lange Zeiträume, d.h etliche Nanosekunden, wohingegen 
heutige Bausteine dagegen wesentlich besser gewappnet sind.

Allerdings ist Metastabilität nur ein Aspekt. Man kann auch einfach 
schlecht einsychronisieren, ohne das Metastabilität auftreten muss. 
Hierzu gibt es sehr viele Publikationen. Der auch hier anwesende Lothar 
Miller hat eine sehr einfach verständliche Einführung verfasst:

http://www.lothar-miller.de/s9y/categories/35-Einsynchronisieren

von Weltbester FPGA-Pongo (Gast)


Lesenswert?

Andreas S. schrieb:
>die mittlere Zeit
welche "mittlere Zeit"?

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

King Julian schrieb:
> worin besteht der Unterschied zu nur einem Register?
Prinzipiell reicht bei heutigen schnellen FPGAs eine Registerstufe aus. 
Allerdings kann es dann passieren, dass so Effekte wie Register Doubling 
mit rein spielen und deshalb ist man bei wenig zeitkritischen Signalen 
einfach nach Schema F mit zwei auf der sicheren Seite...

Im Prinzip ist Metastabilität bei einem Anfängerdesign im Bereich unter 
250MHz nie ein Problem. In >>99% der Fälle sind es simple nicht 
synchronisierte Eingänge und die im obigen Link beschriebenen Laufzeiten 
zu den beteiligten Flipflops.

Weltbester FPGA-Pongo schrieb im Beitrag #5582437:
> Andreas S. schrieb:
>> die mittlere Zeit
> welche "mittlere Zeit"?
Bis zum nächsten Fehler durch Metastabilität mach dem 2. Register...

: Bearbeitet durch Moderator
von Christoph Z. (christophz)


Lesenswert?

Zu diesem Thema und solchen Überlegungen habe ich mal ein super Paper 
gefunden mit gesammelten kaputten "synchronizern" und den Erklärungen 
dazu wieso sie kaputt sind:

Fourteen Ways to Fool Your Synchronizer:
http://webee.technion.ac.il/~ran/papers/Sync_Errors_Feb03.pdf

von King Julian (Gast)


Lesenswert?

Vielen Dank für die Ausführungen, die Literatur werde ich mir mal zu 
Gemüte führen :)

von Andreas S. (Firma: Schweigstill IT) (schweigstill) Benutzerseite


Lesenswert?

Weltbester FPGA-Pongo schrieb im Beitrag #5582437:
> Andreas S. schrieb:
>>die mittlere Zeit
> welche "mittlere Zeit"?

Damit ist hier der mittlere zeitliche Abstand zwischen zwei metastabilen 
Ereignissen gemeint, auf neudeutsch auch MTBF (mean time between 
failures) genannt.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Christoph Z. schrieb:
> und den Erklärungen dazu wieso sie kaputt sind
Wobei man dabei beachten sollte, dass die meisten Referenzen darin gut 
20 Jahre und z.T. deutlich älter sind und sich damals(tm) die Flipflops 
aus metastabilem Zustand deutlich langsamer erholt haben. Und zudem sind 
die Erkenntnisse, die den Referenzen zugrunde liegen vermutlich noch 
älter...  ;-)

von J. S. (engineer) Benutzerseite


Lesenswert?

Ja, bei den Themen FPGA hat die Information über aktuelle Technologie 
eine enorme Latenz:-)

Es ist aber schon lustig: Das Thema META ist seit locker einer Dekade 
keines mehr, trotzdem trifft man es bei fast jedem Kunden an. Xilinx und 
auch Altera haben schon vor Jahren Dokumente dazu heraus gegeben, die 
offenbaren, wie kurz diese Zeiten inzwischen geworden sind und dass das 
praktisch untergeht, bzw. in den Timinganalysen berücksichtigt ist.

Das Thema META wurde auch hier im Forum schon mehrfach erörtert und 
untersucht: Metastabilität ist x-mal unwahrscheinlicher, als andere 
Einflüsse, wie Einstreuungen auf den Leitungen, die Signalübertragung 
funktionell unsicher machen können und dass dem so ist, ist auch gut so, 
denn das, was die Meisten gegen META unternehmen, nämlich FFs 
spendieren, verläuft Dank vergessener keep-constraints ohnehin im Sande, 
weil die munter verschoben werden und physisch gar nicht mehr 
existieren, bzw. nicht dort, wo sie sitzen müssten um ihre Wirkung zu 
tun. Wir hatten das bei der Reset-Problematik schon wenigstens 3mal an 
unterschiedlichen Stellen hier durchexerziert, wozu das führen kann. 
Siehe Lothars Kommentar oben.

Richtig ist auch:

Das, was Viele als "META-Problem" benennen, ist nach meiner Erfahrung 
nichts anderes, als das grundsätzliche Datenunsicherheitsproblem, weil 
man nicht sicher ist, zu welchem Zeitpunkt man ein Signal erwischt und 
welchen Wert es beim Flankenwechsel hat. Bei Bussen ergibt sich dann ein 
Inkonsistenzthema und wenn man dieses löst, ist das META - so überhaupt 
existent - gleich implizit mitgelöst.

Aus der Erfahrung der Sichtung von sicher >100 designs in den letzten 
Jahren kann ich zudem die Aussage treffen, dass die allermeisten 
theoretisch existenten META-Probleme durch die designer künstlich 
hervorgerufen wurden, weil sie mit allenmöglichen händisch erzeugten 
Takten in den designs hantieren, welche sich dann gegenseitig Daten mit 
ähnlichen Flankenzeitpunkten übergeben, statt einfach einen einzigen 
Takt und enables zu nehmen.

Wenn dann wirklich mal in der Praxis solche Datenprobleme beobachtbar 
waren, dann war auch genau so was immer der Grund.

Ich kann mich an ein design von vor 7 Jahren erinnern, das war absolut 
legendär: Eine zweistellige Anzahl von Takten, wo 2-3 gereicht hätten 
und mehr, als 25 Domänenübergänge mit angeblich ansynchronen Fifos und 
Angst-FlipFlops dazwischen, die überhaupt erst dafür gesorgt haben, dass 
das design richtig zeitkritisch wurde und teilweise inkonsistente Daten 
eingetaktet wurden, statt sie abzufangen, während andere verloren 
gingen.

Da gab es alles und sicher auch den einen oder anderen Meta-Übergang 
inklusive verschleppter Daten infolge mangelnder constraints mit 
Ergebnissen, die von der Temperatur und der synthetisierten Version 
abhängig waren. Nach der Entmystifizierung des designs blieben 3 domains 
und 3 synchrone Fifos über. Halb so groß, doppelt so schnell und vor 
allem weniger "Rauschen" auf den Daten :-)

von chris (Gast)


Lesenswert?

Über das Thema kann man auf jeden Fall lange diskutieren:
Beitrag "VHDL Grundlagen Pin Zustand lesen, Flankenerkennung"

von Noch einer (Gast)


Lesenswert?

Ausgerechnet deinen eigenen Beitrag dazu zu linken, ist aber jetzt nicht 
so zielführend, zumal du - wie dort zu lesen ist -

1) Flankenerkennung und Synchronisation vermischst
2) "Schwingen eines flankengetriggerten D-FlipFlops" annimmst.
3) metastabile Zustände zu angeblichem altern des Chips führen

Dieser thread dort ist eher in der Rubrik "Freitagsbelustigung" 
angesiedelt!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.