Ethernet Preamble

Gast #6918064
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);
Moderator (Firma: Titel) Persönliche Seite #6918165
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.
Gast #6918985
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
Angehängte Dateien:
Gast #6918989
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
Moderator (Firma: Titel) Persönliche Seite #6919004
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
Gast #6919135
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
...
Gast #6919198
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren