Forum: FPGA, VHDL & Co. datentransfer über ethernet


von FranzB (Gast)


Lesenswert?

Hallo zusammen,

ich möchte Daten über Ethernet aus einem FPGA in einen PC transferieren 
und das möglichst ohne viel Kopfzerbrechen. Super gefällt mir der XPort 
von Lantronix, aber da die Baudrate auf 921600 begrenzt ist, ist die 
erzielbare Datenrate doch ein bischen gering. Hat jemand ne Idee, wie 
ich mit ähnlich wenig Aufwand etwas höhere Datenraten erzielen kann. So 
200-500kBytes/s wären nicht schlecht.

Grüsse,

FranzB

von Christian R. (supachris)


Lesenswert?

Du könntest einen RTL8019 als Ethernet Controller nehmen, der kann 
10MBit/s. Damit solltest du deine Datenrate schaffen und musst dir nicht 
allzuviel Protokoll antun.

von FranzB (Gast)


Lesenswert?

Danke für den Vorschlag. In die Richtung werde ich evtl gehen, aber 
verglichen mit so einem Xport ist der Aufwand doch schon deutlich höher. 
Dort muss halt ganz einfach nur Spannung und zwei FPGA Pins dran und 
schon gehts los. Nur halt langsam. Gibts nicht sowas wie einen Xport mit 
höherer Baudrate oder einem parallelen Interface?

von Duke Scarring (Gast)


Lesenswert?

FranzB schrieb:
> Dort muss halt ganz einfach nur Spannung und zwei FPGA Pins dran und
> schon gehts los.
Ethernet ist halt ein aufwändiger Protokollstack. Flexibel in der 
Anwendung, u.U. komplex in der Ansteuerung. Bisher ist mir da auch noch 
keine Vereinfachung über den Weg gelaufen...

Duke

von Joerg (Gast)


Lesenswert?

Habe ganz gute Erfahrungen mit dem W5100 von WIZnet  gemacht. Serielle 
oder Parallele Ansteuerung möglich, also gut mit einem FPGA abdeckbar.

von FranzB (Gast)


Lesenswert?

Hallo Duke, das ist interessant, ich bin nämlich inzwischen beim W5300 
gelandet. Ich  mache das im Moment nur nebenbei, deshalb habe ich erst 
eine Testumgebung aufgebaut, mit der ich die Register beschreiben kann.
Wie ist deine Erfahrung mit der wirklichen Anwendung? Landet man da 
schnell bei sehr komplizierten Statemachines? Mich würde auch 
interessieren ob dhcp mit einem puren FPGA machbar ist.

von Duke Scarring (Gast)


Lesenswert?

Mit den WIZnet-Teilen habe ich auch keine Erfahrung.
Nähere Evaluation von Ethernet steht bei mir noch auf der TODO-Liste.

Duke

von FranzB (Gast)


Lesenswert?

oups, sorry, hatte "hallo Joerg" gemeint ;-)

von Uwe Bonnes (Gast)


Lesenswert?

Muss es Ethernet sein. Ein FT2x232H im Fifo Modus schafft das leicht, im 
synch FIFI Modus auch noch ein Vielfache.

von FranzB (Gast)


Lesenswert?

Ja, sollte Ethernet sein. Ich verwende momentan USB, aber Ethernet hätte 
bei mir deutliche Vorteile.

von Günter (. (dl4mea)


Lesenswert?

Hi,

genau dasselbe Problem beschäftigt mich auch, derzeit verwende ich das 
FT2232 Mini Module, mit dem ich im asynchronen Mode 16MByte/sec zum PC 
schaffe.
Außerdem habe ich schon mit dem Xport experimentiert, aber wie auch 
schon der Initiator des Threads sagt, die maximal möglichen 921600 
Bit/sec sind etwas arg wenig.

Den WIZ5100 habe ich auch schon mal angeschaut, aber (wenn ichs richtig 
verstanden habe) frage ich mich wie man die zur Ansteuerung nötige 
Software unterbringt? Der WIZ5100 hat doch ein paar Register, die man 
mit Werten beschreiben muß. Oder?

Optionen wären Embedded Core oder ein kleiner µC extra dafür, aber ist 
das nicht etwas arg krass?

Ciao, Günter

von Duke Scarring (Gast)


Lesenswert?

Günter (dl4mea) schrieb:
> Optionen wären Embedded Core oder ein kleiner µC extra dafür, aber ist
> das nicht etwas arg krass?
Ein kleiner Core (ZPU) werkelt bei mir sowieso in allen mittleren bis 
größeren Designs. Genau für sowas. Slow control und Debugging.

Ansonsten, wenn es wirklich nur um ein paar Register geht, kann man auch 
eine kleine FSM dafür erstellen.

Duke

von René D. (Firma: www.dossmatik.de) (dose)


Lesenswert?

> Ansonsten, wenn es wirklich nur um ein paar Register geht, kann man auch
> eine kleine FSM dafür erstellen.
>
> Duke

Eine FSM für Ethernet in VHDL wäre der Hammer. Das Ethernet mit den 
Paketen habe ich soweit geknackt und in VHDL. Die State Maschine, die 
die Pakete analysiert und beantwortet ist das Ding und fehlt mir.

Auch welches Ethernet-Protokoll man benutzt, das ist schon Wissen wo man 
sich etwas länger beschäfftigen sollte.

von FranzB (Gast)


Lesenswert?

Ich denke mal der w5100/w5300 nimmt einem hier die Hauptsache ganz 
sicher ab. Im wesentlichen wird es wohl darum gehen die Konfiguration zu 
machen,  Bytes in einen Buffer zu schreiben/bzw aus einem Buffer zu 
lesen, und einige Bits abzufragen um das zu koordinieren. Soweit habe 
ich das Manual schon verstanden. Aber hat das schon mal jemand praktisch 
ohne einen Prozessorcore gemacht? Wie sind da die Erfahrungen?

von Matthias (Gast)


Lesenswert?

Hmm, ich habe keine Ahnung von Bauteilauswahl oä, ich hab auf meinem 
wichtigsten Board einen Marvell PHY 881111 per GMII am FPGA hängen und 
die Aufgabenstellung war, um die 600 Mbit/s an Daten an einen PC zu 
senden. Die Lösung schaut jetzt so aus, dass ein eigenes Protokoll auf 
UDP auf Ethernet verwendet wird, die Schnittstelle teilen sich ein 
Softcore-Prozessor (NIOS), der das notwendige Setup mit dem PC macht und 
sobald das geschehen ist, eine HW-Komponente aktiviert, die dann einfach 
bei jedem erhaltenen Sample ein Ethernet/UDP/eigenes Protokoll Paket 
zusammenbastelt und das per GMII rauswirft. Bzw sind es zwei 
Komponenten, die eine schreibt einfach nur ein Paket in einen DPRAM und 
kümmert sich um das Ausrechnen der UDP Checksum usw, die andere 
transferiert das Paket vom RAM zum FPGA-internen MAC.


Sind in Summe ein paar 100 Zeilen Code, Entwicklung ca 1 Woche. Man 
sollte jedenfalls so was wie wireshark verwenden. Der Startvorteil war 
halt, dass eine full-featured Gbit Ethernet Schnittstelle schon da war. 
Aber unter derartigen Voraussetzungen für einen guten VHDLer keine 
allzugroße Hexerei.

von Günter (. (dl4mea)


Lesenswert?

Hi,

die Lösung von Matthias funktioniert sicherlich, aber da ist halt wieder 
die Rede von properitärem Protokoll und das sollte hier nicht die 
Zielstellung sein. Auch von den Kosten her denke ich sind die beiden 
Wiznet-Optionen (a) Chip + Buchse oder (b) Wiz812MJ nicht unbedingt weit 
von einem PHY entfernt, wenns nicht gerade in die 100++ Stückzahlen 
geht...

Aber ich denke die Zielstellung sollte ein richtiges Ethernetprotkoll 
(UDP mit etwas Konfiguration, z.B. Destination IP bzw. TCP) sein.

Ein paar Leute aus der Atmel/PIC-Fraktion im Forum haben mit dem 
Wiznet-Modul wohl schon Erfahrung, aber so kurzes drüberlesen dort 
bringt mich immer auf den Gedanken daß das Quick&Dirty ist.

Darum mal ins Forum geworfen:  Weiß jemand was man wirklich tun muß um 
mit dem Wiznet einen TCP-Server zu realisieren, auf den man sich dann 
mit Telnet verbinden kann? Wenn dieser Aufwand mal bekannt wäre, dann 
wäre es nicht mehr weit ob man das mit FSM oder mit einem embedded core 
machen müßte.

Ciao, Günter

von Matthias (Gast)


Lesenswert?

TCP Stack Implementierung in einem FPGA hat mal ein Technologiepartner 
von uns versucht, das ist nie was geworden, immer kleine Fehler drin. 
Das kann ich mir echt nicht vorstellen, schon allein die Ansprüche an 
Packet Reordering, Congestion Control usw ... da sitzt man ewig, bis das 
a) den Standard erfüllt und b) performant ist.

von FranzB (Gast)


Lesenswert?

Ja aber im w5300/w5100 ist das ja praktischer Weise alles schon drin. 
Blos wieviel Aufwand bleibt dann noch im FPGA hängen? Hat wirklich noch 
niemand gemacht?

von Xenu (Gast)


Lesenswert?

Ich kann Dir sagen wie ich es machen würde: ich würde den W5300 mit 
einem AVR-Softcore ansteuern.

von Günter (. (dl4mea)


Lesenswert?

> Ich kann Dir sagen wie ich es machen würde: ich würde den W5300 mit
> einem AVR-Softcore ansteuern.

Ja, genau darüber sprechen wir: Was muß der Softcore denn dann 
eigentlich tun? Wenn das nur ein paar Byteschubsereien sind, dann kann 
man das auch weniger aufwendig direkt im FPGA machen.

Kannst du uns also mehr Information geben was man hier tun muß damit man 
UDP (mind. mit konfigurierbarer Destination-Adresse:Port) oder TCP 
machen kann? Das würde dem Thread hier unendlich weiterhelfen.

Ciao, Günter

von berndl (Gast)


Lesenswert?

Günter (dl4mea) schrieb:
>> Ich kann Dir sagen wie ich es machen würde: ich würde den W5300 mit
>> einem AVR-Softcore ansteuern.
>
> Ja, genau darüber sprechen wir: Was muß der Softcore denn dann
> eigentlich tun? Wenn das nur ein paar Byteschubsereien sind, dann kann
> man das auch weniger aufwendig direkt im FPGA machen.
>
> Kannst du uns also mehr Information geben was man hier tun muß damit man
> UDP (mind. mit konfigurierbarer Destination-Adresse:Port) oder TCP
> machen kann? Das würde dem Thread hier unendlich weiterhelfen.

Beitrag "BitHound - FPGA Logic Analyzer"

Alles drin und funzt prima

von PittyJ (Gast)


Lesenswert?

Ich habe Ethernet als reines Senden und Empfangen im FPGA implementiert.
Sprich: es wird ein Datenpacket aus einem Fifo verschickt (inclusive 
CRC- Berechnung), bzw ein Packet landet im einem Empfangsfifo. Mit dabei 
ist die Ansteuerung des PHY's über RGMII.
Alles das braucht schon ca 1000 LUTs. Aufwand war ca 4 Wochen (CRC 
brauchte lange)

Darauf aufbauend käme noch ein kleiner Protokollstack dazu, um 
ARP-Requests zu behandeln, damit die Umsetzung MAC<->IP läuft.
Darüber käme dann noch eine UDP Senden Funktion.
Dafür schätze ich dann nochmals ca 1000 LUTs, den Aufwand würde ich mit 
noch mal 4 Wochen abschätzen (bin nicht der schnellste).

TCP wird noch komplexer.

Insgesamt muss man sehen, was für einen schneller und einfacher zu 
implementieren ist. Ein Softcore plus Programm, oder alles selber per 
VHDL im FPGA machen.

von Xenu (Gast)


Lesenswert?

>Kannst du uns also mehr Information geben was man hier tun muß damit man
>UDP (mind. mit konfigurierbarer Destination-Adresse:Port) oder TCP
>machen kann? Das würde dem Thread hier unendlich weiterhelfen.

Steht alles im Datenblatt (wo sonst?), mit Codebeispielen.
Auf der Wiznet-Seite gibt es auch ein AVR-Beispielprojekt.

von Logibaer (Gast)


Lesenswert?

Matthias und PittyJ, ich wäre an mehr Infos interessiert. Ich suche auch 
seit Längerem an einer Lösung für Datanaquise.

von Mine Fields (Gast)


Lesenswert?

Jeder halbwegs aktuelle FPGA hat genügend Ressourcen für einen Softcore 
und eine Ethernet-MAC. Das gibt es schon als fertige Bausteine inklusive 
TCP/IP-Stack und ist innerhalb kürzester Zeit konfiguriert.

von Duke Scarring (Gast)


Lesenswert?

Mine Fields schrieb:
> Jeder halbwegs aktuelle FPGA hat genügend Ressourcen für einen Softcore
> und eine Ethernet-MAC. Das gibt es schon als fertige Bausteine inklusive
> TCP/IP-Stack und ist innerhalb kürzester Zeit konfiguriert.
Und Du hast das schon eingesetzt und kannst und sachdienliche Hinweise 
über genaue Bezeichnung, Preis, erzielbare Datenrate und Komplexität der 
Integration geben? Bitte, nur zu!

Duke

von Mine Fields (Gast)


Lesenswert?

Duke Scarring schrieb:
> Und Du hast das schon eingesetzt und kannst und sachdienliche Hinweise
> über genaue Bezeichnung, Preis, erzielbare Datenrate und Komplexität der
> Integration geben? Bitte, nur zu!

Bei den FPGA-Herstellern gibt es dazu ausreichend Unterlagen. Viele 
moderne FPGA-Eval-Kits haben die passende Hardware und Beispielcode 
gibts dafür dann auch.

von Duke Scarring (Gast)


Lesenswert?

Du hast auf meine Fragen nicht geantwortet. Hier nochmal einzeln:

Du hast das schon eingesetzt?

Du kannst uns Hinweise über die Komplexität der Integration geben?

Du kannst uns Hinweise über erzielbare Datenrate geben?

Duke

von Mine Fields (Gast)


Lesenswert?

Duke Scarring schrieb:
> hast das schon eingesetzt?

Ja.

Duke Scarring schrieb:
> Du kannst uns Hinweise über die Komplexität der Integration geben?

Ja.

Duke Scarring schrieb:
> Du kannst uns Hinweise über erzielbare Datenrate geben?

Und noch einmal: Ja.

von berndl (Gast)


Lesenswert?

Mine Fields schrieb:
> Duke Scarring schrieb:
>> hast das schon eingesetzt?
>
> Ja.
>
> Duke Scarring schrieb:
>> Du kannst uns Hinweise über die Komplexität der Integration geben?
>
> Ja.
>
> Duke Scarring schrieb:
>> Du kannst uns Hinweise über erzielbare Datenrate geben?
>
> Und noch einmal: Ja.

Toll! Da hab' ich ja jetzt was gelernt...

von Mine Fields (Gast)


Lesenswert?

Die nützlichen Infos habe ich ja im vorletzten Post gegeben. Aber 
nachdem der Herr noch seine Fragen beantwortet haben wollte, habe ich 
ihm diesen Gefallen getan.

von Logibaer (Gast)


Lesenswert?

minefields, so einfach ist das nicht.

Sicher haben die Hersteller wie Xilinx und Altera Ethernat-MACs in ihrem 
Programm, aber ein komplettes Ethernet-Protokoll ist bei keinem der 
beiden inkludiert oder implementiert.

Die Vorgehensweise, das mit SoftCores zu realisieren, erfordert einen 
äussert schnellen FPGA, wenn man mehr als 10MB-Ethernet haben will und 
auch bei der Nutzung kommerzieller Cores, die es von dritter Seite gibt, 
und die bis 1GiE "raushauen" entsteht einiges an Aufwand, von den Kosten 
ganz zu schweigen.

Keinesfalls ist das "in kürzester Zeit" implementiert. Allein mit einem 
Ethernet-MAC habe ich geschlagene 4 Wochen zugebracht, bis es lief.

Die Beispiel-Codes kann man vergessen. In der Regel schlecht bis 
garnicht dokumentiert, unvollständig implementiert, nicht für die 
aktuelle Version verfügbar, schlecht supported und oft genug auch noch 
buggy!

von Mine Fields (Gast)


Lesenswert?

Mit 4 Wochen warst du aber schon ziemlich langsam, wenn man sich mit 
FPGA etwas auskennt schafft man das auch an einem Wochenende.

Und klar erreicht man nicht die volle Bandbreite mit einem einfachen 
Softcore, aber sicherlich schneller als ein XPort oder Wiznet-Modul.

Dazu kommt, dass man schön mit Unix-Sockets programmieren kann, das 
macht die Einarbeitung noch einfacher, wenn man schon einmal am PC 
Sockets programmiert hat.

Deine Erfahrung mit den Beispielen von Herstellern und aus anderen 
Internetquellen kann ich nicht teilen. Da ist genug brauchbares Material 
dabei.

von Matthias (Gast)


Lesenswert?

@Logibaer: Mehr Informationen hab ich, denk ich, schon, aber sag mal 
konkreter was du brauchst.

@Mine Fields: Bei uns wäre es definitiv zu langsam gewesen, das nur mit 
dem NIOS zu machen.


Simples ARP in VHDL zu implementieren hatte ich am Anfang auch vor, aber 
es steht sich einfach der Aufwand nicht dafür, dass man die Abfrage 
typischerweise genau einmal am Anfang braucht.

von Günter (. (dl4mea)


Lesenswert?

Xenu schrieb:
> Steht alles im Datenblatt (wo sonst?), mit Codebeispielen.
> Auf der Wiznet-Seite gibt es auch ein AVR-Beispielprojekt.

Hallo Xenu,

mal für faule, weil du weißt wo es steht: Ist es ein großes Problem wenn 
du hier mal die Links nennst, damit man ohne großes Suchen an die 
richtige Stelle kommt?

Dann nämlich kann man beurteilen was hier eigentlich die Frage war: 
Einen Treiber im FPGA für den Betrieb eines Ethernet-Moduls zu 
realisieren. Es ist halt -IMHO- ein großer Unterschied einen kompletten 
Stack und MII etc. Interfaces zu handlen als Standardinterfaces und 
SPI...

Ciao, Günter

von FranzB (Gast)


Lesenswert?

Also ich hab mich dann mal an den w5300 von wiznet gemacht. Ich habe ein 
kleines Modul mit dem Baustein besorgt und mit Fädeldrähten an ein FPGA 
Eval Board gehängt (nexys2). Für den FPGA habe ich einen Code gebaut mit 
dem man die W5300 Register über UART Befehle beschreiben und auslesen 
kann.
Eigentlich hat man ziemlich schnell Erfolg um mit dem Baustein was über 
TCP/IP zu transportieren. MAC-Adresse setzen, IP-Adresse setzen, und 
schon ist der Baustein pingbar. Dann einen TCPIP Socket als Server 
konfigurieren (Modregister und Portnummer schreiben)und mit zwei 
Befehlen ins Commandregister öffnen. Dann kann man sich z.B mit netcat 
vom PC aus verbinden. Der Datentransfer klappt relativ leicht durch 
schreiben der Daten auf ein TX Fifo und lesen von einem RX Fifo, wobei 
noch Kommandos gegeben werden müssen und Zähler anzuschauen sind.
Alles also einigermassen leicht zu machen. Das nächste wäre dann eine 
Statemachine um das dann in den FPGA Ablauf einzubinden ....

von Salva (Gast)


Lesenswert?

FranzB schrieb:
> So then I got to the times of W5300 WIZnet made. I have a
> small module concerned with the block and with Fädeldrähten a FPGA
> evaluation board hung (nexys2). For the FPGA, I have built a code with
> where you describe the W5300 register via UART commands and read
> can.
> Actually, one has pretty fast to success with the block on which
> To transport TCP / IP. MAC address set to set IP address, and
> the block is already pinged. Then a TCPIP socket as a server
> configure (write Modregister and port number) and two
> Commands to open the Command Register. Then one can, for example with netcat
> from the PC to connect. The data transfer works relatively easily by
> write the data to TX FIFO and RX FIFO read of a, where
> still commands must be given and are counter to look.
> Everything that is reasonably easy to make. The next would be a
> Then the state machine to the FPGA to integrate the end ..

Hi Franz B could you post the (HDL) code you used?
Thanks

von JBK (Gast)


Lesenswert?

Matthias schrieb:
> Der Startvorteil war
> halt, dass eine full-featured Gbit Ethernet Schnittstelle schon da war
In welcher Weise war "die schon da"?
Hast du einen MAC core verwendet?

von Matthias (Gast)


Lesenswert?

Ja, es war ein externer PHY da, der TSE_MAC von Altera war auch schon 
implementiert und der NIOS hing schon dran. Ich habe nur mehr die FSMs 
für die UDP Paket Generierung und einen Multiplexer zwischen NIOS und 
dieser Komponente hin zum TSE_MAC implementiert, die Software für den 
NIOS haben auch Kollegen gemacht.

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.