www.mikrocontroller.net

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


Autor: DC (Gast)
Datum:

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?
Autor: Bla (Gast)
Datum:

Autor: Christian Peters (kron)
Datum:

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. ;)
Autor: DC (Gast)
Datum:
Angehängte Dateien:

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.
Autor: Alban (Gast)
Datum:

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.
Autor: Sebastian (Gast)
Datum:

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
Autor: Sebastian (Gast)
Datum:

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
Autor: Andreas Schwarz (andreas) (Admin) Benutzerseite Flattr this
Datum:

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.
Autor: Sebastian (Gast)
Datum:

Ob UDP leichter ist darüber kann man sicher streiten.
Autor: Andreas Schwarz (andreas) (Admin) Benutzerseite Flattr this
Datum:

Da gibt es nichts zu streiten. Bei UDP gibt es keinen Verbindungsaufbau,
kein ARQ, keine Flusssteuerung, ...
Autor: DC (Gast)
Datum:

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?
Autor: DC (Gast)
Datum:

Ich habe auf jeden Fall vor das ganze mit UDP zu realisieren
Autor: Breti (Gast)
Datum:

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
Autor: Andi (Gast)
Datum:

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
Autor: DC (Gast)
Datum:

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?
Autor: Alban (Gast)
Datum:

@ DC

Kannst du bitte mal schreiben wer dir diese Aufgabe gestellt hat und
welche Vorkenntnisse diese Person von dir erwartet?
Autor: DC (Gast)
Datum:

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.
Autor: Falk (Gast)
Datum:

@ 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

Autor: Breti (Gast)
Datum:

>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
Autor: Alban (Gast)
Datum:

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

Vielleicht hilft das ja.
Autor: Sebastian (Gast)
Datum:

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
Autor: Breti (Gast)
Datum:

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
Autor: Sebastian (Gast)
Datum:

@ Breti

Wo bekommt man dies denn?


Grüsse

Sebastian
Autor: Breti (Gast)
Datum:

> 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
Autor: DC (Gast)
Datum:

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.
Autor: Lunzi (Gast)
Datum:

Du kannst doch einfach den Ethernet Controller im System Builder rüber
ziehen und mit den Microblaze bzw Power PC verknüpfen.
Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

>>> 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...  :-/

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel




Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder GIF-Format hochladen.
Siehe Bildformate
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken erkennst du die Nutzungsbedingungen an.

webmaster@mikrocontroller.netImpressumNutzungsbedingungenWerbung auf Mikrocontroller.net