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
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
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.
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.
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.
Ja, korrekt. Aber ich mach das ja um was zu lernen. Mal gucken wie schnell das ausufert und mir zu viel Zeit kostet.
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).
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.
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.
Gustl B. schrieb: > Aktuell läuft der Link gut Interessant wird es dann, wenn die (Takt-)Frequenz zwischen Sender und Empfänger voneinander abweicht...
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.