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 :-)
Eine eigene Frage?
Dieser Thread ist über 18 Jahre alt.
Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.