Forum: FPGA, VHDL & Co. Ethernet PHY ansteuern mit FPGA


von Tobias P. (hubertus)


Lesenswert?

hallo allerseits,

ich möchte mit einem FPGA ein paar Ethernet-Pakete versenden. Da mein 
Gerät immer mit einer einfachen Punkt-zu-Punkt Verbindung betrieben wird 
und immer im Vollduplex arbeitet, möchte ich mir den MAC sparen, da ich 
dann ja kein CSMA/CD benötige sondern einfach senden darf.
Ich frage mich jetzt ein paar Dinge.

Also, den PHY kriege ich schon mal ans Laufen, er baut einen Link auf 
und die Verbindung steht.
Jetzt Frage ich mich: wenn ich ein Paket senden möchte, muss ich die 
Präambel auch an den PHY übertragen? macht das normalerweise der MAC? 
oder macht der PHY selbst eine Präambel?
falls nein müsste ich also zuerst 6x 55 senden, und dann D5. Da Ethernet 
das LSB zuerst überträgt, muss ich also für D5 zuerst das Nibble 1010 an 
den MII Bus geben, dann 1011. Richtig? Aber ich muss immer nur die 
einzelnen Bytes beginnend beim LSB senden. Also wenn ich 01 02 03 04 
senden will, dann muss mein MII nacheinander
1000 0000
0100 0000
1100 0000
0010 0000
senden. Auch richtig?

Gibt es zum MII Interface irgendwo eine einigermassen übersichtliche 
Spezifikation, wo die Timings etc. ersichtlich sind? Im IEEE802.3 ist es 
natürlich beschrieben, aber dieses Dokument habe ich nicht :-( ausserdem 
ist es ziemlich umfangreich, mich interessiert im Moment aber nur MII.

Gruss Tobias


PS. ach ja, noch etwas fällt mir ein. Ich habe auf meinem FPGA-Board 2 
PHYs. Ich habe gestern für einen Test mal die beiden MII über Kreuz 
miteinander verbunden. Also TXD an RXD, RX_DV an TX_EN und umgekehrt. 
Das hat funktioniert, ich konnte mit meinem Laptop anschliessend über 
dieses Konstrukt ins Netzwerk, aber die Verbindung war ziemlich langsam. 
Kann das daran gelegen haben, dass meine beiden PHYs asynchron 
zueinander liefen, und ich TX_EN asynchron zum Takt des jeweiligen PHY 
aktiviert hatte? Meines wissens müssen alle Eingangssignale synchron zum 
TX_CLK Takt sein, den der PHY ausgibt. Und die empfangenen Daten sind 
immer synchron zum RX_CLK. Ich nehme an, RX_CLK und TX_CLK können 
zueinander phasenverschoben sein? Da frage ich mich natürlich dann auch, 
wie ich die Daten gescheit in den FPGA bekomme. Theoretisch müsste dann 
mein FPGA ja mit >>25 MHz getaktet werden, damit ich eine saubere 
Flankenerkennung realisieren kann. Z.B. mit 50 MHz, aber ob das dann 
reicht?

: Bearbeitet durch User
von Markus F. (Gast)


Lesenswert?

Welchen Phy hast Du und welches board? zwei PHYs deuten auf das Altera 
DE 115. Richtig? Das wäre dann der Alaska. Für den gibt es immer mal 
wieder eine halblegale SPEC zu laden.

Ich habe auch sowas vor und mich mit den MODI befasst, stehe aber noch 
etwas auf dem Schlauch. Zu der TX-Problematik kann ich sagen, dass man 
das irgendwie setzen kann, um es zu timen - wie auch immer.

von PittyJ (Gast)


Lesenswert?

Ich habe einen Phy mal ohne gekauften MAC angeschlossen.
Du musst die Präambel, also die 6 * 0x55 usw auch mit senden. wichtig 
ist auch, dass am Ende auch die CRC berechnet und mitgeschickt wird. Die 
war nicht so einfach zu erzeugen.
Den 125 MHz Takt für den Phy hat der FPGA dann über eine PLL erzeugt. 
Und bei einem Marvel Alaska Chip muss dann noch eine um 90 Grad gedrehte 
Phase kommen.
Ob due Nibbles oder Bytes schickst, hängt daran, ob der PHY mit MII oder 
RGMII angeschlossen ist.
Und bei der Bitreihenfolge habe ich mit Wireshark geschaut, was da 
wirklich auf dem Bus liegt. Ich meine nicht, dass ich die Bits noch im 
Nibble gedreht habe. (ist schon länger her)

von Trundle T. (shaheed)


Lesenswert?

1. es ist 7 0x55 und dann 0xd5 als präambel
2. ohne crc32 - wert(4 bytes und der muss korrekt sein) am ende wirst du 
nix sehen -  die ethernetkarte wird das paket ohne es an dein 
betriebssystem zu senden direkt verwerfen
3. dein paket muss mindestens 64 byte lang sein - kein einziges byte 
weniger oder bei wireshark wird auch nix auftauchen
4. is dein paket länger als 15xx (genaue zahl bitte nachschlagen) siehst 
du auch nix mehr
5. lsb/msb/übertragungsart / -timing sind alle von der konfiguration des 
phys abhängig -> dein phy wird wohl in einer grundkonfiguration sein, 
die meist über pull-up /pull-down - widerständen an irgendwelchen pins 
eingestellt wird -> also datenblatt vom phy checken -> datenblatt von 
deinem evalboard checken -> vergleichen und dann weißt du wie du die 
daten zum phy schicken musst.

von Valko Z. (hydravliska)


Lesenswert?


von Bürovorsteher (Gast)


Lesenswert?

>15xx
Wie - Was? wireshark kann keine Jumbo-Pakete lesen?

von Tobias P. (hubertus)


Lesenswert?

Hallo zusammen
danke erstmal für die Tipps.
Nein, habe noch das DE115, somit auch nicht den Alaska Phy... Sondern 
das Cyclone V Board.

Gibt es für MDIO etwa schon was fertiges?

von Markus F. (Gast)


Lesenswert?

PittyJ schrieb:
> Ich habe einen Phy mal ohne gekauften MAC angeschlossen.
D.h. direkt über den FPGA?

> Du musst die Präambel, also die 6 * 0x55 usw auch mit senden.
Das hatte ich mir gedacht.

> wichtig ist auch, dass am Ende auch die CRC berechnet und
> mitgeschickt wird.
Und auch das hatte ich auf dem Schirm.

Macht der Marvel eigentlich irgendwas an Daten alleine?

> Die war nicht so einfach zu erzeugen.
Ist das der Standard Ethernet CRC aus dem Internet?

> Den 125 MHz Takt für den Phy hat der FPGA dann über eine PLL erzeugt.
Ich bin nicht sicher, aber das auf meinem PCB so ist, muss ich gucken.

> Und bei einem Marvel Alaska Chip muss dann noch eine um 90 Grad gedrehte
> Phase kommen.
Welches Signal muss gedreht werden? Du meinst 90 Grad verzögert für den 
Takt nach den Daten nehme ich an? Oder um -90 Grad, damit es quasi 
Taktende + Reserve ist?

> Ob due Nibbles oder Bytes schickst, hängt daran, ob der PHY mit MII oder
> RGMII angeschlossen ist.
Was würdest Du empfehlen, ist einfacher?

von Lattice User (Gast)


Lesenswert?

Tobias Plüss schrieb:

>
> Im IEEE802.3 ist es
> natürlich beschrieben, aber dieses Dokument habe ich nicht :-(
>

Dem kann abgeholfen werden, völlig legal:

http://standards.ieee.org/about/get/802/802.3.html

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


Lesenswert?

Hier wurde das senden über Ethernet schon mal durchgekaut.

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


Lesenswert?

Link vergessen.

Beitrag "Ethernet GMII"

> Ob due Nibbles oder Bytes schickst, hängt daran, ob der PHY mit MII oder
> RGMII angeschlossen ist.
Was würdest Du empfehlen, ist einfacher?

MII ist einfacher.

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.