Forum: FPGA, VHDL & Co. Ethernet Preamble


von pietro_lockvogel (Gast)


Lesenswert?

1
Preamble
2
For transmission, this field is automatically inserted by the core. The preamble field was
3
historically used for synchronization and contains seven bytes with the pattern 0x55,
4
transmitted from left to right.
1
The Start of Frame Delimiter (SFD) field marks the start of the frame and must contain the
2
pattern 0xD5.

warum wird in der testbench 0x55 55 55 55 FB und dann 0x D5 55 55 55 
gesendet.

Es sollte doch 0x55 55 55 55 und dann 0x55 55 55 D5 gesendet werden
1
 // send preamble
2
      rx_stimulus_send_column(32'h555555FB, 4'b0001);
3
      rx_stimulus_send_column(32'hD5555555, 4'b0000);

von Christoph Z. (christophz)


Lesenswert?

Gesendet wird es wohl schon in der richtigen Reihenfolge. Kannst ja in 
der Simulation nachsehen.

Würde sagen, das die Funktion rx_stimulus_send_column die Daten als 
big-endian erwartet (Was für Internet/Ethernet nicht verwunderlich ist).

von Dergute W. (derguteweka)


Lesenswert?

Moin,

Und fuer was ist das 2. Argument bei rx_bla_column()?
Soll vielleicht getestet werden, was passiert, wenn der Takteinlauf 
etwas kuerzer ist?
Hab' das irgendwo schonmal gesehen, dass irgendein MAC auch mit weniger 
als 7 mal 0x55 als Takteinlauf zufrieden ist.

Gruss
WK

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


Lesenswert?

pietro_lockvogel schrieb:
> // send preamble
>       rx_stimulus_send_column(32'h555555FB, 4'b0001);
>       rx_stimulus_send_column(32'hD5555555, 4'b0000);
> warum wird in der testbench 0x55 55 55 55 FB und dann 0x D5 55 55 55
> gesendet.
Du solltest dich da schon mal fragen: warum überhaupt D5, wenn der SFD 
doch 10101011 und damit optisch eigentlich AB ist?

Konterfrage: welches der 4 Bytes erscheint tatsächlich zuerst auf dem 
Bus?
Du vermutest offenbar, dass es das MSByte ist. Was, wenn es das LSB 
ist und dort sogar mit dem rechten Bit begonnen wird?

Zitat von https://de-academic.com/dic.nsf/dewiki/1324552
1
Aufbau
2
Ethernet überträgt die Bits seriell grundsätzlich beginnend mit dem 
3
untersten, niedrigstwertigen Bit (der „Einerstelle“) eines Bytes. Das 
4
bedeutet, dass beispielsweise das Byte 0xD5 als Bitsequenz (links nach 
5
rechts) „10101011“ auf die Reise geht.
Dann wird das FB = 11111101 zu 10111111. Und die 55 werden zu 10101010. 
Die D5 = 11010101 werden zum 10101011 (die findest du dann wieder 
überall als SFD: https://www.google.com/search?q=sfd+10101011).
Und auf dem Bus sieht das zeitlich von links nach rechts so aus, dass 
erst ein korruptes erstes Byte kommt, dem dann viele 1010 zur 
Synchronisierung folgen, und zum Schluss der SFD:

10111111 10101010 10101010 10101010 10101010 10101010 10101010 10101011


Dergute W. schrieb:
> Hab' das irgendwo schonmal gesehen, dass irgendein MAC auch mit weniger
> als 7 mal 0x55 als Takteinlauf zufrieden ist.
Der muss das abkönnen, denn diese Bitmuster sind dafür gedacht, dass 
sich die PLL auf die Sendefrequenz einregeln kann.

: Bearbeitet durch Moderator
von pietro_lockvogel (Gast)


Lesenswert?

vielen Dank Leute.
ich kapier zwar nichts, aber ich schau mir das bald mal genauer an.

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


Lesenswert?

pietro_lockvogel schrieb:
> ich kapier zwar nichts
Ist nicht schlimm, kann man ja ändern.

Wie gesagt: du musst dir mal anschauen, wie die aufgerufene Funktion 
funktioniert. Und natürlich auch, wie das Ethernet auf den unteren 
Layern abläuft.

von pietro_lockvogel (Gast)


Angehängte Dateien:

Lesenswert?

Ach so, das wird doch alles zur selben Zeit auf den Bus gelegt.
Dann wird das eingelesen.

1
   @(posedge xgmii_rx_clk_tb or negedge xgmii_rx_clk_tb);
2
      #1600;
3
      xgmii_rxd_tb                     <= d;
4
      xgmii_rxc_tb                     <= c;
Es sollten aber 7 Bytes 0x55 also 14 mal 0x5 vorhanden sein.
sind aber vlt 12 stück und dann noch 0xD5.

Heaa

von pietro_lockvogel (Gast)


Lesenswert?

Lothar M. schrieb:
> 10111111 10101010 10101010 10101010 10101010 10101010 10101010 10101011
korrupt ,55,55,55,55,55,55, SFD 5D

ach so dann versteht der MAC, dass die Preamble zwar falsch ist, aber 
noch genug richtig ist, um mit dem Frame arbeiten zu können oder was?

Lothar M. schrieb:
> Der muss das abkönnen, denn diese Bitmuster sind dafür gedacht, dass
> sich die PLL auf die Sendefrequenz einregeln kann

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


Lesenswert?

pietro_lockvogel schrieb:
> ach so dann versteht der MAC, dass die Preamble zwar falsch ist
Es gibt keine "falsche Preamble", die Preamble dient dazu, den Empfänger 
su synchronisieren und auf des SFD vorzubereiten.
https://www.quora.com/What-is-the-use-of-the-preamble-in-an-Ethernet-frame
Erst die Daten nach einem korrekt erkannten SFD werden vom MAC 
verarbeitet
https://erg.abdn.ac.uk/users/gorry/course/lan-pages/mac.html

pietro_lockvogel schrieb:
> das wird doch alles zur selben Zeit auf den Bus gelegt.
Auf welchen Bus?
Der eigentliche Ethernet-Bus ist nicht das selbe wie der Bus zwischen 
MAC und Phy.
https://de.wikipedia.org/wiki/Media_Independent_Interface

von pietro_lockvogel (Gast)


Lesenswert?

Lothar M. schrieb:
> Auf welchen Bus?
XGMII denke ich.

Die Testbench instanziiert den MAC IP
1
 
2
  /*---------------------------------------------------------------------------
3
   -- wire up Device Under Test
4
   ---------------------------------------------------------------------------*/
5
   ten_gig_eth_mac_0_example_design dut (
6
  
7
8
...
9
10
11
      .gtx_clk                         (gtx_clk),
12
      .xgmii_tx_clk                    (xgmii_tx_clk),
13
      .xgmii_txd                       (xgmii_txd),
14
      .xgmii_txc                       (xgmii_txc),
15
      .xgmii_rx_clk                    (xgmii_rx_clk),
16
      .xgmii_rxd                       (xgmii_rxd),
17
      .xgmii_rxc                       (xgmii_rxc)
18
...
19
);

Dann wird das ganze mit einem Signalgenerator der Testbench verbunden:
1
generate
2
   if (tb_mode == "DEMO") begin
3
      assign xgmii_rxd                 = xgmii_rxd_tb;
4
      assign xgmii_rxc                 = xgmii_rxc_tb;
5
      assign xgmii_rx_clk              = xgmii_rx_clk_tb;
6
   end
7
...

von Tim (Gast)


Lesenswert?

Der RX-MAC schaut nur auf den Start mit SFD. Die Preamble wird ignoriert 
und ist für den PHY gedacht (CDR, AGC, Bias,..).

Der TX-MAC generiert das Frame inklusive vollständiger Preamble für die 
Übertragung.

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.