Hallo! Ich versuche derzeit den Gigabit-Tranceiver des SP605 (Spartan 6) anzusteuern. Grundsätzlich funktioniert das Ganze auch schon. Allerdings entspricht die im Core Generator eingestellte Line Rate von 0,6 Gbps nicht der Datenrate, die ich am Ausgang des Tranceivers messe (dort messe ich 1 Gbps => "11110000" mit einer Frequenz von 125 MHz). Die Signale PLLLKDET0, RESETDONE0 und RESETDONE1 habe ich auf LEDs geführt (und alle haben den Wert 1). Das UG386 und die Doku zum GTP-Wizzard habe ich gelesen und suche nun schon eine ganze Weile den Fehler. Ich würde mich wirklich freuen wenn mir jemand weiterhelfen könnte. Außerdem möchte ich die Line Rate zur Laufzeit ändern können. Dazu habe ich versucht den Dynamic Reconfiguration Port (DRP) zu nutzen. Leider funktioniert dies auch noch nicht. => siehe Anhang Ich bin für jede Hilfe dankbar.
Schau Dir mal den Takt, mit dem das Ding wirklich läuft auf einem Oszilloskop an:
1 | TILE0_GTPCLKOUT0_OUT => open, --Referenztakt |
2 | TILE0_GTPCLKOUT1_OUT => open, --Referenztakt |
Duke
gelb ist TILE0_GTPCLKOUT0_OUT mit 41,7 MHz und grün ist TILE0_TXN0_OUT mit 125 MHz
Bist du sicher, dass du das Clocking des MGT verstanden hast? Zunächst mal muss der REF Clock über einen IBUFDS direkt an die REF-Clock Pins des entsprechenden MGT Tiles angeschlossen werden. Was da die 200MHz zu suchen haben, verstehe ich nicht. Siehe Seite 38ff im UG386. Dann muss der GTPCLKOUT(0) oder (1) benutzt werden, um die Logik im FPGA und die TXUSERCLK, TXUSERCLK2 und RXUSERCLK zu speisen, auch da muss dann was spezielles dran, und zwar ein BUFIO2. Seite 72ff im UG386. Dann muss man die Buffer solange im Reset halten, wie die USERCLKs noch nicht stabil anliegen. RESETDONE reicht da leider noch nicht. Hast du das denn mal simuliert?
Erstmal Vielen Dank für die Hilfe! - Das Clocking scheine ich noch nicht verstanden zu haben... Stellt denn der GTP-Wizzard nicht den Referenztakt für CLK00 und CLK01 bereit? Mir ist irgendwie unklar wo ich den hernehmen soll. Das heißt was genau lege ich an den differentiellen Eingang des IBUFDS an? Muss das ein externer Referenztakt sein? Den Ausgang des IBUFDS führe ich dann auf CLK00 und CLK01. GTPCLKOUT(0) führe ich jetzt auf einen BUFIO1, danach auf einen BUFG und danach an TXUSERCLK, richtig? Simuliert habe ich das Ganze noch nicht. Das würde ich machen sobald alles korrekt verdrahtet ist.
Ok, ich habe mir den Referenztakt jetzt mit einer PLL erzeugt und kann nun auch die korrekte Line Rate messen. Der Einsatz eines externen Referenztaktes wäre aber trotzdem aufgrund der Jitter besser, oder?
Naja, mit PLL und internem REF-Clock gehts auch bei niedrigen Datenraten so halbwegs. Normalerweise kommt der REF-Clock aber von extern von einem Low Jitter Quarzoszillator. Auf dem SP605 ist dafür ein 125MHz Oszillator drauf, der den SFP MGT und den PCIe Anschluss speisen kann. Und dann gibts noch die SMA Buchsen für die anderen beiden MGTs, also für den MGT an SMA und den vom FMC Stecker, soweit ich das in Erinnerung habe. An welchem MGT bist du denn jetzt dran? Der passende MGTREFCLK Eingang geht direkt auf den IBUFDS. Der Rest sollte dann so klappen. Ich hab bei mir den MGTCLOCKOU(0) an den BUFIO2 und dann an TXUSERCLK und RXUSERCLK, und den /2 geteilten an TXUSERCLK2 und RXUSERCLK2, weil ich 16 Bit Datenpfad habe.
Ich bin an dem MGT mit den SMA-Buchsen und werde das Modul bei Gelegenheit auf die Nutzung des externen Taktes umbauen. Wenn ich jetzt die Line Rate im Betrieb schnell verändern möchte, nehme ich ja den DRP des GTP. Kann ich nicht auch einfach die Referenzfrequenz des GTP ändern? Die erzeuge ich ja im Moment noch über eine PLL.
Hm, keine Ahnung, vom DRP lass ich lieber die Finger, das ist bei mir zum Glück nicht nötig. Mit 8B/10B, Commas, Alignment und Elastic Buffer hab ich mir genügend graue Haare geholt.
Funktioniert denn Deine Übertragungsstrecke (nicht nur der Sender) schon fehlerfrei? schrammler schrieb: > Wenn ich jetzt die Line Rate im Betrieb schnell verändern möchte, nehme > ich ja den DRP des GTP. Kann ich nicht auch einfach die Referenzfrequenz > des GTP ändern? Die erzeuge ich ja im Moment noch über eine PLL. Möglicherweise mußt Du auch beides anpassen (DRP + PLL). Warum willst Du die Line-Rate eigentlich dynamisch ändern? Was hängt denn an der anderen Seite dran? Dort muß die Line-Rate ja auch passen. Duke
Ich muss die Daten lediglich ausgeben. Das heißt die seriellen Daten werden zum Schalten einer Elektronik benötigt. Dabei muss ich die Geschwindigkeit mit der ich die Daten ausgebe ändern können.
Und dafür brauchts den MGT? Deine 00001111 hatte mich vorhin schon gewundert. Wäre da nicht der OSERDES besser geeignet? Oder musst du bis 3,125GBit/s ausgeben?
Naja, die Datenrate sollte so um die 2 GBit/s liegen. Kann man denn die Datenrate der OSERDES auch im Betrieb verändern?
2GBit/s schaffen die OSERDES nicht, nur 1080MBit/s maximal. Datenrate ist natürlich änderbar, über die Frequenz, das sind ja nicht weiter als schnelle Schieberegister.
schrammler schrieb: > Das heißt die seriellen Daten > werden zum Schalten einer Elektronik benötigt. Dabei muss ich die > Geschwindigkeit mit der ich die Daten ausgebe ändern können. Um dedizierte FPGA-Elemente (DSP, MGT, BRAM etc.) zu missbrauchen, muß man ersstmal komplett verstanden haben, wie sie funktionieren :-) schrammler schrieb: > Dabei muss ich die > Geschwindigkeit mit der ich die Daten ausgebe ändern können. Nu laß Dir doch nicht alles aus der Nase ziehen. Im welchem Breich soll Deine Datenrate liegen? In Abhängigkeit von der reference clock sind m.E. auch nur bestimmte line rates nutzbar. Wenn Du die line rate Frequenz durch die Breite des Datenpfades dividierst, kommst Du auf die Datenrate, mit der Du dem GTP die Daten übergeben mußt. Hast Du das eigentlich schon mal simuliert? Wenn nicht, kannst Du das Oszi eigentlich gleich wieder ausschalten. BTW: Welche Bandbreite hat Dein Scope? Duke
@Duke Scarring: Die Datenrate hab ich ja oben schon angegeben. ;) Die Frage war eigentlich ob ich die Referenzfrequenz des MGT im Betrieb ändern kann und auf diese Weise die Line Rate leicht verstimme (nach oben und unten). Über die Parameter M, N1, N2 und D sind ja nur gröbere Änderungen der Line Rate möglich. Vielleicht geht das ganze auch prinzipiell nicht so wie ich mir das vorstelle (z.B. weil die Referenzfrequenz konstant sein muss). An der Siulation arbeite ich gerade. Mein Oszi hat 1 GHz und 4 GSa/s.
schrammler schrieb: > Über die Parameter M, N1, N2 und D sind ja nur gröbere > Änderungen der Line Rate möglich. Das sind Parameter, die direkt auf eine PLL wirken. Wenn Du frei durchstimmen willst, brauchst Du wahrscheinlich eine durchstimmbare Referenzquelle. > Vielleicht geht das ganze auch > prinzipiell nicht so wie ich mir das vorstelle (z.B. weil die > Referenzfrequenz konstant sein muss). Kann sein, glaube ich aber nicht. Die PLL wird ja dafür genutzt, um intern die Takte für line-rate und Datenverarbeitung (z.B. line-rate/32) bereitzustellen. schrammler schrieb: > An der Siulation arbeite ich gerade. Sehr gut. Im schlimmsten Fall gaugelt dir ein schlechtes Simulationsmodell was vor. Im besten Fall weißt Du gleich, woran Du bist. > Mein Oszi hat 1 GHz und 4 GSa/s. Da wird es aber schon knapp, um sich 2 GBit/s anzuschauen. Duke
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.