Hallo, ich habe jetzt eine Problemstellung, die es erfordert, daß ich zu Debugging-Zwecken aus meinem FPGA mit ca. 10MByte/sec Daten an den PC sende. Die Daten brauche ich hernach als Binärfile auf dem PC. Ein kurzer Snapshot, 1sec ist nötig, 5sec wären schon top. Dauerbetrieb nicht nötig. Leider steht mir kein kommerzielles Equipment zur Verfügung, so daß ich derzeit über eine eigene Lösung nachdenke. Das ganze hat sich jetzt allerdings als mehr Aufwand herausgestellt als ich dachte, und deshalb habe ich beschlossen, es hier einmal vorzustellen. Entweder zeigt mir jemand eine bereits existierende Lösung, oder es lohnt sich auch für andere, weil es dort auch benötigt werden würde. Ob ein USB-LA das vielleicht könnte? Frage an die Allgemeinheit! Da habe ich irgendwelche Bedenken daß synchrones Samplen und Binäroutput dann irgendwelche Low-Cost-Lösungen eventuell überfordern. Ich habe als Interface zum PC USB2.0 High Speed beschlossen, und auf PC-Seite soll eine CDC-Device einen COM-Port aufbauen. Damit erübrigt sich dort die Programmierung von properitärer Software, ein kleines DOS-Programm kann die Daten aufzeichnen. Das ganze in der Hoffnung daß der PC-seitige Treiber die 10MByte auch verarbeiten kann. Nun gibt es zwei Devices: Zum einen Cypress FX2LP, zum anderen FTDI FT2232HL. Über den Cypress FX2 findet man viel Information im Netz, aber eine Schritt-für-Schritt-Anleitung ist nirgends dabei. Ich habe hier ein Eval-Board und mir ist es noch nicht einmal gelungen ein Programm ins EEPROM zu schreiben. Zudem die Applikation für das Problem zu entwickeln auch nicht gerade einfach ist. Liest man hier im Forum auch so zwischen den Zeilen... Oder irre ich mich gewaltig und jemand hat das gemacht? Also bin ich auf den FT2232 gegangen, und dieser hat ein sogenanntes "Asynchronous FIFO", 8 Bit parallel plus Write-Strobe. Für diesen Chip bin ich gerade dabei eine kleine Leiterplatte zu machen, 8 davon würden auf eine Eurokarte passen, es wäre also ein wirklich kleines, billiges Board. Außerdem hoffe ich daß der FTDI-Treiber, wenn die schon wissen daß ihr Device für USB2.0 High Speed gebaut ist das dann auch wenigstens zu 25% verarbeiten kann. Frage ans Forum: Was haltet ihr davon? Erfinde ich das Rad ein zweites Mal oder soll ich das zuende bringen? Wenn letzteres, gibt es irgendwelche Ideen für Verbesserungen? Danke, Günter
Um Daten aus einem FPGA zu bekommen erschiene mir Ethernet irgendwie sinvoller als USB. Wenn die SW auf dem PC gut geschrieben ist kannst du locker Gbit Ehternet in echzeit speichern (Wir machen zusätzlich noch komplexe Bildverarbeitung) 10MBit sollten keine Probleme machen...
Hallo, also zum einen: Im FPGA soll das möglichst wenig Aufwand sein. So simpel wie 8 Bit anlegen und einen Strobe ausgeben. Gleich Ethernet einbauen oder sowas, das ist viel zuviel Aufwand. Darunter fällt auch Zwischenspeichern. Das vorhandene serielle Interface hätte max. 2MBit/sec, gegenüber 10MByte/sec ist das ein Faktor 40, also wie speichere ich in einem etwas kleinen FPGA 10MByte Daten zwischen, ohne externes RAM? FPGA ist ein kleines Altera Cyclone oder Cyclone II. Ciao, Günter
Günter (dl4mea) schrieb: > also wie speichere ich in einem etwas kleinen FPGA 10MByte Daten > zwischen, ohne externes RAM? Kein Chance. Ein FPGA mit soviel internem Speicher gibts nicht... :-( Nicht mal das aktuelle Flaggschiff von Xilinx (Virtex 6) kommt mit 38 MBit an deinen Wunsch heran: http://www.xilinx.com/products/virtex6/lxt.htm Und klein ist der dann garantiert nicht mehr... Und falls du doch eines findest, dann poste das hier mal, ich suche sowas auch... ;-)
Daten über eine Ethernetverbindung zu jagen ist nicht schwer. Was den Aufwand macht, sind die IP Pakete zu bauen und das Timing, wenn mehrere Teilnehmer senden wollen. Für deine Anwendung kannst du eine Spezialfall bauen. Wenn du nur eine Ethernetverbindung mit nur zwei Teilnehmern baust, dein PC und auf der anderen Seite der FPGA. Die Daten ohne Ethernetframe versenden, dann kannst du sicherstellen wer zur welchen Zeit sendet. Auf der PC-Seite musst du auch ein Programm schreiben, die vorgefertigen Sockets gibt es auch nicht. Es ist keine Ethernetverbindung mehr. Das ist nur physikalisch die Ethernetverbindung mit eigenem Protokoll. Dann könnte es mit viel Ideenreichtum gehen. Doch mit der Datenmenge muss auch dein PC klar kommen. Du willst 10Myte/s das sind 80Mbit/s. Dazu kommt noch ein Overhead durch das Synchronisationsmuster und das Coding. Kurz gesagt 100Mbit Ethernet reicht nicht aus. Da brauchst du 1Gbit Ethernet.
Mit dem Cypress FX2 im Slave FIFO Modus und einem kleinen FIFO im FPGA erreichst du locker konstante 10MB/s. Kannst auch einen isochronen Endpoint einbauen, da bekommst du vom Host eine konstante Bandbreite von max. 24MB/s zugesichert. Wäre sicherlich sinnvoll bei dir.
Christian R. schrieb: > Mit dem Cypress FX2 im Slave FIFO Modus und einem kleinen FIFO im FPGA > erreichst du locker konstante 10MB/s. Kannst auch einen isochronen > Endpoint einbauen, da bekommst du vom Host eine konstante Bandbreite von > max. 24MB/s zugesichert. Wäre sicherlich sinnvoll bei dir. Hallo Christian, ja, das das habe ich oben auch als Möglichkeit erwähnt. Genau so dachte ich mir die Lösung mit dem FX2. Nur die Frage: Gibt es das bereits irgendwo beschrieben? Es sagt sich nämlich leicht, aber wenn ich mich dahin jetzt einarbeite, dann wird das ein eigenes Projekt und nicht nur ein Debugging-Tool... Ciao, Günter
René D. schrieb: > Was den > Aufwand macht, sind die IP Pakete zu bauen und das Timing Warum soll es denn jetzt gleich IP sein? Wenn ein Ethernet Interface da ist kann man einfach diese aussenden und mit wireshark alle Pakete aufzeichnen. Da gehen locker 10Mbyte/s.
Hallo, nun, prinzipiell wäre Ethernet und Capturing mit Wireshark denkbar, die Daten kann man aus dem Trace dann mit erträglichem Aufwand extrahieren. Ok, also. Nur, was brauch ich auf der FPGA-Seite dazu? Das einzige, das ich dazu bislang kenne, ist das hier: http://www.fpga4fun.com/10BASE-T2.html Einen PHY anzuschließen würde ich mir auch noch zutrauen ;-) und wäre vom Aufwand her durchaus machbar. Ciao, Günter
Günter (dl4mea) schrieb: > ja, das das habe ich oben auch als Möglichkeit erwähnt. Genau so dachte > ich mir die Lösung mit dem FX2. Nur die Frage: Gibt es das bereits > irgendwo beschrieben? Es sagt sich nämlich leicht, aber wenn ich mich > dahin jetzt einarbeite, dann wird das ein eigenes Projekt und nicht nur > ein Debugging-Tool... Naja, beim Entwicklungspaket sind einige Beispiel-Firmware Sachen dabei. Ansonsten gibts noch so ein FX2 Board von Brain Technology, die haben auch eine Firmware, gleich so benutzbar. Allerdings nicht mit CDC, wie du oben schriebst. Muss man schon die DLL einbinden. Einarbeiten musst du dich immer, egal ob USB, Ethernet oder sonstwas. Am einfachsten dürfte die Sache noch mit dem neuen FT2232H sein, der kann die Datenrate locker und benötigt keine Firmware-Programmierung.
Christian R. schrieb: > Am einfachsten dürfte die Sache noch mit dem neuen FT2232H sein, der > kann die Datenrate locker und benötigt keine Firmware-Programmierung. Danke. Also doch das, was ich oben bereits als Platine vorstelle? Ciao, Günter
Günter (dl4mea) schrieb: > Christian R. schrieb: >> Am einfachsten dürfte die Sache noch mit dem neuen FT2232H sein, der >> kann die Datenrate locker und benötigt keine Firmware-Programmierung. > > Danke. Also doch das, was ich oben bereits als Platine vorstelle? Gibt es auch fertig als "FT2232H Mini Module". Damit sollten bis zu 41MB/s drin sein.
Digi Thal schrieb: > Gibt es auch fertig als "FT2232H Mini Module". Damit sollten bis zu > 41MB/s drin sein. D A N K E !!! Das wars, auf was ich gewartet habe... Danke nochmal, die Diskussion hier hat sich gelohnt! Sobalds läuft werde ich es mal ergänzen. Ciao, Günter
hallo schrieb: > René D. schrieb: >> Was den >> Aufwand macht, sind die IP Pakete zu bauen und das Timing > > Warum soll es denn jetzt gleich IP sein? Wenn ein Ethernet Interface da > ist kann man einfach diese aussenden und mit wireshark alle Pakete > aufzeichnen. Da gehen locker 10Mbyte/s. Genauso meine ich es. Ich hatte da auch schon meine Vorstellung das Ethernet als Debbug tool zu nutzen. Dazu noch ein Programm zum Steuern für den PC. Das wäre so etwas wie Chipscope. Ethernet pur ist einfach. Phy intialisieren. Die Phy ist dafür sehr schlau. Dann Synchronisationsstring+ Daten auf den Bus paketweise legen.
Ich habe mir auch das Mini-Modul von Farnell gekauft (kostet ca. 28,30€) http://de.farnell.com/ftdi/ft2232hq-mini-module/modul-usb-2-port-ft2232h-basiert/dp/1697465 Dies habe ich an den PC angeschlossen um erst einmal zu testen ob ich die Softwareseite am PC in den Griff bekomme. Hierzu habe ich den Sendeleitung vom FTDI-Chip (WR#) auf GND gezogen. Anschließend habe ich den FFT2232H mit dem FTDI-Tool auf sync FIFO Modus umgestellt (dadurch erreiche ich eine konstante TRansferrate von 41MByte) Bitte die PDFs durchlesen dort steht beschrieben welche Funktionen man benutzen muss, damit der FT2232H im sync FIFO MOdus läuft. Anschließend habe ich meine eigene Platine mit einem Spartan 3A400 erstellt. Mit meiner eigenen Platine konnte ich die Datentransferrate sogar auf 45MByte pro Sekunde erhöhen (ic denke dies liegt am besseren Routen der Datenleitung). Ich habe auch schon bereits 2 Themen dazu im µC und FPGA Forum veröffentlicht, wo ich meine Erfahrungen mit diesem Chip gepostet habe. Ich den Spartan 6 XC6SLX25 benutzen. Dieser besitzt 936MBit BlockRam. Damit kann man schon eine ganze menge überbrücken. und ist zudem noch sehr bezahlbar.
Blos nicht anfangen den TCP/IP Stack im FPGA selber zu implementieren. Ich gibt ICs wie den W5300 von WIZnet die alles für Dich erledigen. (Ist wie der FTDI-USB-Chip) Der W5300 enthält einen Hardwired TCP/IP Stack so das man die Daten nur noch wie in einen FIFO schreiben muss.
Ich finde die Idee mit dem FT2232 sehr gut! Ihr habt irgendwie vergessen, dass das Live-Capturen der Daten nur für's Debugging ist. Wieso sollte man dann den FPGA rausrippen und ein Ultra-Dings für 2k$ einbauen, damit man 50MBit Daten im FPGA zwischenspeichern kann. Wieso sollte man einen kompletten TCP/IP-Stack einbauen? Ihr seid doch verrückt ;-) Seine vorgeschlagene Lösung ist schon das Beste, was einem hierzu einfallen kann. Schnell und einfach umzusetzen. Die FX mag ich persönlich garnicht, weil man dann wieder einen weiteren µC (8051er) zum Programmieren hat, der Rotz schon ausgestorben ist und die Tools total verbuggt. Ich hab z.B. den FX-USB-Programmer nie zum Laufen bekommen ... Grüße, Edding400
Hallo, so, meine zwei Module habe ich bekommen, und ich will jetzt mit dem FT_prog den FIFO-Mode einschalten. Was mich aber jetzt wundert, und vielleicht weiß hier jemand die Antwort: Ich sehe im FT_prog (Version 1.10) nur einen generellen 245-FIFO-Mode, nicht aber die Unterscheidung zw. synchron und asynchron, und ich sehe beispielsweise auch die SPI, JTAG und I2C-Modis dort nicht aufgeführt, von denen das Datenblatt spricht. Kann das jemand beantworten? (Sollte es woanders schon erwähnt sein, dann reich ja auch ein Link, dann hat es wenigstens den Sinn daß das hier ein vollständiger Artikel wird) Danke, Günter
Ja man schaltet dort nur in den FIFO MODE um. Es gibt die Application Node AN_130 http://www.ftdichip.com/Support/Documents/AppNotes/AN_130_FT2232H_Used_In_FT245%20Synchronous%20FIFO%20Mode.pdf Hier steht genau beschrieben was man alles machen muss. Du must ein kleines Programm schreiben, das den syn. FIFO Mode aktiviert. Wenn Du in den sync. FIFO Mode geschaltet hast, kann kann man den CLK_OUTPUT vom FTDI-Chip überprüfen. Hier muss ein CLK von 60MHz herauskommen. Dann hast Du es erfolgreich geschaft
Hallo Johann, ich hatte es befürchtet... Es läuft ja schon, zumindest mit asynchron-seriellem Interface ausgangsseitig. Tiny-C ist wirklich gut. Dieses Dokument sollte man auch erwähnen: AN2232-02 Bit Mode Functions for the FT2232 http://www.ftdichip.com/Support/Documents/AppNotes/AN2232C-02_FT2232CBitMode.pdf Ciao und danke, Günter
Ich arbeite mit Labview. Dort habe ich innerhalb von einer halben ein kleines Programm geschrieben, mit dem ich dann ich den sync. FIFO Modus umgeschaltet habe. Zudem kann ich mit diesem Programm die Daten empfangen und darstellen.
Hallo, heute morgen habe ich es mit 10MByte/sec zum Laufen gebracht. Eigentlich ist es einfach, aber um die Daten zusammensuchen und alle Quellen auszuwerten war dieser Thread und die Hilfe hier im Forum sehr gut. Beschreibung folgt. Ciao, Günter
Hallo, ich hatte zugesagt meine Lösung zu präsentieren: Anbei drei Bilder: - das FT2232 Mini Module, mit Fädeldrähten ans FPGA angeschlossen (der dicke, grüne und ein Fädeldraht sind GND) - ein Screenshot des DOS-Tools "sshot_fifo", bei der Aufnahme von 1Mio Samples - ein Screenshot von Cooledit96, welches rohe Binärdateien als Waveform darstellen kann (*1) Als Dokumente habe ich verwendet: (1) FT2232H Datenblatt http://www.ftdichip.com/Products/ICs/FT2232H.htm (2) FT2232H Mini Module Datenblatt http://www.ftdichip.com/Support/Documents/DataSheets/Modules/DS_FT2232H_Mini_Module.pdf (3) FTDI Application Note AN_130 "FT2232H Used In An FT245 Style Synchrounous FIFO Mode" http://www.ftdichip.com/Support/Documents/AppNotes/AN_130_FT2232H_Used_In_FT245%20Synchronous%20FIFO%20Mode.pdf (4) Software Application Development D2XX Programmer's Guide http://www.ftdichip.com/Support/Documents/ProgramGuides/D2XX_Programmer%27s_Guide%28FT_000071%29.pdf Softwareseitig verwende ich so ziemlich genau das Beispiel 4.1 aus (3), welches ich aber um eine Suche nach der richigen Device ID ergänzt habe. Ich verwende den "Asynchronous FIFO Mode", weil dieser nur 8 Datensignale plus einen Strobe verlangt, und mir geschwindigkeitsmäßig ausreicht. Dieser ist in (1) Kapitel 4.5 beschrieben. Die Daten werden angelegt, und 20ns später das WR#-Signal für 40ns auf '0' geschaltet. Das reicht. Also gerade mal 9 Verbindungen plus GND. Pullups oder sonstiges habe ich nicht verwendet. Den oft erwähnten 60MHz-Takt am Taktausgang CLKOUT habe ich gesehen, aber offenbar verschwindet er sobald der FT2232H in den asynchronous Modus schaltet. Mir ist auch jetzt noch nicht klar wie dieser zwischen asynchronous und synchronous unterscheidet, denn es gibt nur einen Mode=0x40 zum Einstellen des FIFO-Mode. Es sei denn der asynchronous ist eigentlich ein synchronous, der nur den Takt ignoriert. Ich habe für TinyC ein kleines Tool geschrieben, welches den gewünschten FT2232 sucht, dann die entsprechende Datenmenge empfängt und in ein File schreibt. Wenn mir jemand sagt wie ich das hier auf mikrocontroller.net hochladen kann, dann gerne. Die Daten stammen von einem mit 10MSamples laufenden AD-Wandler. Weiterführende Informationen entweder hier http://www.mikrocontroller.net/articles/1090_MHz-ADS-B-Receiver oder auf meiner Webseite http://www.qsl.net/dl4mea/fpgaadsb/fpgaadsb.htm Somit also danke an alle, die hier mitdisuktiert haben, für die entstandenen Kosten (ca. EUR 35,- für das Modul) ist hier eine wirklich professionell brauchbare Lösung entstanden. Mögen andere damit auch noch Freude haben! Ciao, Günter (dl4mea) (*1): Bitte die Überschwinger ignorieren, die kommen von Cooledit, wirklich im Signal enthalten sind die als Punkte dargestellten Samples
Im async Modus soll man so 10MByte pro Sekunde übertragen können. Im Sync. FIFO MOde sind dann so 41 bis 45MByte möglich. Im sync. FIFO Mode werden auch nur 8 Datenleitungen plus dem 60MHz Clock, den der FT2232 zur Verfügung stellt verwendet. Zusätzlich kommt noch die WR# RD# OE# Leitung hinzu. Die sind notwendig damit man auf den Bus lesen oder schreiben kann und den Bus zwischen lesen und schreiben umschalten kann. Jedoch muss man sagen das mit Hilfe des FT2232 in wenigen Studen in funktionierende High Speed Lösung erarbeitet werden kann und das ist durchaus erfreulich.
Johann: Da du dich ja offenbar mit dem FT2232H beschäftigt hast: Kann man im Sync FIFO Modus auch das SIWU benutzen und dem Treiber sagen, er soll solage warten, bis der FPGA das Paket mit dem Signal abschließt? Im Datenblatt steht nur, dass das vor Ablauf des Latency Timers gestzt werden kann. Die Frage ist, ob man den Latency Timer auch auf unendlich setzen kann, dass der Transfer solange wartet, bis der FPGA alle Daten reingekleckert und mit SIWU abgeschlossen hat? Hast du in der Richtung mal was probiert?
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.