Hallo,
ich hätte mal eine Frage.
Hättet ihr Vorschläge, wie man am schnellsten (und einfachsten) Daten
von einem FPGA (Virtex5 oder 6) mit etwa 300MBit/s an einen PC senden
und in Dateien schreiben kann? Die Verlustrate sollte dabei gleich Null
sein.
Die Daten sollen dabei nur in eine Richtung gesendet werden, also nicht
zurück von PC zu FPGA.
Meint ihr, dass es PCIe sein muss oder gehen auch andere Lösungen
(Cypress fx3 über USB oder Ähnliches)?
Gibt es Beispielprojekte zum schnellen Ausprobieren und Anpassen mit der
Angabe der Hardware die dafür benötigt wird?
Danke schon mal für eure Antworten!
Viele Grüße,
Chris
300MBit/s sind ja "nur" 37,5MB/s das geht notfalls noch eben so mit USB
2.0, aber mit dem FX3 bist du auf der sicheren Seite. Die Ansteuerung
vom FPGA aus ist denkbar einfach, Firmware Beispiele sind dabei. Damit
kommst du viel schneller zum Ziel als mit einem PCIe IP Core und dem
nötigen DMA Controller und der ganzen Einarbeitung samt
Treiberentwicklung auf dem PC. Für den FX3 kannste den Cypress Treiber
nehmen, oder aber gleich LibUSB oder WinUSB, die sind wenigstens
signiert und überall verfügbar.
Duke Scarring schrieb:> Ethernet bietet aktuell 1000 MBit/s, die sollte auch ein Windows-Host> verarbeiten können.
Ja, aber einen PHY mit einem FPGA anzusteuern, ist definitiv nicht
einfacher, als ein US-Chip. Zudem hat ein PC immer nochmal einen USB
Slot über, von daher plädiere ich auch für USB.
Naja, SATA für einen Anfänger... Ich weiß ja nicht. Den Slave Fifo des
FX3 anzusteuern dürfte schon komplex genug sein. Sich in die MGTs incl.
Protokoll einzuarbeiten ist schon heftig.
Oder mal andersrum gefragt:
hat jemand schon mal sowas gemacht und könnte das vhdl-Projekt/API PC
seitig bereitstellen (z.B. über den cypress fx3)?
Ich glaube notfalls könnte das
http://www.cypress.com/?docID=49786
auch geeignet sein.
Für den FX2 gibt es libfpgalink.
https://github.com/makestuff/libfpgalink
Wenn man sich mal in das verwendete Buildsystem eingearbeitet hat dann
ist die Verwendung relativ einfach.
Bereitgestellt wird eine Library für den PC (mit C und Python Bindings)
und ein Core fürs FPGA. Die Library bietet auch Funktionen zum Laden des
FX2 und der FPGA Konfiguration.
Die maximale Datenrate die ich erzielt habe liegt bei etwa 28 MB/s vom
FPGA zum PC, die mitgelieferten Beispiele lassen eine ähnliche
Geschwindigkeit in die andere Richtung vermuten.
Wie aufwändig eine Portierung auf den FX3 ist kann ich aber nicht
wirklich einschätzen.
Edit: Gerade getestet: Wenn die Daten nicht auf die Platte geschrieben
werden dann erreiche ich eine max. Übertragungsrate von 37 MB/s.
Der FPGA Code befindet sich in einem anderen Repository:
https://github.com/makestuff/comm-fpga
Mit dem verwendeten Buildsystem kann ich mich nicht wirklich anfreunden,
ich bin gerade dabei das auf ein reines Makefile-Projekt zu ändern.
Die Library abstrahiert so weit, dass man auf dem FPGA nur ein FIFO
Interface mit 128 Kanälen sieht.
Für den Anfang ist es am einfachsten, wenn man das für ein bereits
unterstütztes Board übersetzt und dann die wirklich relevanten Dateien
raussucht.
https://github.com/makestuff/libfpgalink/wiki/FPGALink
Mir gefällt Xillybus recht gut. Mit dem Core kommunizierst du ebenfalls
über einfache FIFOs. Auf Hostseite realisiert der Treiber ein (oder
mehrere, je nach FPGA-Konfiguration) normales Characterdevice.
Interessanterweise kommt der Treiber mittlerweile sogar mit jedem
halbwegs aktuellen Standard-Linux. Für Windows gibts gesonderte Treiber.
Das ganze funktioniert über PCIe oder (für SoCs wie Zynq) über AXI.
Evaluation ist kostenlos (und ohne Featureeinschränkungen) möglich,
ebenso die dauerhafte Nutzung für akademische Zwecke. Kannst also
erstmal testen, ob es für deine Anwendung taugt. Für den
Produktionseinsatz kostet der Core dann was.
http://xillybus.com
Fpga Kuechle schrieb:> Nein, weiss aber das PCIe und SATA elektrisch nicht viel anders sind> und (einige) FPGA's PCIe als Core mitbringen, resp. die Seriallen IO's> dafür verwendbar sind.
Die besseren Alteras (bei Cyclone mit den MGTs) können das in der Tat.
SATA Core ist aber IP und kostenpflichtig. Eine Art DMA per SATA hat
aber was weil man so den PC massiv entlasten kann, jenachdem ob der die
Daten noch filtern muss oder ob er alles post sampling bearbeiten soll.
Für ein Recording-System hatte ich das mal entworfen und zwei Solid
State Disks drangehängt. Die machen dann etwa das 10fache dessen, was
der TE möchte :-)
http://www.96khz.org/images/recordingplatform.jpg
Eine eigene Frage?
Dieser Thread ist über 11 Jahre alt.
Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.