Hallo liebe Profis, ich bin gerade dabei ein LTM9011-14 an ein Board von Trenz (TE0820) anzuschließen. Leiterkarte ist so geroutet, dass alle serielle Leitungen die gleiche Länge haben. (Die Längen auf dem Trenz Board sind berücksichtigt). Ich habe schon mal etwas code geschrieben und mit dem ILA überprüft. Auf allen Leitungen sehe ich Bewegung. Ich gehe also erstmal davon aus, dass elektrisch alles funktioniert. So, wie ich das angeschlossen habe, kann ich natürlich keine sinnvollen Daten bekommen, da meine Clock nicht synchron zu den Daten ist. Nun habe ich schon viel über das Bitslip und Idelay gelesen, kann mir aber nicht so richtig vorstellen, wie ich das machen soll. Der ADC bietet ja auch die Frame clock Leitungen an. Die stehen mir auch im FPGA zur Verfügung. Vielleicht kann man die elegant dafür nutzen? Meine Frage ist daher: Wie würdet ihr das jetzt machen? Ist es einfacher, das jetzt händisch zu machen? Oder sollte man den high-speed-select-wiz benutzen. Ich habe mir das auch schon angeschaut, finde das aber sehr kompliziert! Könntet ihr mir bitte mit euren Erfahrungen einige Tipps geben? Danke schon mal, brushless
Mattias M. schrieb: > Der ADC bietet ja auch > die Frame clock Leitungen an. Die stehen mir auch im FPGA zur Verfügung. > Vielleicht kann man die elegant dafür nutzen? Exakt die solltest du verwenden um mit dem Deserializer die Bits zu parallelisieren. Mattias M. schrieb: > Bitslip Brauchst du dann eigentlich nicht wenn du die Frameclock verwendest. Mattias M. schrieb: > Idelay Das kann hilfreich sein wenn die Daten nicht schön getroffen werden. Du solltest erstmal vom ADC ein statisches Bitmuster ausgeben lassen, das kann man bestimmt konfigurieren. Dann guckst du ob du das korrekt bekommst. Wenn ja dann kannst du im ADC umschalten auf echten Betrieb, wenn nein, dann schiebst du so lange mit dem idelaye bis du das Bitmuster stabil bekommst.
Wir nutzen genau dieses Modul auch. Und zwar im 16 Bit 2 Lane Modus. Also 500MHz DDR dann. Dazu geht der DCO (wir nutzen nur einen, die beiden Dies sind hinreichend gleich angebunden) zunächst in ein IBUFGDS, danach in einen IDELAY im Clock Modus. Da wir auch die Leitungslängen der Signale gleich ausgelegt haben, ist es einfacher, nur den DCO in der Phase zu den Daten zu verzögern. Danach geht es auf auf einen BUFIO und danach auf einen BURF mit Teiler-Faktor 4. Somit kommt da schon mal der 125MHz Sample Takt wieder raus. Der 500Mhz nach dem BFIO und der 125MHz Takt nach dem BUFR gehen dann an die ISERDES. Die ISERDES für die Daten arbeiten im 8 Bit DDR Mode, das wird vom IP Wizzard ganz gut bei 2:16 (SYS_W:DEV_W) als Klartext VHDL/Verilog Quellcode erstellt. Die FRA Signale werden mit 1:8 eingelesen und steuern die BitSlip Logik. Solange das Ausgangssignal des FRAx nicht 00001111 ist, wird der Bit Slip durchgeführt. Die grundsätzliche Logik dafür generiert ja auch der IP Wizzard. Das wird beim Start solange gemacht, bis FRA 00001111 ist und dann passen auch die Daten. Du brauchst also 8x ein ISERDES IP mit 2:16 und 2 mal eins mit 1:8 und die ganze Clocking Sache. D Funktioniert sauber und ohne Timing Probleme auf einem Artix. Durch die BUFR Sache hat man die 500MHz nur in der IO Bank und kriegt gleicht die 125Mz synchron zu den deserialisierten Daten mit raus. Klappt natürlich nur wenn alle Daten und FRA in der gleichen Bank liegen und DCO an einem SRCC oder MRCC Paar.
Achso, genau wie Gustl sagt, haben wir die Inbetriebnahme gemacht. Per SPI den ADC auf ein festes Pattern eingestellt und dann solange das IDELAY am Clock verstellt bis man die Grenzen hat, wo es gerade nicht mehr passt. Dann auf die Mitte im fertigen Design als fixed Delay.
Super, vielen Dank, das hat mir schon mal sehr geholfen... Das werde ich am Montag gleich mal umsetzten und berichten. Schönen Sonntag noch, MM
So, das konfigurieren vom ADC scheint schon mal zu funktionieren (über SPI). Mein Test Muster herhalte ich noch nicht zurück, muss also das Auswerten vom frame-clock noch richtig machen. Gibt es da eventuell ein Code Schnipsel? Dann noch eine Verständnis Frage: Wie kann ich dem ISERDESE3 denn den Modus mitteilen SDR oder DDR? Weiß der das aus der Clock Beziehung? Hier eine Antwort von Xilinx: You must be knowing whether the incoming data is SDR or DDR. If the Data is DDR and required de-serialization ratio is 1:8, CLK_DIV = CLK/4. If the Data is DDR and required de-serialization ratio is 1:4, CLK_DIV = CLK/2. In short if you know the data nature and set the DATA_WIDTH attribute and Derive the CLK_DIV properly, you will get the expected de-serialization i.e there is no Damit kann ich nicht s anfangen. Bei dem ISERDESE2 kann man das ja angeben. MM
Christian R. schrieb: > Dann auf die Mitte im fertigen Design als fixed Delay. Als kleine Ergaenzung: Wenn mans noch den Fall abfedern moechte, dass die Timings einem im Betrieb weglaufen, kann man die IDELAYs auch dynamisch halten und mit IBUFDS_DIFF_OUT Buffern arbeiten. Ein Pfad ist dann der kalibrierte Datenpfad, der andere der Kontrollpfad der die Timings weitermisst und gegebenfalls den ersten Pfad vor oder zurueck tappt. Funktioniert wirklich saustabil. :-)
Brushless schrieb: > So, > das konfigurieren vom ADC scheint schon mal zu funktionieren (über SPI). > Mein Test Muster herhalte ich noch nicht zurück, muss also das Auswerten > vom frame-clock noch richtig machen. > Gibt es da eventuell ein Code Schnipsel? > Dann noch eine Verständnis Frage: Wie kann ich dem ISERDESE3 denn den > Modus mitteilen SDR oder DDR? > Weiß der das aus der Clock Beziehung? > Hier eine Antwort von Xilinx: > You must be knowing whether the incoming data is SDR or DDR. > If the Data is DDR and required de-serialization ratio is 1:8, CLK_DIV > = CLK/4. > If the Data is DDR and required de-serialization ratio is 1:4, CLK_DIV > = CLK/2. > In short if you know the data nature and set the DATA_WIDTH attribute > and Derive the CLK_DIV properly, you will get the expected > de-serialization i.e there is no > Damit kann ich nicht s anfangen. > Bei dem ISERDESE2 kann man das ja angeben. > MM Hm, klingt ja seltsam. Ist das im Core Generator auch so? Ansonsten: Wer oder was hindert dich, das zu simulieren?
Christian R. schrieb: >> You must be knowing whether the incoming data is SDR or DDR. >> If the Data is DDR and required de-serialization ratio is 1:8, CLK_DIV >> = CLK/4. >> If the Data is DDR and required de-serialization ratio is 1:4, CLK_DIV >> = CLK/2. Mir fehlt hier irgendwie die Angabe, wie es einzustellen wäre, wenn es SDR ist. Meines Erachtens ist das eigentlich der case 1 mit CLK/8
So, habe fertig... Ich habe mal einige Infos angehangen, wie ich das jetzt gelöst habe. Zum Serdes: Der Serdes arbeitet immer im DDR Format. Hat man Daten im SDR Format, benutzt man einfach jedes 2. bit am Ausgang. Das Prinzip ist eigentlich recht einfach. Bei mir geht der DCO clock vom ADC (400 MHz) und der Frame clock (100 MHz) über LVDS Buffer direkt an den Serdese3. Die Datenleitung habe ich mit einem idelay3 etwas verzögert (empirisch ermittelt). Nun der Trick: Aus dem Serdes kommen dann parallele Daten, gewonnen aus dem input Stream. Diese Daten sind dann noch nicht richtig aber wegen des Frame clocks immer gleich! Nun kann man sich bequem aus zwei samples das gewünschte bit Muster zusammenbauen. Das bedeutet nur einen Takt Verzögerung (10ns). Die gesamte bit-slpi Logik ist damit überflüssig. Kann man im Xapp 1208 bitslip logic page 10! nachlesen. Ich habe versucht, das in den Bildern deutlich zu machen und hoffe anderen damit helfen zu könne. Eine Frage habe ich aber noch. Wie kann man die clock Leitungen am besten verzögern, wenn das notwendig wird? Mit dem clock wiz kann man zwar die Phase einstellen, aber viel zu grob! Das idelay3 darf keine clock Leitungen treiben! Viele Grüße, MM
Brushless schrieb: > Bei mir geht der DCO clock vom ADC (400 MHz) und der Frame clock (100 > MHz) über LVDS Buffer direkt an den Serdese3. Genau, wenn man den Frameclock wie Daten behandelt, dann kann man darüber seine echten Daten alignen ohne Bitslip.
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.