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