Durchlaufzeit vom PHY messen

OP #4422847
Lesenswert?
• ▲
▼
Servus

ich arbeite an einem Projekt der sich mit SyncE auseinandersetzt.

Im Grunde wird ein P2P Gigabitlink mittels 
Kupfer(1000BaseT)/SFP(1000BaseX) aufgebaut. Durch ein externes Baustein 
wird das Systemtakt auf dem Slave mittels den Recovered Clock von einem 
PHY bzw. Spartan6 GTP zu dem Takt vom Master phasenstarr gekoppelt. Das 
funktioniert auch alles prima.

Ziel das Projekt ist eine phassenstarres Aufbau zwischen Master und 
Slave zu gewährleisten. Der Delay bzw. Offset zwischen die Timestamp 
Zähler (mit 125MHz getaktet) auf beide Boards wird mittels PTP 
ermittelt. Und hier kommt das Problem. Durch den PHY wird der Link 
asymmetrisch und die PTP Ergebnisse sind fehlerbehaftet (bei der 
Berechnung mittels t1,t2,t3 und t4 wird immer ausgeganen dass der Link 
symmetrisch ist sprich RX und TX Delay sind gleich). Deswegen suche ich 
ein Weg wie ich die Asymmetrie vermessen kann.

Zwei Use Cases sind vorhanden:

1000BaseT (problematisch):
Der Assymetrie steckt im PHY (externes Baustein). Nach Linkaufbau kann 
ich auf dem Oszi sehen dass der Abstand zwischen den Master TX Trigger 
und den Slave RX Trigger sich fast immer verschiebt (Nanosekundenbereich 
max 20 NS was ich bis jetzt beobachten konnte). Der Abstand ist fest 
solange der Link nicht unterbrochen wird (ist auch gewünscht deswegen 
Phasenstarr das ganze). Würde ich den Link unterbrechen und neuaufbauen 
lassen dann kann es sein dass der TX/RX Abstand sich ändert. Eine 
Unsicherheit von bis zu 8 Nanosekunden wäre in Ordnung (ein Systemtakt) 
aber alles drüber ist schlecht...

1000BaseX (scheint zu laufen):
Bei dieser Aufbau wird der PHY kurzgeschlossen und die Signale vom SFP 
Cage hängen direkt am Spartan6 GTP. Somit spielt sich der gesammte 
Delay/Durchlaufzeit in beide FPGAs und ist nachvollziebar. Der gemessene 
Delaywert schein zu passen.

Als Referenz habe ich mir schon das "White Rabbit" Projekt angeschaut. 
Die schaffen sogar ein Sub-Nanosekunde Garantie! Dafür ist die Hardware 
was die verwenden so ziemlich kompliziert. Die nutzen eine bestimmte 
8B10B K-Code um einen 125MHz Takt zu erzeugen und dann wird die Phase 
zwischen Takt und erzeugten Signal gemessen. Dadurch werden Parameter 
bestimmt die dann später in ein weiteren Verfahren reinfliessen und am 
Ende kommt das gewünschte Ergebnis. Das Ganze will ich mir eigentlich 
sparren und deswegen wollte ich fragen ob sich jemand schon mit was 
ähnliches beschäftigt hat und wie er/sie das ganze gelöst hat.

FPGA: Xilinx Spartan6 150T, Xilinx ISE 14.7
PHY: Marvell 88E1322

Danke im Voraus.


Gruss

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.