Forum: FPGA, VHDL & Co. 300 MBit/s einfache FPGA -> PC verbindung


von Chris (Gast)


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

von Christian R. (supachris)


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.

von Duke Scarring (Gast)


Lesenswert?

Ethernet bietet aktuell 1000 MBit/s, die sollte auch ein Windows-Host 
verarbeiten können.

Duke

von J. S. (engineer) Benutzerseite


Lesenswert?

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.

von Fpgakuechle K. (Gast)


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,

von Sigi (Gast)


Lesenswert?

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,
welchen SATA-PHY verwendest du?

von Fpgakuechle K. (Gast)


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,

von Christian R. (supachris)


Lesenswert?

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.

von Chris (Gast)


Lesenswert?

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.

von Alexander F. (alexf91)


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.

: Bearbeitet durch User
von PC-Verbinder (Gast)


Lesenswert?

Aus dem Repository dort werde ich nicht schlau. Wo befindet sich der 
FPGA-Code und wo der Code für den PC?

von Alexander F. (alexf91)


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

: Bearbeitet durch User
von lsl (Gast)


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

von J. S. (engineer) Benutzerseite


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

: 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
Noch kein Account? Hier anmelden.