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
Habe ganz gute Erfahrungen mit dem W5100 von WIZnet gemacht. Serielle oder Parallele Ansteuerung möglich, also gut mit einem FPGA abdeckbar.
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.
Mit den WIZnet-Teilen habe ich auch keine Erfahrung. Nähere Evaluation von Ethernet steht bei mir noch auf der TODO-Liste. Duke
Muss es Ethernet sein. Ein FT2x232H im Fifo Modus schafft das leicht, im synch FIFI Modus auch noch ein Vielfache.
Ja, sollte Ethernet sein. Ich verwende momentan USB, aber Ethernet hätte bei mir deutliche Vorteile.
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.
Matthias und PittyJ, ich wäre an mehr Infos interessiert. Ich suche auch seit Längerem an einer Lösung für Datanaquise.
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
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.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.