Hallo, meine Cyclone3 FPGA basierte Schaltung verarbeitet externe (zur inneren Taktdomain völlig asynchron) Daten. Mittels einer doppelstufigen D-Flipflop Struktur werden diese synchronisiert. Was mich in diesem Zusammenhang interessieren würde: Kennt jemand ein Verfahren (schaltung) wie ich die Anzahl der metastabilen Ereignisse meinem FPGA ermitteln (messen) kann. Merci, tommi
Ich würde aus der Taktdomäne der Zielschaltung eine phasenverschobenen Takt generieren und damit Sample-FFs steuern. Die Sample-FFs greifen dann die Signale vor, zwischen und hinter den Sync-FFs (deine D-FFs) ab. Je Phasenverschiebung würde ich dann z.B. 1Million Samples nehmen und dann schauen, wo und ob Unstimmigkeiten auftreten. Bei z.B. 50MHz dauert dann ein Sample-Vorgang weit weniger als eine Sekunde, bei 100 Phasen also weniger als eine Minute. Gruss, Jörg
Da gab es in den News-Foren mal einen ellenlangen Thread dazu und da hat einer von den Xilinx Leuten auch eine Fomel präsentiert. Ich glaub da gab es auch Referenz-Links für Xilinx Fpga's. Das Thema hat mich aber nie wirklich interessiert. Ich arbeite zwar auch mit asynchronen Clocks aber ob die nun im ersten, zweiten oder dritten Takt gesampelt werden, war mir so ziemlich egal. Die Wahrscheinlichkeiten lagen grob genommen zwischen 10^4 - 10^7.
> Kennt jemand ein Verfahren (schaltung) > wie ich die Anzahl der metastabilen Ereignisse meinem FPGA ermitteln > (messen) kann. Es geht doch nicht um die Anzahl der metastabilen Zustände, sondern es geht wohl darum ob ein metastabiler Zustand bis zum Eintreffen der nächsten Taktflanke abgeklungen ist, sodass das 2. FF nicht mehr metastabil wird. Ich kann mich (dunkel) an eine Diskussion im comp.arch.fpga Forum erinnern, wo die Leute von Xilinx behauptet haben, dass diese Wahrscheinlichkeiten so klein sind, dass man sie fast gar nicht mehr messen kann. Das selber messen kannst Du vergessen.
> Mittels einer doppelstufigen D-Flipflop Struktur werden > diese synchronisiert Synchronisierts Du einen Bus ein? Dann ist es wichtig dass NUR EIN Signal einsynchronisiert wird, nämlich das, welches anzeigt dass die Daten übernommen werden können. Nicht die Bus-Daten selbst mittels eine FF Kette einsynchronisieren, sonst kann es vorkommen dass eine Leitung den Zustand von der 1. Flanke bekommt und eine andere Datenleitung den Zustand von der 2. Flanke.
Vielen Dank für das Interesse an dem Thread. Ich synchronisiere ein Pulse von einem externen Sensor, also single-bit. Mit doppelstufig meinte ich zwei hintereinander geschaltete FF. @ Klaus Es geht doch nicht um die Anzahl der metastabilen Zustände, sondern es geht wohl darum ob ein metastabiler Zustand bis zum Eintreffen der nächsten Taktflanke abgeklungen ist, sodass das 2. FF nicht mehr metastabil wird. Doch, mir geht es schon um die Anzahl der metastabilen Zustände. Z.B. die am Ausgang meines ersten FFs auf einen bestimmten 'Messzeitraum' bezogen. Ich hatte mal etwas von Schaltungen gehört, die genau solche Events triggern und zählen. Mit so etwas könnte man dann ja wohl auch die MTBF ermitteln !?! Gruss Tommi
@ Klaus Falser (kfalser) > Synchronisierts Du einen Bus ein? > Dann ist es wichtig dass NUR EIN Signal einsynchronisiert wird, nämlich > das, welches anzeigt dass die Daten übernommen werden können. Dann können aber u.U. deine Daten, die du übernehmen willst, schon wieder entschwunden sein. Immerhin hast du mit dem einsynchronisierten Übernahmesignal bezogen auf den Bus 2 Takte Latency. Sollte das also die steigende Flanke des Write-Signals sein, sind die Originaldaten auf dem Bus längst weg :-(
@Tommi Es gibt eine Application notes von Xilinx APP091 und APP077, wo diese Dinge erklärt und besprochen werden. Aber die Wahrscheinlichkeiten selber messen ?? Dazu sind sie meiner Meinung nach zu klein. @Lothar Deshalb muß das Einsynchronisieren eines Busses auch gut überlegt werden. Falsche Daten einzulesen bringt es doch auch nicht, oder ? Man kann aber die Daten mit dem Write-Signal latchen, und von dort mit dem synchronisierten Signal einlesen
>Falsche Daten einzulesen bringt es doch auch nicht, oder ? Exakt, wobei man oft pauschal sampeln muss, um hinterher zu entscheiden, ob das, was man da hat, etwas Plausibles ist, oder nicht. Ein latchen und das WR_E oder ALE beobachten, ist da noch das einfachste, weil es effektiv ein synchrones System ist. Schwerer wird es, wenn man kein Signal hat, das angibt, wenn die Adressen/Daten passen. Aber nochmal zur Frage: Ich glaube, daß hier wieder mal Metastabilität mit Instabilität verwechselt wird. Letzteres ist ja das eigentliche, da häufige Problem der Sychronisierung. Metastabilität bedeutet, daß der Ausgang eines FFs nicht nur eine unbekannten und nicht vorhersehbaren Zustand einnimmt, da es auf der Taktflanke gesampelt hat, sondern daß es so ungünstige getroffen hat, daß es erst einmal nur halb schaltet und sich länger, als gfs zu tolerieren ist, in einem Zwischenzustand aufhält. Erst, wenn es dann vollständig gekippt ist, "entscheidet" sich der nachfolgende Schaltungsteil, was dann wieder dazu führt, daß auch das nächste FF u.U. wieder wechselnde Flanken sieht. Da eine Einsynchronisation über direkt kaskadierte FFs geschieht, müsste ein solcher metastailer Zustand aber schon extrem lange anhalten, wenn er zu einem Problem werden soll. Dies ist extrem unwahrscheinlich, da die heutigen Chiptechnologien sehr hohe Verstärkungen in den mitkoppelnden Zweigen gestatteten, die zu extrem geringen Metazeiten füheren. >wo die Leute von Xilinx behauptet haben, dass diese >Wahrscheinlichkeiten so klein sind, dass man sie fast gar nicht mehr >messen kann. Genau. Da geht es um einige 10ps mehr oder weniger. Das kann aber aber sehr gut simulieren und auch berechen. Im Übrigen triff diese Werbeaussage, die Xilinx dazu auf der HP macht, auch auf die anderen Herstelelr zu :-)
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.