Fehler beim Erkennen der Präambel (Ethernet)

OP #3715416
Lesenswert?
• ▲
▼
Hallo,

ich versuche seit längerem auf einem FPGA das Empfangen von 
Ethernetframes zu realisieren.
Ich habe mich schon im Forum umgeschaut, aber leider keinen Post 
gefunden der mir weitergeholfen hat, falls ich was übersehen haben 
sollte, wäre ich über Verweise dankbar.

Nun zu meinem Problem:

Zwar bin ich in der Lage die die einzelnen Bits zu empfangen, allerdings 
wird meine dekodierte Präambel immer falsch.
Ich empfange 7 x die X"55", bei dem Start-Frame-Delimiter fehlen jedoch 
2 bit (wie ich nach langer Suche herausgefunden habe).
Das Byte, welches dem Start-Frame-Delimiter zugeordnet wird besteht aus 
den letzten 6 bits des Start-Frame-Delimiters und den ersten 2 bit der 
Mac-Ziel-Adresse.
Daraus schließe ich, dass 2 bits im ersten Byte der Präambel nicht 
detektiert werden und sich der Fehler bis zum Start-Frame-Delimiter 
fortsetzt und erst dort auffällt.

Bei dem PHY den ich verwende handelt es sich um den SMSC LAN 8720A.

Link zum Datenblatt:

http://ww1.microchip.com/downloads/en/DeviceDoc/8710a.pdf

Kurze Erläuterung zum Code(siehe Anhang):

clk50mhz ist meine generierte Clock für den PHY.
Mit PhyCrs signalisiert der PHY mir, dass gültige Daten am Ausgang 
PhyRxd vorhanden sind.
Ist PhyCrs = '1' werden die bits in Zweiergruppen auslesen.
Um zu kontrollieren welchen Wert der SFD hat, bzw. (falls dieser richtig 
ausgelesen wurde) welchen Wert das erste Byte der Mac-Ziel-Adresse hat, 
lasse ich mir das jeweilige Byte über Leds darstellen.

Ist die if-Abrage mit PhyCrs hier nicht richtig, sodass erst im 
darauffolgenden Takt, während bereits 2 bits "verloren" gegangen sind 
das Auslesen der bits beginnt oder liegt der Fehler doch woanders?
Angehängte Dateien:
Gast #3715515
Lesenswert?
• ▲
▼
Allerdings ist auch deine Erzeugung und die Ausgabe der 50 MHz Clock 
suboptimal.
Du hast 100 MHz, verwende diese intern direkt (mit Clockenable, oder 2 
States).
Stelle auch sicher dass die FF in den IOs verwendet werden, sonst hats 
du
keine wirkliche Kontrolle über Setup und Hold Zeiten auf dem RMII 
Interface.
Gast #3715778
Lesenswert?
• ▲
▼
Julian A. schrieb:
> Danke für die Tipps. Damit sollte ich weiter kommen.

Mein 2. Tipp ist wichtiger als der erste!

Laut Datasheet des Phy hast du worst case gerade mal 6 ns Setupzeit, von 
Daten zur Clock.

Sei
x = Delay von interner Clock bis zum Ausgang des Clockpinds
y = Delay (Routing und Logik) von den Inputpins zu den FF (die mit 
internerClock getaktet werden)
z = Setupzeit der FFs.

Damit es zuverlässig funktioniert mus x + y + z < 6 ns sein.

Dazu kommt dass y für die verschiedenen Signale noch unterschiedlich 
ist. vor allem durch das Routing. Im schlimmsten Falle sehen die FFs 
also nicht mal Daten die Zusammengehören!

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.