www.mikrocontroller.net

Forum: FPGA, VHDL & Co. Design von asynchroner FIFO mit 2^n Tiefe


Autor: Max Müller (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Kollegen,

ich bin gerade dabei ein speziellen FIFO in VHDL zu designen.
Ich wollte eigentlich das Rad nicht nochmal neu erfinden, aber
scheinbar gibt es nichts gescheites, bzw. hab ich nichts gefunden.

Es soll asynchron mit zwei unabhängigen Takten arbeiten.
Zusätzlich soll der komplette Speicher für die Tiefe zur Verfügung
stehen. Auf Geschwindigkeit und Platz für die Logik kommt es mir erst
nicht mal so an.

Ich hab mir schon verschiedene Möglichkeiten angeschaut, aber alle
haben irgend welche Nachteile.

Bei Xilinx gibt es eine Applikation Note, die erlaubt aber nur einen
2^n-1 tiefen Fifo bei 2^n möglichen eintragen (511 Tief bei 512
Einträge).

Ein anderes Design (Platz 1 von 2002) von der SNUG ist meiner Meinung
nach komplett falsch, da bei einem leeren Fifo meiner Meinung nach der
letzte gelesene Wert wieder auslesbar sein sollte und nicht der , der
als nächstes überschrieben wird;-)

Coregeneratoren machen zwar auch FIFO's, aber die sind für mich nicht
geeignet (da netzlisten VHDL), da ich im nächsten Schritt das ganze
noch weiter aufbohren will. Und wie gesagt selbst ist der Mann.

Hat von euch jemand ein super Info zu dem Thema asychroner FIFO?

Gruß und ein guten Rutsch

Max

Autor: Jörn (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Max,

schau dir mal das Doc von Xilinx an:

http://www.xilinx.com/xlnx/xweb/xil_tx_display.jsp...

Vielleicht hilft es dir.

Gruss Jörn

Autor: Max Müller (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Jörn

Vielen Dank für den Link. Der Inhalt enspricht einer 2.
Veröffentlichung bei der SNUG (Ein Xilinx Mann war ja auch Co-Autor:-)
Bei dieser Variante ist das Problem, das  mit einer asynchronen
Direction Logik gearbeit wird. Es ist somit nicht synchron und Testbar
:-(

Bei meiner Suche bin ich ein wenig in mich gegangen und hab mal
überlegt.

Da es ein sogenanntes pessemistisches Emty und Full gibt, sollte der
Fifo im Empty Fall noch das zuletzt gelesene wieder ausgeben.
Wenn jedoch parallel in den Fifo auf der anderen Seite geschrieben
wird, sind kurzfristig (bis der neue Schreibptr auf der Leseseite
einsynchronisiert ist) aber theoretisch 2^n+1 Zustande zu speichern.
Somit geht das ganze nur mir einer zusätzlichen Pufferung auf der
Leseseite, oder ein verbot auf der Leseseite zu lesen, falls der Fifo
empty ist, oder mit Kenntnis, das der gelesene Wet falsch sein kann.

ABer ich hab ch nicht kapituliert :-)

Gruß

Max

Autor: Stefan May (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Achtung, hier riecht es nach metastabilen Zuständen. Hast Du das bei
einem asynchronen FIFO bedacht? Wenn nicht, dann schau Dir mal die
folgenden Appnotes von TI an:

http://focus.ti.com/general/docs/lit/getliterature...
http://focus.ti.com/general/docs/lit/getliterature...

ciao, Stefan.

Autor: Max Müller (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Stefan,

vielen Dank für den Tipp.
Die Metastabilen Zustande sind bei meinem Design, sowei bei den
betrachteten natürlich berücksichtigt.

Vielleicht sollte ich statt asynchronen FIFO lieber von einem FIFO mit
zwei Clockdomains reden.

Meine Idee (die so auch von anderen Gemacht wird) ist, das auf beiden
Seiten eines Dual Ported RAMs jeweils eine Logik ist, die jeweils zu
eigenen Clockdomain voll synchron ist.
Der Inhalt des DPRAM ist durch die Hardware verriegelt.
Bzw. ist ein Lesen erst nach ein paar Takten möglich.
Somit sind die Daten auf jeden Fall nicht von metastabilen Zuständen
betroffen.

Die Pointerinformation für das reinschreiben und rausholen sind auch
jeweils voll synchron in den 2 Clockdomains.
Die Pointer werden als Graycode ausgetauscht und dann in der jeweils
anderen Clockdomain synchronisiert (1. Flipflop kann noch Metastabile
Zustande haben, danach nicht mehr).

Jetzt hab ich aber noch eine Frage an dich.
Muss ich 2 Flip-Flops nehmen bevor ich in combinatiorische Logik gehe,
die dann wieder in FlipFlops landet (alle Flip-Flops haben den gleichen
Takt), oder reicht 1 Flip-Flop bis zur Logik aus?

Meiner Meinung nach sollte es zwar nach dem 1. Flip-Flop metastabile
Zustände geben, die sollten aber bis zum nachsten Takt (max. 32MHZ)
zusammen mit der kombinatorischen Logik locker sich stabilisiert haben,
so das dann die Flip-Flops nach der Logik kein Problem mit metastabilen
Zuständen haben sollten.

Ich hab aber ein design mit 2 Synch Flipflops gesehen und weis nicht
genau warum das so gelöst ist.

Gruß

Max

Autor: Stefan May (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ok, dann habe ich noch einen:

http://www-ee.technion.ac.il/~ran/papers%5CSync_Er...

Da ist auch die Methode mit einem Flip-Flop beschrieben. Ob es
funktioniert? It depends. Das kann gut gehen, muß aber nicht. In einem
Taktzyklus muß das Flip-Flop sich für einen Zustand entscheiden und das
ganze muß dann noch durch die Logik durch. Dadurch steigt natürlich
wieder die Wahrscheinlichkeit für metastabile Zustände. Was für ein
FPGA/CPLD verwendest Du?

Ich habe persönlich sehr leidvolle Erfahrungen mit metastabilen
Zuständen machen müssen. Und hatte zum Glück viel Zeit, um mich genauer
mit dem Thema auseinanderzusetzen. Mein Fazit: Traue keiner Lösung. :-)

ciao, Stefan.

Autor: Max Müller (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielen Dank Stefan.

Das Dokument kannte ich noch nicht. Schein ganz intressant zu sein.
Ich hab meine erste Erfahrungen mit Synchronizern bereits von fast 10
Jahren gemacht.
Was mit aber bei den einfachen Lösungen mit einem zusätzlichen
Flip-Flop nie gefallen hat, war das ein eventuelle Störung(z.B. Spike)
ganz schön Mist verursachen kann.
Z.B. Wenn der Spike gerade beim abtakten anliegt, dann wird der Spike
auf die komplette Länge eines Takts verlängert und läuft durch ein von
synchrones System. Deshalb hab ich bei meinen Designs immer dern
sychronisierer mit einer Filterschaltung verbunden.
Ich hatte damals machtig viel Diskussionen mit meinen Kollegen
darüber.

Zurück.
Ich benützt für das aktuelle Design einen ProASICPlus von Actel.
Das ganze muß nicht so schnell sein (max. 24-32MHz), aber halt
super sicher. Mit den Actels umgeht mal halt die SEU Diskussion, das
ist der nächste Hot-Topic, wenn die metastabilen Zustände mal
ausdiskutiert sind :-))

Autor: Stefan May (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich kenne leider die Daten für den verwendeten ASIC nicht. Wenn Du es
ganz genau wissen willst, dann untersuchst Du die Flip-Flops nach dem
Schema des TI Datenblattes (SDYA006). Das habe ich für einen Xilinx
Spartan3 gemacht und die Wahrscheinlichkeit für das Auftreten von
Metastabilen Zuständen berechnet.

Wenn es Super Sicher sein soll, dann mache keine Kompromisse und
verwende den Two-Flop-Synchronizer. Sicherer geht es dann nicht mehr.

Wie sieht eigentlich Dein Synchronisierer aus? Würde mich mal
interessieren, weil ich dazu wie gesagt schon eine Menge untersucht
habe.

ciao, Stefan.

Autor: Max Müller (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also die beste damalige Version war je nach Hardware verschieden.

Eine sehr gute Variante war bei einem 2 Phasen Clock (steigende und
fallende Flanken):

EIngang geht auf 2 Flip-Flops. Eins davon ist nützt ein rising edge
clock, das andere den falling edge Clock (beide sind noch metastabile
gefährdert.
Die Ausgänge werden dann in ein Majority Module (2 von 3 definieren den
Ausgang) geführt. Der 3. Eingang wird von einem 3.FlipFlop Ausgang
versorgt. Der Ausgang ist gleichzeitig das synchronisierte Signal. Takt
kann rising oder falling edge sein.
Der Eingang des 3. FlipFlop ist der Ausgang des Majority Modules.

Falls der FPGA nur eine positive Flanken zulasst, kann natürlich alle
mit dem gleichen Takt versorgt werden, dann sind die Eingänge ein
weitern Takt verzögert.

Ach ja die ProAsicPlus Familie von Actel sind keine ASICS, sondern
Flash-based FPGAs, die als ASIC Ersatz auf den Markt gebracht werden
:-)

Bezüglich des FiFo's hab ich ein paar super Infos bei der Nasa
gefunden.
Schaut mal unter www.klabs.org unter den Präsentation der MAPL
Veranstaltung. Ist super intressant, was es so alles gibt.

Gruß

Max

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.