Forum: FPGA, VHDL & Co. Durchlaufzeit vom PHY messen


von Valko Z. (hydravliska)


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

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.