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...
Alles ist gut solange die Auslesebandbreite im Mittel so groß ist, wie die Bandbreite in den FIFO hinein. Gruß Marius
Du musst doch an deiner FSM nichts ändern! Du verbindest einfach das FIFO_full-Signal im Cyclone mit dem TXE-Pin des FTDI.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.