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.
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?
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