Hallo, habe mal ne kurze Frage an euch. Ich verwende bei meinem zwei Xilinx Entwicklungsboards ML507 die differentiellen Ein- und Ausgänge mit LVDS IOSTANDARD. Mit dem einem Board wird eine 20 MHz Clock erzeugt und über den differentiellen Ausgang (Clockausgang, SMA-Connector) zum anderen Eingang (Clockeingang, SMA-Connector) des zweiten Boards geschickt. Wenn ich am ersten Board wo die 20 MHz erzeugt wird die Frequenz messe, sehe ich einen sauberen Rechteck. Sobald ich die Verbindung zum zweiten Board per SMA-Connectoren schaffe und die Frequenz wieder messe, sehe ich das ich Störüngen auf der Clock habe und das Rechteck nicht mehr sauber ist. Habe bei beiden Boards die IOSTANDARDS LVDS_25 benutzt. Sind da die Ein- und Ausgangswiderstände auf den Boards bei Xilinx schon mit integriert oder gibt es noch andere Standards die ich hier evtl. benutzen kann? Oder muss ich noch weitere Sachen beachten? Würde mich auf jede Anregung sehr freuen. MfG Cihan
Was ist als Ausgangs-R und Eingangs-R vorgeschrieben worden? Verwendest du DIFF TERM am Eingang? Ich bin gerade an einem ähnlichen Thema dran: Beitrag "Re: LVCMOS25 oder LVDS_25 für differntial signaling"
Ja mit Diff_Term hat es funktioniert, meine Clock ist wieder sauber. Der Abschlusswiderstand hat gefehlt. Ich habe einfach in der UCF den Eingang den Parameter übergeben. NET "<clockeingang>" DIFF_TERM = TRUE | IOSTANDARD = LVDS_25; Hat super funktioniert. Ist auch alles im UG190 detailliert beschrieben so wie ich es rausgefunden habe. Danke für die Anregung. MfG Cihan
Hallo, die 20 MHz Frequenz ist ursprünglich aus einem 140 MHz kreiert worden, ist ebend eigentlich ein Signal welches ich dann über einen OBUFDS über die GTX-Ports H14 und H15 differentiell ausgegeben habe, um den anderen FPGA zu takte. Das zweite Board nimmt dann mit eingestelltem Eingangswiderstand das Signal über ein IBUFGDS auf, welches ich dann über eine DCM weiter führe. Ich habe allerdings Probleme mit den Verzögerungen. Ich sende ja sowohl Clock als auch Daten vom ersten FPGA- zum zweiten FPGA-Board und sehe das die Daten zur Clock verschoben sind (Messung am Oszi). Beispielsweise wenn ich eine Bitfolge "1110000" schicke empfange ich es als "0001110". Die Clock geht durch mehrere Buffer durch und die Daten gehen nur über einen IBUFDS durch, kann es schon dadurch zu Verzögerungen kommen, wenn ja, wie kann man Sie eliminieren oder sogar synchron halten? Bräuchte in dieser hinsicht mal eure Hilfe. MfG Cihan
In Deinem beschriebenen Beispiel hast Du 3 Takte Verzögerung. Bei 20 MHz wären es 50 ns Taktperiode und somit 150 ns Verzögerung. Das ist viel, viel mehr als alle möglichen Durchlaufzeiten durch die FPGAs und würden sogar bei 20 cm/ns Ausbreitungsgeschwindigkeit einer Kabellänge von 30 m entsprechen. Wenn Du wirklich solche Verzögerungen siehst, dann hast Du irgend einen anderen Fehler.
Abgesehen von der Verzögerung, wie sollte man denn beim Empfänger-Board die Clock und die Daten aufnehmen? Ich habe es folgendermaßen gemacht: 20MHz (Eingangstakt) -> IBUFGDS -> DCM -> CLK0 -> BUFG -> (ab hier wird er im Progamm verwendet) Daten -> IBUFDS -> (ab hier werden sie im Progamm verwendet) Mir kommt es so vor, als ob die Clock schon richtig eingebunden wurde, aber die Daten nicht. Reicht es aus, wenn man die Daten nur über ein IBUFDS einliest? oder wie sollte ich es am besten machen (sowohl für Clock als auch für die Daten) mfg Cihan
wozu die DCM? die bringt nur jitter auf den Takt, weil sie vorhandenen Jitter glättet und damit die Relation zwischen Takt und den Daten verschlimmbessert
Die DCM brauche ich, da die Daten mit 140 MHz gesendet werden. Aus der 20 MHz wird dann die 140 MHz generiert, mit den dann die Daten erfasst werden. Die 20 MHz Clock dient sowohl zum generieren der 140 MHz und soll unter anderem auch als Synchronisation für die Daten dienen, um Beispielsweise den Startpunkt eines ankommenden Datenpaketes zu signalisieren. Cihan
Ich kenne Deine Rahmenbedingungen nicht, aber solche Methoden sind ein absolut unprofessioneller Murx, der Dir nur Schwierigkeiten machen wird. Verwende einen Serializer mit 8B/10B Kodierung. Dann hast Du nur eine einzige serielle Leitung, auf der Takt und Daten gemeinsam wandern.
Danke für den Tip, aber wird mir warscheinlich nicht nützen. Vielleicht hole ich mal bisschen mehr raus. Das Ziel ist es von einer Camera die Pixeldaten zu speichern, welche mit dem CameraLink Protokoll kommen. Da ich zur Zeit die Kamera noch nicht da habe, versuche ich sowohl die Kamera auf dem ersten Board und den Empfänger (zweites Board) zu programmieren. Beim CameraLink hat man eine 20MHz Clock und die differentiellen Datenleitungen. Wie bekannt kommen nun diese Daten mit der sieben fachen Geschwindigkeit als die Clock. Nun muss ich am Empfänger-Board die 20MHz aufnehmen (zur Synchronisation der Daten), sieben fach schneller machen (DCM) für die Datenaufnahme und dann alles abspeichern (DDR2-Ram, läuft schon). Vllt. noch zum festhalten, das Sender-Board, welches die Kamera "simuliert" läuft eigentlich soweit OK. Die Clock und Datenbits auf dem Oszilloskop sehen plausibel aus. Nun müssen diese im Empfänger aufgenommen und verarbeitet werden, genau hier liegt mein Problem. Wie oben beschrieben nehme ich die Clock folgendermaßen auf: 20MHz (Eingangstakt) -> IBUFGDS -> DCM -> CLK0 -> BUFG -> (ab hier wird er im Progamm verwendet) und die Daten: Daten -> IBUFDS -> (ab hier werden sie im Progamm verwendet) Ich habe auch viel recherchiert und sah, dass viele den IDDR benutzen, um die Daten aufzunehmen und anschließend zu parallelisieren. Wie müsste ich es machen laut euren Erfahrungen. Danke im voraus für alle Beiträge mfg Cihan
Das muss man doch mit ISERDES und OSERDES machen, dann klappt das auch.
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.