Forum: FPGA, VHDL & Co. Ethernet Phy zum Senden bewegen


von bati (Gast)


Lesenswert?

Hallo,

ich habe ein Board mit einem Gigabit Phy (88E1111) und möchte nun selbst 
den MAC Teil auf dem FPGA implementieren (Cores sind mir zu groß, für 
das, was ich vorhabe ...). Ich möchte einfach nur UDP-Pakte 
versenden/empfangen und die Verbindung direkt zum PC verwenden (also 
Kollisionen, TCP usw. alles uninteressant).
Ich mache zunächst einen Reset des Phys, der sich anschließend auch 
korrekt konfiguriert (sehe ich an den Leds). Dann habe ich mir einen 
gültigen Ethernet Frame mit IP, UDP-Paket erstellt und möchte es 
anschließend senden, GTX-Takt mit 125 MHz angebunden anschließend die 
einzelnen Bytes über die TXD Leitung des Phys. Nur leider sendet der Phy 
keine Daten (Led blinkt niemeals auf und mit einem Sniffer sehe ich auch 
keine Pakete). Das Empfangen scheint aber sehr wohl zu funktionieren. 
Muss ich zunächst noch etwas beim Phy konfigurieren? Datenblätte gibt es 
ja anscheinend nur unter einem NDA.

Danke im Voraus.

: Gesperrt durch Moderator
von 11833 (Gast)


Lesenswert?

>Datenblätte gibt es ja anscheinend nur unter einem NDA.

So ist es, und darum kann hier auch niemand Informationen preisgeben, 
die er unter NDA erhalten hat...
Unterschreibe ein NDA mit Marvell frage nach Datenblätter.

von bati (Gast)


Lesenswert?

Hat niemand einen Tipp?

Habe mittlerweile auch den 100 Mbit Modus versucht, dazu den GTX-Takt 
auf 0 gelegt und die 25MHz des Phy zum Senden genutzt. Aber er sendet 
immer noch nichts.

von bati (Gast)


Lesenswert?

Also das mit dem NDA ist ja klar.
Aber kann mir vielleicht jemand sagen, ob ein Reset des Phys eigentlich 
ausreichen sollte oder ob ich sonst noch was machen muss. Die Broadcast 
Pakete meine PC's zumindest scheinen ja anzukommen (das signalisiert die 
Led).
Das wäre schon sehr hilfreich, damit ich weiß wo das Problem ligen 
könnte.
Die fertigen Cores machen ja auch nichts weiter und laufen daher auch 
nicht.

von SuperWilly (Gast)


Lesenswert?

Nicht unwesentlich beim Einsatz von Gigabit-PHYs:
Du solltest Dir unbedingt mal die Konfiguration des PHYs anschauen (z.B. 
Config-Widerstände). Erst wenn das Teil für den richtigen Modus
richtig konfiguriert ist, kommst du weiter. Hierzu kommst du um einen 
tiefen Blick in das Datenblatt nicht herum ---> also NDA unterzeichnen

Gruß,
SuperWilly

von bati (Gast)


Lesenswert?

Habe es endlich nach etwas herumprobieren hinbekommen. An der 
Konfiguration muss man zum Glück nichts ändern.

Habe dafür aber wieder ein neues "Problemchen": Ich kann komischerweise 
nur in einer Endlosschleife senden. Sobald ich es auf ein einziges Mal 
beschränke sendet der Phy nicht. Auch wenn ich nur eine bestimmte Anzahl 
sende klappt es nicht, nur in einer Endlosschleife. Woran könnte das 
liegen?

von Thomas P. (pototschnig)


Lesenswert?

bati wrote:
> Habe es endlich nach etwas herumprobieren hinbekommen. An der
> Konfiguration muss man zum Glück nichts ändern.
>
> Habe dafür aber wieder ein neues "Problemchen": Ich kann komischerweise
> nur in einer Endlosschleife senden. Sobald ich es auf ein einziges Mal
> beschränke sendet der Phy nicht. Auch wenn ich nur eine bestimmte Anzahl
> sende klappt es nicht, nur in einer Endlosschleife. Woran könnte das
> liegen?

Einfach ins Blaue geraten ... Hat das Ding einen Puffer eingebaut, der 
nur geleert wird, wenn er voll wird?

MfG
Thomas Pototschnig

von bati (Gast)


Lesenswert?

Ich befürchte, dass es ein Problem mit dem GTX Takt gibt. Denn selbst in 
der Endlosschleife kommen nicht alle Pakete raus. Vielleicht klappt es 
nur bei manchen Paketen, bei denen die Bytes schön synchron zum Takt 
waren. Habe auch schon mal in einem anderen Forum gelesen, dass ein 
Phaseshift um 90° bei Phy Takt geholfen hat, bei mir leider nicht.

von Christian R. (supachris)


Lesenswert?

Hm...was sagt denn die Simulation? Da müsstest du doch das Timing mit 
dem geforderten Timings des Phy vergleichen können. Oder machst du das 
im Blindflug?

von bati (Gast)


Lesenswert?

Simulation klappt.

Wie gesagt, wenn ich sende und mit dem Durchlauf im Ethernet-Frame 
fertig bin, beginne ich von vorne und sende das Paket erneut. Das klappt 
in einer Endlosschleife wunderbar. Mache ich das ganze bloß einmal, wird 
nichts gesendet.

von Duke Scarring (Gast)


Lesenswert?

Wo sind momentan Unterschiede zwischen Testbench und realem Gerät? Da 
kannst Du versuchen Deine Testbench mehr der Realität anzupassen um so 
dem Fehler auf die Spur zu kommen.

Ohne den Thread komplett gelesen zu haben: Wie stellst Du fest (real), 
das Pakete gesendet werden?

Duke

von bati (Gast)


Lesenswert?

Ich verwende Wireshark, um zu schauen, ob Pakete ankommen.
Meine Statemachine läuft synchron mit dem erzeugten GTX Takt. Den 
erzeuge ich mit einem DCM von 100 MHz.

Hier auch meine simple Statemachine:
1
process(gtx_clk)
2
begin
3
   if(rising_edge(gtx_clk))
4
   then
5
      case state is
6
         when send =>
7
            PHY_TX_EN <= '1';
8
            PHY_TXD <= etherframe(cnt*8 - 1 downto cnt*8 - 8);
9
            if(cnt = 1)
10
            then
11
               state <= idle;
12
            else
13
               cnt <= cnt - 1;
14
            end if;
15
         when idle =>
16
            PHY_TX_EN <= '0';
17
      end case; 
18
   end if;
19
end process;

etherframe ist gültig und enthält 72 Bytes. cnt ist anfangs 72. Zu dem 
Zeitpunkt ist der Phy resettet und die LEDs melden Betriebsbereitschaft.

Setze ich im idle case den cnt wieder auf 72 und den state auf send, 
beginnt er von vorne und der Phy sendet auch in einer Schleife. Lasse 
ich die Statemachine unverändert, wie oben, sendet er gar nichts. Wie 
gesagt, ich verwende eine 1:1 Verbindung brauche also kein carrier sense 
oder sonstiges.

von SuperWilly (Gast)


Lesenswert?

Vielleicht findet das einmalige Versenden des FPGAs in der Reset-Phase
des PHYs statt ...

von bati (Gast)


Lesenswert?

In der Reset Phase kann ich ausschließen. Ich habe schon mal versucht, 
das senden durch einen Button auf dem Board auszulösen. In der Schleife 
sendet er solange, bis ich den Button wieder loslasse. Wenn er nur 
einmal auf Knopfdruck senden soll passiert wieder nichts.

von SuperWilly (Gast)


Lesenswert?

Schickst du denn eine Preamble (7 Bytes) und ein FrameDelimiter-Byte
vorweg ?

von bati (Gast)


Lesenswert?

Ja, klar.

Also 7x55|D5|DST_MAC|SRC_MAC|LENGTH|DATA|FCS.

Das Paket habe ich mir mit einem Packet Builder erstellen lassen. Daran 
liegt es nicht.

von SuperWilly (Gast)


Lesenswert?

Ich würde mal (für den Fall der Endlosschleife) von Frame zu Frame 
unterschiedliche Daten senden, so dass du evtl. siehst, ob alle Daten 
ankommen oder Frame-Daten verloren gehen.

von bati (Gast)


Lesenswert?

Genau das habe ich mir auch gedacht. Habe ich eben gemacht.
Habe den DATA Teil auf Null gestzt. Nach jedem Senden erhöhe ich den 
Teil um eins (CRC Berechnung habe ich schon eingebaut).
Jetzt das Tolle: Das erste Frame das ankommt ist das 4 Millionste (ich 
muss wahrscheinlich nach dem Reset noch eine gewisse Zeit warten).
Von da an zählt er schön durch. ABER dann mittendrin überspringt er 2000 
Frames und dass regelmäßig.

von SuperWilly (Gast)


Lesenswert?

Wie groß ist deine Interframe-Lücke ?

von bati (Gast)


Lesenswert?

Wie vorgeschrieben 12 Takte bei 125MHz. Habe ich aber auch schon 
vergrößert -> kein Unterschied.

von SuperWilly (Gast)


Lesenswert?

Hast du noch andere Phasen-Verschiebungen des vom FPGA ausgegebenen 
Taktes ausprobiert ?

Kannst du ein Augendiagramm des Taktes messen ? Vielleicht hast du ein 
Jitter-Problem ... Gibst du den Takt auf einem dafür vorgesehenen 
FPGA-Pin aus ?

von bati (Gast)


Lesenswert?

Habe leider nichts da zum messen. Pin ist korrekt laut Datenblatt des 
Boards.

Habe die DCM mit dem CoreGen erstellt. Der Jitter beträgt 0.217 ns.

von bati (Gast)


Lesenswert?

@SuperWilly

Danke für deine Hilfe.
Ich habs hinbekommen. Habe den Reset am Anfang weggelassen. Stattdessen 
starte ich ihn aus dem Energiesparmodus, der anscheinend nach dem 
Einschalten des Boards eingelegt wird.

von SuperWilly (Gast)


Lesenswert?

Freut mich !
Gruß
SuperWilly

von jan0385 (Gast)


Lesenswert?

Hallo Bati,

wie hast du es geschafft die PHY nun zum Laufen zu bekommen.

Bin beim gleichen Problem. Ich mach den Reset und sonst nichts. Nach dem 
Reset leuchtet eine LED an der Buchs der PHY.

Mein PC sagt "Netzwerik kabel nicht verbunden".

Grüße

jan

von Robert K. (Firma: Medizintechnik) (robident)


Lesenswert?

Das hört sich für mich seltsam an, dass man den aus dem Energysparmodus 
heraus starten muss.

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


Lesenswert?

Bitte keine Zombies ausgraben....

Dieser Beitrag ist gesperrt und kann nicht beantwortet werden.