Hallo zusammen,
habe jetzt meine ersten Schritte in dem Themenbereich FPGAs gemacht.
Will in meinem Projekt nun einen Microblaze programmieren (mit C), damit
er Daten über das Netzwerk schicken kann.
Dazu gibt es im EDK ja das Ethernet-Lite Interface, dass ich über den
PLB angeschlossen habe. Dazu stehen mir dann bestimmt Treiber zur
Verfügung, die mir das EDK erstellt. Habe da die Header xemaclite_i.h
xemaclite_l.h und xemaclite.h gefunden.
Damit müsste doch recht einfach eine Netzwerkkommunikation aufzustellen
sein.
Hat einer damit Erfahrung und kann mir gute Tips geben oder Literatur
dazu empfehlen?
Am besten hier mal ein kleines Codeexample posten, wie ich so ne
Kommunikation realisieren kann.
Kann man hier auch irgendwie geschickt polling betreiben oder geschieht
die Kommunikation über Interrupts?
Da ich selber noch Anfänger bin mit dem Thema, bitte um Nachsicht wenn
die Fragen vllt zu trivial erscheinen :-)!
Schon mal Danke vorab für jede Hilfe.
Gruss ferro
Erster Tip: Nicht mit dem Schwersten anfangen. FPGAs sind ja schon
komplex genung, aber dann auch noch MicroBlaze und Ethernet...
Zweiter Tip: Such nach Beispielapplikationen für Ethernet Lite und
versuche diese zu verstehen. Dann kannst Du sie für Deine Zwecke
abwandeln.
Duke
Danke mal für deine Tips.
Hab nun inzwischen bisschen rumgeforscht.
Hab entdeckt, dass man dazu einen Network Stack generieren muss (kann
mir das jmd bestätigen?). Laut Xilinx Forum entweder lwIP oder ucLinux.
Da ich nur über den xilkernel als OS verfüge, muss ich wohl lwIP
verwenden, oder?
Ist mein Gedankengang richtig?
Hab dazu ein Beispielcode angeschaut.
Kann man nicht einfach nur mit den Send oder Receive Methoden Pollen,
und so irgendwie eine einfach Netzwerkkommunikation aufbauen?
PS: Hab noch ne andere Frage: Wenn in der main-methode eines Programms,
xilmain-methode aufgerufen wird, dann wird da die kontrolle an das OS
übergeben. Wo wie geht es dann im Programm weiter, bzw. so startet man
threads?
gruss ferro
Hallo Ferro,
ich will mich demnächst auch mit dem Thema 'Ethernet lite' bzw. tcp/ip
beschäftigen. Im Moment habe ich für eine (einseitige) Datenübertragung
(FPGA ==> PC) einen UDP-Stack gebaut (Das UDP-Protokoll ist sehr
einfach und für große Datenmengen sehr gut geeignet, aber es gibt bei
UDP keine Verbindungskontrolle). Auf PC-Seite ist das UDP-Protokoll mit
dem WinSocket auch sehr gut zu handhaben. Ich möchte aber auch tcp/ip
mit Verbindungskontolle bzw. httpd für eine WebServer-Anbindung
ausprobieren.
Ich habe schon mal geschaut, es gibt (wenn man kein Geld ausgeben will)
entweder für das EDK ab 10.x (oder 9.x ? weiss jetzt nicht genau) den
kostenlosen ethernet-lite . Alternativ gibt es auf opencores.org einen
kostenlosen 10/100mbit Ethernet MAC (mit wishbone interface,
Schnittstelle zu ethernet is MII).
Ich habe auch schon mal einen Blick auf den Ethernet-lite geworfen, bin
aber aus der Dokumentation bzw. den Header-Files nicht recht schlau
geworfen. Falls Du etwas findest, wäre ich für Hinweise sehr dankbar.
Als Plttform verwende ich das Spartan3E starter kit (mit 500er bzw.
1600er Spartan3E).
Es gibt übrigens bei den Beispielen für das StarterKit mit dem 1600er
ein Web-Demo. Falls Du interessiert bist, kann ich das mal auskramen.
-Papa Schlumpf
ferro schrieb:> Hab nun inzwischen bisschen rumgeforscht.> Hab entdeckt, dass man dazu einen Network Stack generieren muss (kann> mir das jmd bestätigen?). Laut Xilinx Forum entweder lwIP oder ucLinux.
uCLinux ist kein TCP/IP Stack sondern eine für Mikrocontroller
optimierte Linuxdistribution, die ohne MMU auskommt.
> Da ich nur über den xilkernel als OS verfüge, muss ich wohl lwIP> verwenden, oder?
Es gibt auch noch andere Stacks, da der lwIP Stack aber im EDK
mitgebracht wird, ist es naheliegend den zu benutzen.
> Kann man nicht einfach nur mit den Send oder Receive Methoden Pollen,> und so irgendwie eine einfach Netzwerkkommunikation aufbauen?
Willst du einfach nur Bits durch die Leitung jagen, dann kommst du ganz
gut mit den vom EDK erstellten Treibern für den EthernetLite Core aus.
Willst du aber den Funktionsumgang richtiger Netzwerkprotokolle nutzen,
so kommst du an einem passenden Stack nicht vorbei.
> PS: Hab noch ne andere Frage: Wenn in der main-methode eines Programms,> xilmain-methode aufgerufen wird, dann wird da die kontrolle an das OS> übergeben. Wo wie geht es dann im Programm weiter, bzw. so startet man> threads?
In den Plattform Settings, im EDK oder SDK, kannst du einstellen,
welcher Thread nach "xilmain" gestartet werden soll und ihm dort die
Priorität "1" geben, denn wenn dein Programm richtig läuft, dann wird
Code, der nach der xilmain steht, nicht gestartet.
floGzmo schrieb:> ja webserver is an sich sehr schön aber doch nur als bitfile vorhanden> oder hat jemand vhdl und c code der dahintersteckt?
Such mal auf der Xilinx Homepage nach "xapp1026". In dem PDF ist ein
Link unter dem du dir das zu dieser Application Note gehörende
Referenzdesign runterladen kannst. Dort sind auch die C-Files enthalten,
u.a. auch für einen einfachen Webserver. Btw. ein Webserver in VHDL mag
unter umständen möglich, aber wenig sinnvoll sein.
floGzmo schrieb:> jetzt mus sich aber erstmal kucken ob das anstatt mit ml505 auch mit dem> ml501 geht :/
Ich hab das ganze auf nem ML410 laufen, wenn überhaupt, musst du da
wenig anpassen. Das ML501 müsste ja mit nem Microblaze laufen, oder?
Dann wird das auch klappen. Der Code ist für PPC 405, 440 und MB
verwendbar. Kleine Anpassungen vorbehalten.
hi,
bin grad auch dabei mir eine ethernetcommunikation aufzubauen. hab ein
nettes board von trenz-electronic.de: te0320 partan-3A DSP FPGA 3400
kgates.
leider hat es weder mac noch phy :(.
kennt jemand eine erweiterungsplatine incl. microblaze referenz design?
hab bis nur nur den PMod NIC gefunden. Leider gibt es dafür kein
referenz design.