Forum: FPGA, VHDL & Co. FIFO mit 2 verschiedenen Takten im Cyclone


von Jonas K. (jonas_k)


Lesenswert?

Servus,


ich benötige für ein Interface von einem FTDI-Chip (USB-> 8Bit, 60 MHz) 
irgendwo ein FIFO, das mir die Umsetzung von 60 MHz auf den Takt des 
restlichen Systems von 100 Mhz oder mehreren hundert MHz erledigt. Das 
FIFO kann ich ja prinzipiell mit Quartus generieren.
Ich will auch nur in die Richtung 60-> 100 MHz Daten rüberschicken ohne 
eine Antwort zu erhalten.

Nun kommen ja die Daten von der USB-Schnittstelle recht flott an 
(idealerweise mit 40 MByte/s). Wie kann ich sicherstellen, dass mir das 
FIFO nie überläuft? Gibt es da irgendeine Regel, wie tief das FIFO sein 
muss, damit der Schreibpuffer nie voll wird, wenn ich immer lese? Also 
vermutlich liegt das am Verhältnis der beiden Taktraten, mit denen 
gelesen und geschrieben wird, aber ich komm nicht drauf...


Gruß,
Jonas

von Marius W. (mw1987)


Lesenswert?

Ist doch ganz einfach. Wenn dein FIFO mit 60 MHz beschrieben wird, dann 
musst du im Mittel mit mindestens 60 MHz auslesen. Du kannst natürlich 
auch mal eine "Pause" beim Auslesen einlegen, musst dann aber dafür 
sorgen, dass dein FIFO groß genug ist, um keine Daten zu verlieren. Das 
Auslesen danach müsste dann aber mit mehr als 60 MHz gemacht werden, 
weil du ja sonst im Mittel langsamer bist.

Spontan würde ich sagen, bei 60 MHz rein und 100 MHz raus brauchst du 
nur einen Mini-FIFO für den Taktübergang. Vorausgesetzt natürlich, du 
kannst auf der 100 MHz Seite ein Datenwort pro Takt verarbeiten.

Gruß
Marius

von Nico (nico123)


Lesenswert?

Ich kenne den Cyclone nicht direkt, habe das aber beim Xilinx schon 
gemacht.
Werte einfach das Statusbit FIFO_full aus und "sperre" den FTDI wenn es 
gesetzt ist! Welchen FTDI verwendest Du denn?

von Jonas K. (jonas_k)


Lesenswert?

Nico ... schrieb:
> Ich kenne den Cyclone nicht direkt, habe das aber beim Xilinx schon
> gemacht.
> Werte einfach das Statusbit FIFO_full aus und "sperre" den FTDI wenn es
> gesetzt ist! Welchen FTDI verwendest Du denn?

Ich verwende den FT2232H im Modus "FT245 Style Synchronous FIFO 
Interface".

Natürlich könnte ich einfach, falls der Buffer des FIFO voll ist, nichts 
mehr einlesen. Das wär aber sehr viel zu ändern an den FSM's, die ich 
bisher habe zum Auswerten der Daten.
Mir geht es eher darum, wann ein FIFO nicht überläuft. Z. B. beim genau 
doppelten Takt dürfte das nie passieren. Wenn es jetzt ein ungerades 
vielfaches - also schneller - ist, dann können ja eigentlich nur maximal 
einmal pro schnellerer Taktperiode Daten ins FIFO kommen, oder? aber 
sicher bin ich mir nicht...

Wenn ich das FIFO so mache, dass ich das lesen vom FT2232 nicht anhalten 
muss, wärs mir schon viel lieber. Nicht nur um am Design weniger zu 
ändern, sondern auch geschwindigkeitsmäßig!

von Jonas K. (jonas_k)


Lesenswert?

Marius Wensing schrieb:
> Ist doch ganz einfach. Wenn dein FIFO mit 60 MHz beschrieben wird, dann
> musst du im Mittel mit mindestens 60 MHz auslesen. Du kannst natürlich
> auch mal eine "Pause" beim Auslesen einlegen, musst dann aber dafür
> sorgen, dass dein FIFO groß genug ist, um keine Daten zu verlieren. Das
> Auslesen danach müsste dann aber mit mehr als 60 MHz gemacht werden,
> weil du ja sonst im Mittel langsamer bist.
>
> Spontan würde ich sagen, bei 60 MHz rein und 100 MHz raus brauchst du
> nur einen Mini-FIFO für den Taktübergang. Vorausgesetzt natürlich, du
> kannst auf der 100 MHz Seite ein Datenwort pro Takt verarbeiten.
>
> Gruß
> Marius

Verarbeitet wird immer.

Ich habs mir auch so gedacht, dass ich beim schnelleren Takt keine 
Probleme habe. ich werds einfach ein paar Schichten tief machen, dann 
wirds schon keine Probleme geben. Simuliern tu ichs ja dann auch noch...

von Marius W. (mw1987)


Lesenswert?

Alles ist gut solange die Auslesebandbreite im Mittel so groß ist, wie 
die Bandbreite in den FIFO hinein.

Gruß
Marius

von Nico (nico123)


Lesenswert?

Du musst doch an deiner FSM nichts ändern! Du verbindest einfach das 
FIFO_full-Signal im Cyclone mit dem TXE-Pin des FTDI.

von Jonas K. (jonas_k)


Lesenswert?

Nico ... schrieb:
> Du musst doch an deiner FSM nichts ändern! Du verbindest einfach das
> FIFO_full-Signal im Cyclone mit dem TXE-Pin des FTDI.

Da hast du recht :D
werd ich wohl noch zu Sicherheit machen...


EDIT:ich denke du meinst verunden mit RXF, aber ansonsten hast natürlich 
recht.

: Bearbeitet durch User
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.