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
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.
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?
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
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.
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
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
> 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.
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?
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.
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
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.
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?
> 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
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
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.
>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.
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.
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
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.
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
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...
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.
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!
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.
@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.
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
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 ....
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
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?
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.