Hallo, ich habe das Cypress USB 3.0 Demo Board an einen Spartan 6 angeschlossen. Als nächstes wollte ich ein kleines FPGA Demoprogramm schreiben. Was erst mal nur Daten in Richtung PC sendet. Dabei stellen sich folgende Fragen. Wie viel Zwischenspeicher benötigt man bei USB 3.0? Reicht 1 Block RAM im FPGA oder benötigt man sogar einen externen DDR2 oder DDR3 Speicher? Ich habe schon vor so viele Daten wie möglich (zwischen 300 und 350MByte/s) über USB 3.0 zu übertragen. Es sollen natürlich keine Daten verloren gehen. Ist der Datenstrom bei USB 3.0 konstant oder schwank dieser recht stark zwischen 300 und 350MByte? Kann ich eigentlich USB 2.0 und USB 3.0 gleichzeitig verwenden?
Johann schrieb: > Dabei stellen sich folgende Fragen. Wie viel Zwischenspeicher benötigt > man bei USB 3.0? Reicht 1 Block RAM im FPGA oder benötigt man sogar > einen externen DDR2 oder DDR3 Speicher? Kommt ganz drauf an, wie kontinuierlich deine Datenübertragungsrate sein muss. Das Betriebssystem macht bei USB mitunter lange Pausen, das musst du wegpuffern können, wenn die Daten am FPGA kontinuierlich kommen. Wir haben im Idle-Windows selbst schon 50ms und mehr Pause zwischen zwei USB Transfers gemessen. > Ich habe schon vor so viele Daten wie möglich (zwischen 300 und > 350MByte/s) über USB 3.0 zu übertragen. Es sollen natürlich keine Daten > verloren gehen. Naja, da brauchst du schon mehr als 1k Puffer. Aber der FX3 hat ja recht ordentliche Puffer integriert. Wenn du 1024 Byte Paketgröße und 16 Packets per Burst im SuperSpeed Modus einstellst und dann noch 2 DMA Buffer, hast du schon 32kByte internen FIFO. > Ist der Datenstrom bei USB 3.0 konstant oder schwank dieser recht stark > zwischen 300 und 350MByte? Über 300MB/s hab ich bisher nur an einem Intel Z77 Laptop erreicht und das auch nur mit großen Puffern und Anforderung von riesen Blöcken. Außerdem musst du dann auf 100MHZ PCLK gehen, was extreme Timing-Anforderungen an den FPGA stellt, denn die Zeit zwischen max. Flag-Setup vom FX3 und minimalem Setup der Steuerleitungen beträgt dann genau 0ns. Im FPGA hast du dann nur noch 2ns Zeit, den Datentransfer zu stoppen, wenn der FX3 voll meldet. Bis 80MHz hab ich´s hier mit dem AC701 Board sauber laufen. > Kann ich eigentlich USB 2.0 und USB 3.0 gleichzeitig verwenden? Nö, ent oder weder. Der FX3 handelt mit dem Host beim Verbinden die Geschwindigkeit aus. Achja, ein weiteres Problem ist die VIO am GPIF II Interface. Bei 2,5V oder gar 3,3V produziert der FX3 intern so viel Störungen bzw. Rauschen, dass der Quarzoszillator und damit die PLL aus dem Tritt kommt und die SuperSpeed Verbindung abbricht. Siehe http://www.cypress.com/?app=forum&id=167&rID=74739, nicht dass du dann auch auf das Problem stößt.
Ich habe diese Kit gekauft http://www.enclustra.com/en/products/quick-start-kits/mars-pm3-usb3-kit/ Dort steht das auch über 350Mbyte pro Sekunde möglich sind. Es soll zudem auch der FPGA Quellcode für einen Spartan 6 beiliegen. Vielleicht bekomme ich diese Woche noch das Board.
Christian R. schrieb: > Im FPGA hast du dann nur noch 2ns Zeit, den Datentransfer zu > stoppen, wenn der FX3 voll meldet. Bis 80MHz hab ich´s hier mit dem > AC701 Board sauber laufen. Wie soll dass funktionieren? Die Signallaufzeit durch Input und Output ist doch eher im Bereich von > 6 ns. Ich wuerde mit wuenschen, der Baustein meldet sich schon, wenn nur noch x ( X>0) Plaetze im Fifo frei sind. Dann wuerde der naechste Schreibvorgang immer nocj klappen, und man haette geneugend Zeit zur Reaktion...
Genau schön wäre ein Signal bin gleich voll und ein zusätzliches Sigal für Overrun.
Uwe Bonnes schrieb: > Christian R. schrieb: >> Im FPGA hast du dann nur noch 2ns Zeit, den Datentransfer zu >> stoppen, wenn der FX3 voll meldet. Bis 80MHz hab ich´s hier mit dem >> AC701 Board sauber laufen. > > Wie soll dass funktionieren? Die Signallaufzeit durch Input und Output > ist doch eher im Bereich von > 6 ns. > > Ich wuerde mit wuenschen, der Baustein meldet sich schon, wenn nur noch > x ( X>0) Plaetze im Fifo frei sind. Dann wuerde der naechste > Schreibvorgang immer nocj klappen, und man haette geneugend Zeit zur > Reaktion... Das hätte ich mir auch gewünscht, so ein "ALMOST FULL" anstatt nur "FULL". Aber es geht auch so... Cihan
Hat man bei USB 3.0 immer noch diese 50ms Aussetzer? Ich dachte das ist bei USB 3.0 deutlich weniger geworden, so das man kaum noch einen Zwischnepuffer benötigt. Ich habe mal gelesen das Host eine Anfrage an das Device stellt (hast Du Daten für mich) wenn keine Daten vorhanden sind, dann kannst Du sofort Daten an mich senden wenn diese dann vorhanden sind. Das sollte ja der große Vorteil von USB 3 sein. Es gibt ja auch eine seperate TX und RX Leitung.
Der FX3 hat auch konfigurierbare Flags, die braucht man sowieso zwingend, weil nämlich alle Flags eine Latenz von 2 Takten haben. Also darf man nur kontinuierlich Schreiben, solange das Partial Full nicht gesetzt ist. Danach nur alle paar Takte schreiben und das richtige Full-Flag beachten. Damit klappts zuverlässig. Damit gehts dann wahrscheinlich auch bei 100MHz. Man hat ja dann ein paar Takte Zeit, das richtige Full Flag zu sampeln. Hab ich aber bei mir (Original Cypress Board mit Kabel an SP605/AC701) noch nicht hinbekommen. Und unser eigenes Board steigt immer mal aus, weil VIO an 3.3V hängt. Da muss erst das Redesign gemacht werden. Bei Cypress gibts auch eine App-Note für Slave FIFO mit Spartan 6 und 100MHz in Verilog, müsste man sich mal angucken. Edit: Die 50ms Aussetzer müsste ich mal messen. Mit 50MHz PCLK erreiche ich an einem TI XHCI Controller an meiner Z620 hier 182MB/s IN und 155MB/s OUT.
Uwe Bonnes schrieb: > Cihan Kalayci schrieb: >> Aber es geht auch so... > > Erklär doch bitte wie das geht... > > > Danke Das Problem war ja, das voll werden des FIFOs vom Cypress FX und sofortige Erkennen im FPGA. In dem Moment wo das voll werden erkannt wird, wird warscheinlich auch ein Byte ins FIFO geschoben (des FX) und das Schreiben in den FX wird natürlich im nächsten CLK-Zyklus auch unterbrochen. Das letzte Byte aber wird nicht aufgenommen da der FIFO kürzlich sich voll gemeldet hatte. Deswegen habe ich immer wenn der FIFO dann wieder bereit war, das letzte Byte erneut gesendet und erst dann den nächsten der dran wäre. Also quasi eine Abhilfe. Cihan
@Christian Wenn ich einen 100MHz Takt benutze und das Interface 32Bit breit ist (4Bytes) dann sind das maximal 400MByte pro Sekunde Bandbreite. In Videos von Cypress wird gezeigt das angeblich 381MByte Bandbreite möglich sind. Das erreicht man aber nicht indem man 32Bit mit einem Takt schreibt, dann wieder eine gewisse Anzahl an Takten nichts macht und dann prüft ob der Cypress Fifo voll ist und dann wieder die nächsten 32 Bit schreibt. Dadurch kann reduziere ich den Datendurchsatz ja enorm. Oder ich habe da gerade ein Denkfehler.
Johann schrieb: > Bei welchem Fifo Füllstand wird dann das Partial Full Flag gesetzt? Sollte das nicht im Datenblatt oder User manual stehen?
Johann schrieb: > Bei welchem Fifo Füllstand wird dann das Partial Full Flag gesetzt? Kannst du selber konfigurieren. Sehr praktische Sache. Ich verwende übrigens den DDR2 Speicher auf dem FPGA Module um den Stream zu puffern. Ansonsten hatte ich ständig überläufe. Ich habe Pausen von einigen (ich glaube es waren so 3ms) gemessen.
Dieses langsame Schreiben machen ich ja auch nur wenn das Partial Full bereits angeschlagen hat. Das kann man einstellen, ich hab es momentan auf einem Watermark Level von 4 Words stehen, also 4 Worte bevor ganz voll ist, geht das PF auf low. Da ist die Einbuße sehr gering. Wenn ich es vor der Elternzeit noch schaffe, probiere ich mal noch bissl um die 100MHz zu erreichen. Momentan stoppe ich die Steuersignale des FX3 kombinatorisch mit den Flags, ich denke, wenn ich da nochmal alle Flags und Daten in IFF packe, könnte das gehen. Allerdings wird dann die Latenz-Geschichte noch verrückter, und ich weiß nicht, was der FX3 macht, wenn man den leeren FIFO weiter ausliest. Mal sehen, irgendwie muss man ja die 100MHz schaffen, die hatten auch mal den Verilog Quelltext von der Test-Applikation irgendwo veröffentlicht.
Auf jedenfall finde ich schön das schon einige den Chip benutzen und man Erfahrungen austauschne kann. Wie schon gesagt ich werde dann mal über das Board berichten. @Christian Wie lange nimmst Du denn Elternzeit? Ich hatte 2 Monate genommen. Ist schon Weltuntergangsstimmung auf Arbeit? :-)
Erst mal einen Monat direkt ab der Geburt, weil es das 2. Kind ist. Nee, bei Fraunhofer ist das recht entspannt, da geht die Welt nicht so schnell unter. Aber ich bin schon der einzige FPGA Designer am Institut, also geht auch nix voran dann. Naja, ich schau mal, ob und wie man die 100MHz erreichen kann, das stört mich schon lange. Fraglich ist dann allerdings, ob das eine industrietaugliche Lösung wird, die unter allen Bedingungen fehlerfrei funktioniert. Ich fürchte, das wird man mit den Timings aus dem FX3 Datenblatt schwer hinbekommen.
So, ich hab jetzt die 3 Flags und die Daten über IFF in den FPGA geholt und damit läuft die Sache erst mal auch bei 100MHz PCLK. Allerdings schafft mein TI xHCI in der Z620 hier dann nur 288MB/s IN und OUT ist bei 152MB/s geblieben. Ich teste dann mal mit den Z77 Laptop.
So noch ein Update: Z77 Laptop: 310MB/s IN und 123MB/s OUT. Asus Board mit Renesas Controller: 308MB/s IN und 167MB/s OUT. Hmm....seltsam. Muss mir mal die Pausen auf dem Oszi anschauen. Liegt vielleicht auch bissl an meiner Logik, ich warte nach jedem FIFO Full erst mal ein paar Takte, ob eventuell im OUT Buffer wieder was liegt, weil der bei uns Vorrang haben muss. Aber 16 Takte nach einem Transfer von 32kiByte in den FX3 machen keine 70MB/s Unterschied. Vielleicht wieder so eine Kabel-Geschichte, das geht auch massiv ein in die Übertragungsrate.
Wieder ein Update: Der FX3 braucht bei mir irgendwie ziemlich lange zum Weiterschalten der DMA-Buffer. Nachdem ich 4096 Worte reingeschrieben habe und der Buffer voll meldet, braucht der meistens um die 12µs bis der Buffer wieder verfügbar ist. Mit 12µs Pause und 41µs Übertragung komm ich ziemlich genau auf die 309MB/s. Laut Cypress sollte das im AUTO_MODE allerdings nur knapp 1µs dauern: http://www.cypress.com/?app=forum&id=167&rID=60783 Wer weiß, was das aktuelle SDK da wieder für Schwierigkeiten hat.
Mein Board ist leider noch nicht da. Auf dem Board soll ja eine Demofirmware drauf sein diese kann ich dann ja bereitstellen. Ich weis allerdings auch nicht ob das Board diese Woche noch kommt. Ich will den Einkauf diesmal auch nicht nervern :-)
Hi, I am interested in fx3 fpga code example and following URL is not accessible currently. http://www.nuvation.com/fx3-demo-firmware-fpga-code Can someone who has access to the source code send it to me please?. Thanks, LA
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.