FPGA per Ethernet ins Netzwerk integrieren

Gast #3531267
Lesenswert?

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
Gast #3532147
Lesenswert?

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?
Gast #3532218
Lesenswert?

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.
Gast #3532683
Lesenswert?

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?
Gast #3533299
Lesenswert?

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.
#3533856
Lesenswert?

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.
(Firma: www.dossmatik.de) #3546475
Lesenswert?

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.
Gast #3549285
Lesenswert?

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
Gast #3565306
Lesenswert?

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!

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren