Ich habe die Aufgabe ein digitales Signal einzulesen und dieses dann über Ethernet an einen PC zu schicken.So viel ich weiß muss ich den Ethernet Controller selbst einstellen bzw. programmieren.Da ich so etwas noch nie gemacht habe wollte ich fragen worauf ich achten muss oder was man da überhaupt einstellen muss?
Blöde Antwort. Ich übersetze das mal, was "bla" wahrscheinlich meinte: Das ist keine einfache Frage, die man so in zwei Zeilen beantworten kann. Sollst du einen FPGA programmieren? Womit, VHDL, Verilog? Was heißt, du bist Anfänger - noch gar nix von Hardwarebeschreibung gehört? Es gibt viele viele Bücher, Tutorials, Threads in Foren (z.B. hier ;)) zum Einstieg, lies mal ein bißchen rum und stell dann konkretere und nicht so allumfassende Fragen. :) Aber um noch konkret zu antworten: Du musst auf sehr viel achten und 'ne Menge einstellen. ;)
Ich soll ein FPGA mit VHDL programmieren. Um genau zu sein, das Xilinx Virtex 5 LX50 (Datenblatt im Anhang). Hab schon kleinere VHDL-Programme geschrieben. Z.B. einen Dekoder für eine 7 Segmentanzeige. Hab aber leider noch nichts mit Ethernet gemacht. Hab bis jetzt auch noch kein gescheites Tutorial für Ethernet gefunden. Meine eigentliche Aufgabe ist ein UDP Datenpaket zu generieren und dieses dann über die Ethernetschnittstelle an den PC zu schicken. Hätte jemand ein Tutorial oder eine gescheite Erklärung für diese Anwendung? Stimmt es das man den Ethernetcontroller am Board selbst einstellen muss? Wie berechnet man die Checksummen der Header (ethernet, IP und UDP)? Hab dazu nämlich noch keine sinnvolle Erklärung gefunden.
Hast du dir mal dieses Tutorial angesehen?: http://www.fpga4fun.com/10BASE-T.html Wenn ich das Blockdiagramm von deinem Board richtig verstehe hast du nur eine Ethernet PHY. Musst also einen Ethernet Controller in Logik implementieren. Ist da was mit dem Board dabei oder musst du das alles selber beschaffen? opencores.org hat z.B. einen Ethernetcontroller. Deine Fragen bezüglich was du bei dem Ethernetcontroller einstellen musst hängt also von dem verwendet Core ab den du nimmst.
Dies hier must Du in VHDL umsetzen http://de.wikipedia.org/wiki/Transmission_Control_Protocol Dies ist der TCP/IP Stack. Dort sagst Du wohin das Paket gehen soll. (zu welcher IP und zu welchem Port) So viel ich weiß hat der Virtex 5 schon eine MAC integriert diesen brauch man also nicht auch noch machen. Das TCP/IP Protokoll ist nicht ohne. Es gibt aber Chips, die das ganze üfür Dich machen must mal nach "TCP/IP Stack Hardwire" suchen. Dann findest Du einen Chip dem Du die Daten nur noch Parallel übergeben must. Grüsse Sebastian
Hier ist der Link zu einem Chip den man einzeln kaufen kann oder auf einer kleinen Platine http://www.wiznet.co.kr/products_main.htm
An so einen dicken Brocken einen Coprozessor für TCP/IP ranzuhängen fände ich ziemlich seltsam. Für UDP brauchst du kein TCP/IP, da reicht IP, das ist nicht allzu kompliziert. Ob man das aber in VHDL machen will... ich denke da wäre ein Mikroprozessor-Core sinnvoller.
Ob UDP leichter ist darüber kann man sicher streiten.
Da gibt es nichts zu streiten. Bei UDP gibt es keinen Verbindungsaufbau, kein ARQ, keine Flusssteuerung, ...
Bei dem Board ist Vorprogrammiertes Programm drauf. Es steht sogar im Datenblatt wie man diesen Test durchführt. Doch das hab ich noch nicht probiert. Ich habe bei Xilinx ein paar files heruntergeladen. Ich habe aber noch nicht begriffen wie ich die anwenden soll(im Anhang). Wie gesagt kenn ich mich noch nicht wirklich aus. Was genau ist ein Core? Habe die Aufgabe bekommen, über die EXP Stecker des Boards digitale Signale einzulesen. Ich muss von 3 AD Wandlern mit jeweils 12Bit das Signal aufnehmen und dann über die Ethernetschnittstelle an den PC schicken. Muss jetzt ein Blockschalktbild für diese Anwendung machen. Habe bis jetzt nur die Idee dass ich die Signale in Dual RAMs speichere und dann vielleicht in den RAM des Boards kurz zwischenspeichern. Habe mir gedacht ich dann die Signale vom ersten AD Wandler in ein UDP Paket stecke und dieses dann an den PC schicke. Kann das so funktionieren, oder gibt es eine viel einfachere Methode für diese Anwendung?
Ich habe auf jeden Fall vor das ganze mit UDP zu realisieren
Hi, so wie ich deinen ersten Post deute, geht es darum etwas funktionierendes zu erzeugen und scheinbar weniger um die Erfahrung einen Ethernet-Controller zu Fuß zu implementieren. Ich empfehle dir daher es mit dem EDK (Embedded Development Kit) zu machen. Das setzt im Prinzip auf ein Synthese Tool (Z.B. ISE Web Pack) auf und du kannst dir dort einen Prozessor in deinen FPGA einbauen. Der lässt sich dann sehr weitreichend konfigurieren, was die Hardware und Peripherie angeht. Z.B. gibt es da passende Ethernet Cores, die du mit dem Phy verbinden kannst. Treiber und sogar nen kleiner Kernel sind auch mit dabei. Programmieren tusts du den Prozessor dann in C. Wie du deinem Datenblatt entnehmen kannst, gibt es für dein Board ein "V5LX50 Evaluation lwIP Web Server Example Design". Ich schlage dir vor, dass du es mal damit probierst. Wühl dich mal durch die EDK Doku (im doc verzeichnis vom edk). Es gibt vom EDK ne 30Tage Testversion. Ansonsten kostet das ca. 400€. ISE Webpack ist kostenlos - ich weiß aber nicht, ob das auch den Virtex5 kann. Es hat irgendwelche Einschränkungen bezüglich der größen der FPGA's. Könnte aber noch hinhauen, da der LX50 ja eher die kleine V5 Lösung ist. Gruß, Thomas
ich kann dir nochmal die Beschreibung auf FPGA4FUN empfehlen (hat Alban weiter oben schon getan). Das ist doch genau das, was du brauchst. Die Ethernetübertragung wird kurz beschrieben, und wie man das mit einem FPGA senden und empfangen kann. Es wird UDP verwendet, und dazu gibt es sogar fertige Sende- und Empfangstools für den PC. Nur ist es halt in Verilog statt VHDL, aber das sollte doch kein Problem sein. http://www.fpga4fun.com/10BASE-T.html Gruss Andi
Es wäre schön wenn ich den Ethernet-PHY zu Fuß implementieren könnte, doch da ich mich damit noch nie beschäftigt habe wäre mir für den Anfang lieber wenn ich das am besten schon fertig irgendwo finden würde. Habe weiter oben schon mal die selbe Frage gestellt: Habe die Aufgabe bekommen, über die EXP Stecker des Boards digitale Signale einzulesen. Ich muss von 3 AD Wandlern mit jeweils 12Bit das Signal aufnehmen und dann über die Ethernetschnittstelle an den PC schicken. Muss jetzt ein Blockschalktbild für diese Anwendung machen. Wie gesagt hab ich das oben schon mal gefragt. Hab mir nur mal ein paar gedanken gemacht. Hat jemand eine Idee oder Tipps wie das Blockschaltbild aussehen soll, bzw. wie es am einfachsten zu realisieren ist?
@ DC Kannst du bitte mal schreiben wer dir diese Aufgabe gestellt hat und welche Vorkenntnisse diese Person von dir erwartet?
Das ganze ist ein Projekt in der Schule. Allerdings arbeiten wir mit einem Prof. einer FH zusammen der sich mit FPGAs und VHDL sehr gut auskennt, deshalb wird das Projekt auch in VHDL programmiert. Er hilft mir nachher beim programmieren, doch solche Sachen wie das Blockschaltbild und die Checksummenberechnung sollte ich selber können. Ich habe vor diesem Projekt noch nichts von FPGA, VHDL und all dem gehört.
@ DC >Ich habe vor diesem Projekt noch nichts von FPGA, VHDL und all dem >gehört. Dann ist ein Ethernet-MAC nicht wirklich das, womit man anfängt. Didaktik und so. MfG Falk
>Dann ist ein Ethernet-MAC nicht wirklich das, womit man anfängt. Das sehe ich auch so. Für ein Schulprojekt scheint mir das auf jeden Fall sehr ambitioniert. Was ist denn das Ziel des Projektes im Bezug auf die Schüuler? Ist es das Erlernen der VHDL Programmierung, das Verstehen von Netzwerkprotokollen oder die AD Messung per Netzwerk "irgendwie mit FPGA" ans Laufen zu bringen und damit von allem ein bischen gesehen zu haben? Ich kann mir gerade nicht vorstellen, dass jemand an einer Schule die Entwicklung eines Ethernet Cores in VHDL als Projekt machen will. Allein das Schreiben des IP Stacks und der Treiber (oder auch ein lernen und anpassen bestehender Stacks) ist schon eine fordernde Aufgabe. Die wichtigste Frage die sich mir da gerade stellt ist die, ob das komplett in VHDL geschrieben werden soll oder ob es erlaubt (evt. sogar gewünscht) ist das mit einem Prozessor System (z.B. Microblaze + Ethernet Core) zu realisieren. Letzteres erscheint mir als die einzig sinnvolle Version, wenn es hinterher laufen soll. Erfahrungsgemäß kann ich Euch sagen, dass selbst das nicht gerade wenig Arbeit ist - aber evt. bekommt ihr das dann ans laufen. Die AD Messung müsstet ihr dann als eigenes Peripherie Modul in VHDL schreiben. Auf diese Art und Weise funktioniert auch das Webserver Beispiel aus dem Datenblatt. Gruß, Thomas
@ DC > Ich habe vor diesem Projekt noch nichts von FPGA, VHDL und all dem > gehört. Dann scheint das Ziel des Projektes zu sein euch zu frustieren. Das kann ich nicht verstehen. Wie bereits gesagt. Die einfachste Lösung wird auf fpga4fun.com gezeigt. Jedoch nimmt der Author dort sogar noch nicht mal einen Ethernet PHY Chip, den du aber auf deinem Board hast. OpenCore.org zeigt ein Blockschaltbild für einen Ethernet MAC (Seite 48: http://www.opencores.org/tmp/cvsget_cache/ethernet/doc/eth_speci.pdf Vielleicht hilft das ja.
Du kannst die Daten die durch den AD-Wandler erzeugt werden direkt per UDP versenden. Jedoch wird es dabei sicherlich zu Datenverlusten kommen. Dies geschieht, da der PC nicht immer regelmäßig die Daten abholt. (Windows ist kein Echtzeitbetriebssystem) Ich würde es anders machen. Die AD-Wandler-Daten in einen Block-Ram schreiben (dies sind Speicherzellen im FPGA). Dadurch werden die Daten gepuffert. Anschließend schreibst Du ein Modul, das die Daten aus dem RAM ausliest und dann per UDP versendet. Falls der PC nicht regelmäßig die Daten über Ethernet abholt füllt sich Dein Puffer. Ist der PC aber bereit Daten zu abzuholen ist die Ethernetverbindung schnell genug um den Puffer wieder komplett auszulesen. Dadurch gehen so gut wie keine Daten mehr verloren (es sei denn Übertragungsfehler) Grüsse Sebastian
Ich möchte nochmal betonen, dass es für genau dieses Board bereits ein Demo-Design mit Webserver gibt (irgendwie scheint mir das jeder hier zu übersehen). Das ist garantiert deutlich einfacher als das Projekt in VHDL zu Fuß zu schreiben. Gruß, Thomas
@ Breti Wo bekommt man dies denn? Grüsse Sebastian
> Wo bekommt man dies denn?
Steht auf Seite 5 des geposteten Datenblattes.
Möglicherweise kennt das aktuelle EDK das Board auch schon, dann kannst
du dir auch mit dem System Builder Wizard einfach ein ähnliches Demo
Design erstellen. Du musst dann nur ankreuzen, welche Peripherie du
nutzen möchtest. Der Wizard generiert üblicherweise auch ein paar
Testprogramme, die man sich zum einstieg mal anschauen kann.
Die Informationen zur Xilinx Netzwerklibrary findet man nach etwas
Suchen auf der Xilinx Website (hab den Link jetzt nicht da). Evt. auch
im doc Verzeichnis vom EDK.
Gruß,
Thomas
Ich muss die Ethernetschnittstelle gar nicht komplett implementieren. Ich muss nur Datenpakete verschicken. Ich generiere das Datenpaket selber mit Preamble, den einzelnen Headerinformationen und den Checksummen. Da die Anwendung nur eine peer zu peer Verbindung zulassen muss finde ich dass das einfacher ist als die Ethnetschnittstelle zu konfigurieren.
Du kannst doch einfach den Ethernet Controller im System Builder rüber ziehen und mit den Microblaze bzw Power PC verknüpfen.
>>> 22.03.2007 > Hinweis: der Originalbeitrag ist mehr als 6 Monate alt. Das Problem sollte nach knapp 3 Jahren gelöst oder zwischenzeitlich egal sein... :-/
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.