Forum: FPGA, VHDL & Co. FPGA per Ethernet ins Netzwerk integrieren


von slin1404 (Gast)


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

von berndl (Gast)


Lesenswert?

kannst dir ja mal Beitrag "BitHound - FPGA Logic Analyzer" 
anschauen. Ist ein Atlys, darauf ein soft-8bit ATMEGA mit 
Protokollstack.

von Weltbester FPGA-Pongo (Gast)


Lesenswert?

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.

von Heiner (Gast)


Lesenswert?

Naja, dann muss eben DHCP und ARP und soweiter auch implementiert 
werden...

Ist nicht zufällig ein Projekt am ISEA?

von slin1404 (Gast)


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?

von user (Gast)


Lesenswert?

Du kannst auch UDP/IP mit broadcast IP und broadcast Ethernet Adressen 
implementieren.

von user (Gast)


Lesenswert?

Das ist eigendl. einfach, eine Statemachine bauen die nacheinander die 
passenden Daten an den Phy schickt

von PittyJ (Gast)


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.

von slin1404 (Gast)


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?

von Andreas (Gast)


Lesenswert?

Und das hier wäre nichts. Den IP-Stack als Softcore:

Beitrag "TCP/IP Stack auf FPGA Boards"

VG

von Schlumpf (Gast)


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.

von Christoph Z. (christophz)


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.

von René D. (Firma: www.dossmatik.de) (dose)


Lesenswert?

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"

von spartan-6 (Gast)


Lesenswert?

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/

von René D. (Firma: www.dossmatik.de) (dose)


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.

von Andi (Gast)


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

von slin1404 (Gast)


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!

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
Noch kein Account? Hier anmelden.