Ethernet Phy zum Senden bewegen

Gast #980813
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.
Gast #980995
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.
Gast #981013
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.
Gast #981039
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
Gast #991999
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?
#992188
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
Gast #992459
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.
Gast #993471
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.
Gast #993678
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
Gast #993907
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.
Gast #993981
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.
Gast #994163
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.
Gast #994217
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 ?
Gast #994912
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.
Gast #1790951
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
Dieser Beitrag ist gesperrt und kann nicht beantwortet werden.