Forum: FPGA, VHDL & Co. Ethernetschnittstelle programmieren - Anfänger


von DC (Gast)


Lesenswert?

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?

von Bla (Gast)


Lesenswert?


von Christian P. (kron)


Lesenswert?

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. ;)

von DC (Gast)


Angehängte Dateien:

Lesenswert?

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.

von Alban (Gast)


Lesenswert?

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.

von Sebastian (Gast)


Lesenswert?

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

von Sebastian (Gast)


Lesenswert?

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

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

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.

von Sebastian (Gast)


Lesenswert?

Ob UDP leichter ist darüber kann man sicher streiten.

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

Da gibt es nichts zu streiten. Bei UDP gibt es keinen Verbindungsaufbau, 
kein ARQ, keine Flusssteuerung, ...

von DC (Gast)


Lesenswert?

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?

von DC (Gast)


Lesenswert?

Ich habe auf jeden Fall vor das ganze mit UDP zu realisieren

von Breti (Gast)


Lesenswert?

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

von Andi (Gast)


Lesenswert?

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

von DC (Gast)


Lesenswert?

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?

von Alban (Gast)


Lesenswert?

@ DC

Kannst du bitte mal schreiben wer dir diese Aufgabe gestellt hat und 
welche Vorkenntnisse diese Person von dir erwartet?

von DC (Gast)


Lesenswert?

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.

von Falk (Gast)


Lesenswert?

@ 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


von Breti (Gast)


Lesenswert?

>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

von Alban (Gast)


Lesenswert?

@ 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.

von Sebastian (Gast)


Lesenswert?

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

von Breti (Gast)


Lesenswert?

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

von Sebastian (Gast)


Lesenswert?

@ Breti

Wo bekommt man dies denn?


Grüsse

Sebastian

von Breti (Gast)


Lesenswert?

> 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

von DC (Gast)


Lesenswert?

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.

von Lunzi (Gast)


Lesenswert?

Du kannst doch einfach den Ethernet Controller im System Builder rüber 
ziehen und mit den Microblaze bzw Power PC verknüpfen.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

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