300 MBit/s einfache FPGA -> PC verbindung

Gast #4102516
Lesenswert?

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
#4102583
Lesenswert?

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.
Gast #4103665
Lesenswert?

Chris schrieb:
> 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?

SATA-IF in den FPGA und Du kannst die Daten ohne Umweg PC sichern:

http://people.inf.ethz.ch/lwoods/publications/Groundhog-A_Serial_ATA_Host_Bus_Adapter_%28HBA%29_for_FPGAs.pdf

MfG,
Gast #4103739
Lesenswert?

Sigi schrieb:
> Fpga Kuechle schrieb:
>> SATA-IF in den FPGA und Du kannst die Daten ohne Umweg PC sichern:
>>
>>
> 
http://people.inf.ethz.ch/lwoods/publications/Groundhog-A_Serial_ATA_Host_Bus_Adapter_%28HBA%29_for_FPGAs.pdf
>
> Schaut ja nicht so kompliziert aus.

> Hast du das mal gemacht,

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.

> welchen SATA-PHY verwendest du?

Sollte alles der passende FPGA können:
http://www.design-reuse.com/articles/24658/sata-connectivity-xilinx-fpga.html

MfG,
#4105187
Lesenswert?

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.
#4105622
Lesenswert?

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
Gast #4105827
Lesenswert?

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
Persönliche Seite #4105914
Lesenswert?

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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren