Hallo! Für meinen HiWi Job soll ich einen FPGA, der einen Reluktanzmotor steuert, per Ethernet ins Institutsnetzwerk integrieren. Leider haben weder mein Chef noch ich Erfahrungen mit Ethernet. Erstmal einige Daten zum FPGA und dem Board: Benutzt wird ein Spartan 6 auf einem Atlys board von digilent. Ein 10/100/1000 Ethernet Phy ist auch vorhanden. Lizenzen für den MicroBlaze haben wir leider nicht, die würden sich aber evtl. über das Institut beschaffen lassen, wenn das ganze jedoch ohne realisierbar ist; umso besser. Ziel soll es sein den FPGA von theoretisch jedem beliebigen Rechner im Netzwerk ansteuern zulassen und Daten auszulesen bzw. zu schreiben. Weiterhin ist eine möglichst hohe Datenrate wichtig. Um mir erstmal ein grundlegendes Verständnis zu erarbeiten möchte ich am Anfang erstmal klein anfangen und bspw. eine LED über Ethernet an und ausschalten. Ich habe mich mittlerweile etwas ins OSI Modelle, die Protokolle und das "Paket im Paket"-Prinzip eingelesen und bin auf folgenden Link hier im Forum gestoßen: http://www.fpga4fun.com/10BASE-T0.html Nun meine Fragen: Ist die im Link beschriebene Konfiguration grundsätzlich für unser Vorhaben geeignet oder doch etwas zu simpel? Weiterhin müsste ja ein eigener Codierer/Decodierer implementiert werden, der den übertragenen Nutzdaten eine Bedeutung zuweißt, bspw. '011' bedeutet LED 5 soll leuchten, sehe ich das richtig? Im oben genannten Link werden im Code ja feste IPs bzw. MAC-Adressen gesetzt. Wenn ich nun von mehreren Computern auf den FPGA zugreifen möchte, muss ich die ja irgendwie variabel halten, bloß wie? Dann habe ich noch ein paar Fragen zum Code und dem UDP-Protokoll dass hier ja verwendet wird, aber ich denke ich belass es erstmal hierbei. Vielen Dank für eure Bemühungen und Gruß slin1404
kannst dir ja mal Beitrag "BitHound - FPGA Logic Analyzer" anschauen. Ist ein Atlys, darauf ein soft-8bit ATMEGA mit Protokollstack.
UDP -Protokoll mit RGMII direkt am Marvel PHY. 2 Monate und es tick mit 1 GB. Musst aber auch was zum Empfangen haben. SUMP reicht da bei Windows nicht.
Naja, dann muss eben DHCP und ARP und soweiter auch implementiert werden... Ist nicht zufällig ein Projekt am ISEA?
Das hört sich ja gar nicht mal so einfach an. Habt ihr vielleicht nen Tipp für den Anfang? Weiß noch nicht so recht wo ich jetzt erstmal ansetzen sollte. Das UDP und IP-Protokoll ist ja bereits im oben genannten Link implementiert. Das wäre ja schonmal ein Anfang. Mein erstes Ziel ist es nun erstmal eine erste Kommunikation zwischen einem festem PC(also noch keine variable IP/MAC, hierfür brauch ich dann DHCP und ARP nehme ich an?) und dem fpga hinzubekommen. Am besten so, dass auch ein Erfolg sichtbar ist(LED geht an etc.). Dafür braucht es ja Daten die ich dem FPGA übermitteln kann. Die müssen wiederum codiert, mittels IP-Protokoll adressiert werden, segmentiert, per UDP übertragen und wieder zusammengesetzt und decodiert werden. Das wäre ja so das grobe Modell, nicht wahr?
Du kannst auch UDP/IP mit broadcast IP und broadcast Ethernet Adressen implementieren.
Das ist eigendl. einfach, eine Statemachine bauen die nacheinander die passenden Daten an den Phy schickt
Schreib doch mal, wenn du etwas geschafft hast. Das scheint ja alles ziemlich fix und einfach bei euch zu sein. Ich habe mit reinem VHDL (also ohne Zusatz-CPU) doch 2 Monate gebraucht. Zuerst muss der Phy angesprochen werden, dazu das MMIO Prozokoll implementiert und sinnvoll benutzt werden. Dann kommen die Ethernet-Pakete an sich. Bei der CRC Berechnung habe ich etwas gebraucht, weil die Bit-Reihenfolge gedreht werden muss. Auch Präambel und Inter Packet Gap muss beachtet werden. Und dann kommt noch UDP darüber. Ich würde jetzt soch lieber eine CPU nehmen, damit kommt man da besser ans Ziel. Es gibt auch Ethernet IP-Cores, die z.B. CRC und MMIO beherrschen. Doch die kosten meistens Geld.
Hallo, also da die Implementierung mit reinem VHDL dann doch zu aufwendig wäre, wollten wir evtl. den MicroBlaze benutzen. Dazu habe ich die XAPP 1026 gefunden: http://www.xilinx.com/support/documentation/application_notes/xapp1026.pdf So ein paar Frage dazu: Ist sowas in der Art grundsätzlich für unser Vorhaben geeignet? Ist es überhaupt mit dem Atlys kompatibel? Dort sind ja andere Boards angegeben. Zum generellen Verständnis: In dem Design ist einmal die Hardware-Beschreibung enthalten, die den FPGA so konfiguriert, dass er als LwIP stack fungiert bzw. in der Lage ist Daten über Ethernet zu versenden und zu empfangen, also das was ich ohne MicroBlaze von Hand in VHDL hätte machen müssen. Das ganze öffne ich ja mit EDK. Dann gibt es noch den SDK Teil, mit dem ich den MicroBlaze nun frei programmieren kann und ihm sagen kann was für Daten über Ethernet ausgetauscht werden sollen. Also z.B. das Einschalten einer LED. Ist das so richtig?
Theoretisch geht sowas auch ganz ohne UDP etc.. Man könnte das mit einem einfach gestrickten Protokoll machen und direkt auf der MAC-Eben aufsetzen. Allerdings geht das nur sinnvoll, wenn sichergestellt ist, dass alle Informationen, die ausgetauscht werden müssen, in EINEN Frame passen. Sonst wird es gleich aufwändiger. Allerdings müsste man sich dazu auf den PCs eine spezielle SW schreiben, die dieses Protokoll unterstützt. Das Ganze würde dann aber nur in einem rein geswitchten Netzwerk funktionieren. Es wäre vorstellbar, dass der SW auf dem PC die Mac-Adresse des FPGA bekannt ist. Er sendet dann einen Frame mit den Steuerinformationen an diese MAC-Adresse. Die Interpretation der Daten im Frame ist fix und allen Teilnehmern bekannt. Sofort antwortet der FPGA mit einem Frame an den PC, von dem er den Frame empfangen hat mit den entsprechenden Daten. Auf dieser Basis lässt sich durchaus auch eine rudimentäre Ethernetkommunikation aufbauen, die noch recht einfach komplett in Hardware zu erschlagen ist. Aber eleganter ist es defintiv auf ein standardisiertes Protokoll aufzusetzen.
slin1404 schrieb: > Zum generellen Verständnis: In dem Design ist einmal die > Hardware-Beschreibung enthalten, die den FPGA so konfiguriert, dass er > als LwIP stack fungiert bzw. in der Lage ist Daten über Ethernet zu > versenden und zu empfangen, also das was ich ohne MicroBlaze von Hand in > VHDL hätte machen müssen. LwIP ist Software und hat nichts mit Hardwarebeschreibung zu tun, LwIP muss auf den MicroBlaze. In der Hardwarebeschreibung brauchst du einen Ethernet-MAC. Dieser Medium-Access-Controller (MAC) macht das Interface zwischen deinem Prozessor und dem externen Physical-Interface-Chip (Phy). > Das ganze öffne ich ja mit EDK. > Dann gibt es noch den SDK Teil, mit dem ich den MicroBlaze nun frei > programmieren kann und ihm sagen kann was für Daten über Ethernet > ausgetauscht werden sollen. Also z.B. das Einschalten einer LED. Soweit stimmt das. Der Microblaze kümmert sich um die Daten in den den Ethernet Paketen, also auch um alle Protokolle die verwendet werden. So ist das in den Application Notes gedacht und so läuft auch der verlinkte Bithound (spannendes Projekt!) weiter oben.
hier ist der Anfang deiner Lösung. Wie schon im Thread gesagt, der Code wurde bereits bei Arbeiten an Hochschulen verwendet. Beitrag "VHDL timing in GMII auf Spartan6"
Also wenn es nur UDP mit ARP sein soll, dann findest du hier ein Beispiel für einen Spartan-6 FPGA. Basiert auf dem Tri-Mode MAC von OpenCore, ist also ohne weitere Kosten. https://github.com/steffenmauch/udp-spartan6-impl Gibt auch einen Artikel darüber in der Circuit Cellar http://circuitcellar.com/editor-letter/cc281-overcome-fear-of-ethernet-on-an-fpga/
spartan-6 schrieb: > Also wenn es nur UDP mit ARP sein soll, dann findest du hier > ein Beispiel für einen Spartan-6 FPGA. Basiert auf dem Tri-Mode MAC von > OpenCore, ist also ohne weitere Kosten. > > https://github.com/steffenmauch/udp-spartan6-impl > Ich kann den Code compilieren, aber es scheint noch stark unvollendet zu sein. Leider ist der Opencore Mac auch verilog. Das kann ich nicht simulieren. Von der Idee wäre genau das Richtige. ARP habe ich schon. Mal sehen wie ich ping umsetze.
Wie schonn bereits erwähnt...sollte die Kommunikation nur in einem rein geswitchten Netz funktionieren, dann bleib auf Schicht 2. Alles darüber ist nicht zwingend notwendig und macht alles nur viel komplizierter!!! Auf PC Seite würde ich dir die libcap Bibliothek empfehlen (einfach anzuwenden und sehr gut dokumentiert) lg
So ich melde mich mal wieder. Hatte in letzter Zeit aufgrund von Klausuren nicht viel Zeit und hab daher auch nicht mehr groß am Projekt weitergearbeitet. Habe heute mal das Digilent Atlys Web Server Demo Projekt ausprobiert, was auch funktioniert. Kann also die LEDs über einen Web Browser an/ausschalten. Nun möchte ich am liebsten die Daten vom FPGA per Ethernet zum PC übertragen und mit Matlab ausgeben. Übertragen werden die Daten ja schonmal. Mein nächstes Ziel ist jetzt also, die LEDs mit Matlab an und auszuschalten. Dafür scheint es ja auch einige Funktionen in Matlab zu geben. Z.b.: http://www.mathworks.de/de/help/instrument/tcp-ip-and-udp-interface.html?s_tid=doc_12b Allerdings weiß ich nicht recht, was es jetzt eigentlich noch alles braucht, damit das so klappt wie ich mir das vorstelle. Also ich hoffe, dass ich auf dem Referenzdesign von Atlys schonmal aufbauen kann. Dem FPGA muss ich ja irgendwie mitteilen, was die Daten, die von Matlab kommen bedeuten. Das kann man ja bestimmt auf dem Microblaze implementieren, bloß wie? Vielen Dank für eure Hilfe!
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.