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
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
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?
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!
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...
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.