Forum: FPGA, VHDL & Co. Idle-Symbole bei GTP-Übertragung


von Christian R. (supachris)


Lesenswert?

Ich beschäftige mich derzeit mit den GTP Transceivern bei Xilinx, weil 
wir da demnächst ein System damit bauen wollen.
Ich hab da mal eine grundsätzliche Frage:
Wenn ich keine Nutzdaten zu übertragen habe, muss ich ja Idle-Symbole 
senden. Soweit klar. Kann ich die unbegrenzt lange senden, oder kommt 
dann der Empfänger auch aus dem Tritt? Die konkrete Anwendung wird so 
aussehen, dass es eine Board to Board Verbindung zwischen einem Virtex 6 
LXT und mehreren Spartan 6 LXT geben wird. Alle GTP werden mit dem 
gleichen Ref-Clock aus dem gleichen Quarzoszillator versorgt. Außerdem 
werden beide Seiten über FIFOs entkoppelt und der Lese-Takt am Empfänger 
ist gleich dem Schreib-Takt am Sender. Laut dem Xilinx-Paper "High Speed 
Serial I/O made simple" brauche ich dann keine Clock correction.
Nur über die maximale Anzahl der Idles finde ich da nichts. In der 
Anwendung wird über die eine Richtung nur wenig übertragen (Steuerdaten) 
und in der Rückrichtung die Messdaten.
Kennt sich da jemand aus? Ich wollte eigentlich im Oktober zum 
entsprechenden Workshop bei PLC2, aber der findet wahrscheinlich nicht 
statt, weil sich sonst keiner angemeldet hat bei denen....
Vielen Dank für Antworten.

von Klaus F. (kfalser)


Lesenswert?

Christian R. schrieb:
> Wenn ich keine Nutzdaten zu übertragen habe, muss ich ja Idle-Symbole
> senden.
Mit dem GTP habe ich noch nicht gearbeitet, aber mit ähnlichen 
Serializern.
Die IDLE-Symbole sendet der Serializer automatisch, da musst Du nichts 
tun.
Du übergibts einfach keine Nutzdaten.

> Kann ich die unbegrenzt lange senden, oder kommt
> dann der Empfänger auch aus dem Tritt?
Du kannst diese unbegrenzt lange senden, das ist ja der Sinn der IDLE 
Symbole. Dies dienen dazu Sender und Receiver auf der seriellen 
Verbindung synchron zu halten.

von Christian R. (supachris)


Lesenswert?

Aha. Ja, 100% bin ich durch die Doku noch nicht durch, ob der dir nun 
automatisch sendet, oder nicht. Dachte mir schon, dass das unbegrenzt 
geht, hab aber nichts dazu gefunden. Vielen Dank schon mal.

von Klaus F. (kfalser)


Lesenswert?

Christian R. schrieb:
> ob der dir nun automatisch sendet, oder nicht.

Das mit dem automatisch senden muss sein.
Auf der seriellen Leitung darf der Datenstrom nicht aufhören, weil der 
Receiver aus dem Flankenübergängen den Takt rekonstruiert.
Deshalb werden aus den 8 Bit Nutzdaten 10 Bit Symbole erzeugt, diese 
sind so konstruiert, dass sie
a) genügend 0-1 und 1-0 Übergänge aufweisen
b) keinen Gleichanteil haben

Wenn keine Nutzdaten zu übertragen sind, müssen deshalb IDLE (SYNC) 
Symbole gesendet werden.
Man brauch sich in einer Anwendung eigentlich um die IDLE Symbole nicht 
zu kümmern.
Diese sind in 2 Fällen wichtig :
- Beim Aufbau der Verbindung erkennt der Receiver die IDLE oder SYNC 
Symbole und ermittelt die 10 Bit Grenzen. Dazu braucht er eine Sequenz 
von mehreren aufeinanderfolgenden (5 soweit ich weiss) IDLE Symbolen.
Normalerweise, wenn die Verbindung gut ist, kommen Sender und Receiver 
nicht aus dem Tritt. Man kann den Receiver aber so einstellen, dass er 
sich bein Auftreten einer IDLE sequenz wieder re-synchronisiert.
- Wenn der Schreibtakt der Nutzdaten auf der Senderseite und der 
Lesetakt der Nutzdaten auf der Empängerseite nicht übereinstimmen, dann 
würden diese langsam auseinanderdriften. Deshalb weiss der Empfänger, 
dass er IDLE Symbole wegschmeißen, bzw. einfügen darf. In diesem Fall 
muss man garantieren, dass zwischen den Nutzdatenpaketen ausreichen IDLE 
Symbole kommen.

von Christian R. (supachris)


Lesenswert?

Ja genau, so hab ich das auch verstanden. 8B10B und durchgehender 
Datenstrom ist logisch und klar. Mir gehts eher um die konkrete 
Realisierung mit dem GTP-Wrapper. Ich hab nochmal in den GTP Wrapper 
geschaut, wahrscheinlich muss ich die selbst senden. Ist aber offenbar 
ganz einfach. Es gibt am TX einen Eingang TX_CHARISK, damit werden die 
Eingangsdaten in die K-Charakter übertragen. Dazu muss man offenbar an 
den Dateneingängen für Idle (K29.7) 11111101 anlegen und eben das 
TX_CHARISK aktiv setzen, damit K29.7 über die Leitung geht.

Über das Erst-Sync Problem hab ich auch nachgedacht. Die Frage ist, ob 
der sich da kümmert, oder ob ich im Core Generator die Sequenz selber 
einstellen muss. Wenn ich die Clock Correction deaktiviere (weil ich ja 
wie gesagt die selbe Taktquelle für Sender und Empfänger habe) kann ich 
nämlich keine Komma-Sequenzen mehr angeben. Die 
Komma-Alignment-Geschichte will aber K28.5 oder K28.1 haben, also Start 
of Frame. Ich wollte eigentlich so einfach wie möglich die Übertragung 
gestalten, bisher ist es ein Parallel-Interface mit Data und Active. Die 
nachfolgende Logik dekodiert selbst, was das ist. Ich bräuchte also 
keine Frames. Ob der GTP da akzeptiert, wenn ich als Idle immer das 28.5 
sende? Da müsste der sich ja ständig ausrichten können und wenn dann 
Daten kommen, müssten die stimmen, oder?

Das grundsätzliche Prinzip istz mir klar, wie gesagt mir gehts um die 
GTP-Realisierung.

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.