Forum: FPGA, VHDL & Co. Xilinx GTP Training


von Gustl B. (-gb-)


Angehängte Dateien:

Lesenswert?

Hallo zusammen und frohes neues Jahr,

ich habe mir auf einem eigenen Board mit Artix7 einen Transceiver Kanal 
auf einen SFP gelegt.

Dann habe ich das Beispieldesign mit Datengenerator und Datenckecker 
erzeugt, in mein Design kopiert, SFP-Modul eingesteckt, Loopback mit 
Glas gemacht und siehe da, das was gesendet wird, kommt auch wieder an.

Jetzt habe ich das mal umgebaut damit ich da selber eigene Daten senden 
und empfangen kann. Quasi Datengenerator und Datenckecker rausgeworfen 
und selber Code geschrieben der das Training am Anfang nach dem Reset 
macht.
Dann noch einen TX und einen RX Datenbus mit jeweils 32 Bit Daten und 4 
Bit Valid Signalen. Meine TX Logik setzt jetzt immer das K28.5 Comma 
wenn ein Byte nicht valide ist.

Ganz am Anfang nach dem Reset lege ich auf TX nur Comma und warte bis 
ich auf RX die Comma korrekt empfange. Danach lasse ich auch Nutzerdaten 
zu.

Es ist immer so, dass ich die Comma korrekt empfange. K28.5 ist auch 
eindeutig und kann glaube ich nicht durch schieben von Bits zu einem 
anderen validen Comma werden.
Aber manchmal, da bekomme ich nicht alle Daten. Ein Bild zeigt das, da 
bekomme ich bei den letzten 32 Bits zwar die unteren 3 Bytes korrekt, 
aber das Obere nicht, stattdessen ist dort ein Comma.

Zum Erzeugen der Daten verwende ich die TX User Clock, die verwende ich 
auch für den ILA der die TX Daten anguckt und die RX User Clock verwende 
ich eben für alles was RX macht und auch den zugehörigen ILA.

Habt ihr Erklärungen oder eine Empfehlung wie man das Training richtig 
machen sollte?

Edith meint:
Das 8B10B macht der IP, ich lege also nur x"bc" für ein Byte an und 
sage, dass das ein K-Code werden soll und es wird auch einer.

Ich weiß nur nicht ob das für das Training Sinn macht dauerhaft nur den 
einen K-Code zu schicken. Eigentlich ja, weil so das Word-Alignment 
funktioniert.

Der Link läuft mit 1,25 GBit und machte mit dem Code vom Beispieldesign 
(da werden Daten aus einem BRAM geschickt und überprüft) keine 
Bitfehler. Nur will ich eben eigene Pakete schicken können.

Vielen Dank!

: Bearbeitet durch User
von Gustl B. (-gb-)


Angehängte Dateien:

Lesenswert?

Und es geht fragend weiter:

1.
Beim Comma Alignment habe ich eine Comma Mask. Als Default steht da 
0001111111 drinnen. Bedeutet das, dass für die Commaerkennung nur die 
Bits angeguckt werden, die dort in der Maske gesetzt sind? Sprich wenn 
jetzt hier die 7 Bits matchen, dann sagt die Commaerkennung, dass da ein 
Comma vorhanden ist. Warum sind da nur 7 Bits der Default wenn bei 8b10b 
doch 10 Bits ein Wort ergeben?

2.
Bei der Clock correction gibt es eine Sequenz die man einstellen kann 
und eine Periodicity of the CC sequence die als Default bei 5000 steht.
Was bedeutet das?
Muss ich genau alle 5000 Bytes die definierte Sequenz einfügen?

3.
Kann ich den GTP auch ohne das alles verwenden? Also nur als SerDes? Der 
macht dann hoffentlich das Bitalignment, aber klar, 8b10b muss ich 
selber machen und auch das Wordalignment mit Bitslip muss ich mir bauen. 
Ist aber nicht so irre kompliziert.

: Bearbeitet durch User
von Markus W. (mwww)


Lesenswert?

Hallo,

unter der Annahme, dass es dir eigentlich ums Daten senden geht und 
nicht um das low layer Protokoll wäre es evtl. eine Möglichkeit, die 
Aurora-IP zu verwenden. Ansonsten kann ich zu deinen konkreten Fragen 
leider nichts beitragen.

von Gustl B. (-gb-)


Lesenswert?

Ja, nun, em Ende soll da Ethernet mit UDP bei rumkommen. Klar, ist noch 
ein weiter Weg, aber das ist schon machbar. Jetzt im ersten Schritt 
schiebe ich eben Dummydaten hin und her um zu sehen ob Layer 0 
funktioniert.

von Markus W. (mwww)


Lesenswert?

Ethernet also, ok, dann geht kein Aurora. Und von dem Ethernet willst du 
möglichst viel selbst machen und keine IP-Cores verwenden? Deinen 
Anwendungsfall würde soweit ich das überblicke die 1G Base-X PCS von 
Xilinx abdecken bzw. hatte ich vor vielen Jahren mal Teile der PCS von 
opencores genommen. Wenn du dann noch den Xilinx-Mac nimmst, brauchst du 
"nur" noch IP/UDP machen.

von Gustl B. (-gb-)


Lesenswert?

Ja, korrekt. Aber ich mach das ja um was zu lernen. Mal gucken wie 
schnell das ausufert und mir zu viel Zeit kostet.

von Rick D. (rickdangerus)


Angehängte Dateien:

Lesenswert?

Gustl B. schrieb:
> Ich weiß nur nicht ob das für das Training Sinn macht dauerhaft nur den
> einen K-Code zu schicken. Eigentlich ja, weil so das Word-Alignment
> funktioniert.
Ich bin mir da nicht so sicher. Für die PLL wäre es vmtl. günstig auch 
mal was anderes zu schicken, da beim K28.5 keine 'schnellen' Bits dabei 
sind (linker Teil im Bild).

von Gustl B. (gustl_b)


Lesenswert?

0011111010 und 1100000101

von Rick D. (rickdangerus)


Angehängte Dateien:

Lesenswert?

Ups, ich dachte gerade mein 8B10b-Coder wäre kaputt, aber das 
dargestellte Symbol ist K28.1 und nicht K28.5
Dann müsste es bei Dir ja fürs Alignment passen.

von Gustl B. (gustl_b)


Lesenswert?

Genau. K28.5 ist wie ich das sehe das einzige Wort das tatsächlich 
eindeutig ist. Egal wie man die Bits schiebt.

Aktuell läuft der Link gut, muss noch untersuchen wieso. Und dann den 
Xilinx IP schön verpacken in eine Komponente mit ordentlichem 
(FIFO)Interface.

von Rick D. (rickdangerus)


Lesenswert?

Gustl B. schrieb:
> Aktuell läuft der Link gut
Interessant wird es dann, wenn die (Takt-)Frequenz zwischen Sender und 
Empfänger voneinander abweicht...

von Gustl B. (-gb-)


Lesenswert?

Na gut, dafür gibt es doch Dual-Clock-FIFOs. So einen habe ich im TX 
Pfad vor dem Xilinx-GTP und im RX Pfad hinter dem GTP. Sieht aktuell gut 
aus.

Etwas nervig ist, wenn der Datenpfad mehere Bytes breit ist, aber nicht 
jedes Byte darin valide ist. Kann man aber auch mit umgehen ...

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.