Forum: FPGA, VHDL & Co. LVDS durch Spartan3AN durchschleifen


von Daniel M. (bnutzaname)


Lesenswert?

Hallo,

ich möchte verschiedene LVDS-Quellen mit dem Spartan3AN auf eine Senke 
schalten und versuche mich fürs Erste daran, ein LVDS-Signal (clock plus 
4 Kanäle) einfach durch das FPGA durchzuschleifen.

An den Eingängen habe ich IBUFDS für die Datenleitungen und IBUFGDS für 
den Takt eingesetzt. Takt und Daten gebe ich dann per OBUFDS wieder aus. 
Die Ausgangssignale der Eingangsbuffer habe ich schlicht mit den 
Eingangssignalen der Ausgangsbuffer verdrahtet. Am FPGA habe ich 
natürlich LVDS-Pins benutzt und diese im UCF entsprechend auf LVDS_33 
gesetzt und die Terminierung für die Eingänge aktiviert.

Ich habe das Ganze angeschlossen und sehe an meinem Display ein Bild, 
jedoch mit einem guten Satz von Pixel- und Syncfehlern. Ich weiß, dass 
das Display einwandfrei funktioniert und ebenso die LVDS-Quelle. Ich 
denke mir, dass ich mir die Sache VHDL-mäßig vielleicht zu einfach 
gemacht habe und hoffe dass der Fehler in meiner VHDL-Beschreibung 
liegt. Kann mir da jemand weiterhelfen und einen Tipp geben?

von Olga (Gast)


Lesenswert?

Ich vermute eher, dass die Fehler in den Timing Constraints liegen. Wie 
sehen die bei dir aus?

von Sigi (Gast)


Lesenswert?

Verstehe ich das so richtig: Du willst LVDS-Signale eines
TFTs (wenn auch ein "Kleiner") einfach so durch einen
FPGA leiten? Das wird so nicht gehen, da der Spartan3
dafür bzgl. IO->IO zu langsam ist, d.h. die Signale werden
zu langsam transportiert, bei z.B. 1024x768 hast du schon
>=400MHz-500MHz. Und ob das Clock-Signal per BUFGDS oder
"nur" per BUFDS rein/rausgeleitet wird ist irrelevant.

von Daniel M. (bnutzaname)


Lesenswert?

Vielen Dank für Eure Antworten!

Ich bin auf dem LVDS-mit-FPGA-Gebiet noch Anfänger und hatte ehrlich 
gesagt gar nicht an die Timing Constraints gedacht. Ich mache mich da 
grad dran.

Die Bilddaten sind ja auf vier Kanäle aufgeteilt. Und dafür dass ich 
noch keine Constraints eingefügt habe sieht das Bild aber schon 
erstaunlich gut aus.

von Sigi (Gast)


Lesenswert?

Daniel M. schrieb:
> Die Bilddaten sind ja auf vier Kanäle aufgeteilt. Und dafür dass ich
> noch keine Constraints eingefügt habe sieht das Bild aber schon
> erstaunlich gut aus.

Das überrascht mich ein wenig, aber je nach Abstand zwischen Input-
und Output-Zellen kann schon ein erkennbares Bild rauskommen.
Von Pin zu Pins hast du schonmal ein paar ns, kritisch ist nur der
Versatz der LVDS-Signal untereinander. Da die Signale nur
durchgeschleift werden, ist vermutlich auch das Taktverhältnis
eines Signals ungestört.

Was heisst "erstaunlich"? Sind Zeilen oder das ganze Bild teilweise
verschoben, gibt es Fehlfarben?

von Daniel M. (bnutzaname)


Lesenswert?

Ich habe etliche sich bewegende grüne und blaue Striche im Bild und das 
Bild springt vertikal zwischen zwei leicht versetzten Positionen hin und 
her.

Wie bekomme ich denn das mit dem Versatz der LVDS Leitungen 
untereinander am besten in den Griff?

von Dussel (Gast)


Lesenswert?

Daniel M. schrieb:
> Wie bekomme ich denn das mit dem Versatz der LVDS Leitungen
> untereinander am besten in den Griff?
Spontan würde ich sagen, durch Timing-Constraints. Du sagst dem Router, 
wie viel Zeitdifferenz maximale zwischen den Signalen liegen darf und er 
versucht das hinzukriegen. Entweder es klappt oder er sagt dir, dass es 
nicht klappt.

von Schlumpf (Gast)


Lesenswert?

Dussel schrieb:
> Daniel M. schrieb:
>> Wie bekomme ich denn das mit dem Versatz der LVDS Leitungen
>> untereinander am besten in den Griff?
> Spontan würde ich sagen, durch Timing-Constraints. Du sagst dem Router,
> wie viel Zeitdifferenz maximale zwischen den Signalen liegen darf und er
> versucht das hinzukriegen. Entweder es klappt oder er sagt dir, dass es
> nicht klappt.

Vermutlich gar nicht so einfach.
Denn es liegt nicht an der absoluten Laufzeit durch den Chip, sondern an 
dem Versatz der Signale untereinander.
Und diesen Skew zu constrainen ist nahezu nicht möglich.

Und wenn du dann den Multiplexer dazu baust, wird das Ganze noch 
hässlicher. Denn dann sind auf den Pfaden auch noch LUTs, durch die 
deine Signale durch müssen.

Ich würde mal sagen: Wenn es dir gelingt, dann hast du einfach nur 
zufällig Glück gehabt.

von Sigi (Gast)


Lesenswert?

Mit Timing-Constraints kriegst du wahrscheinlich keine
besseren Ergebnisse hin, denn die beziehen sich ja auf
Sample/Hold-Zeiten bzgl. Clock-Flanken. Und die gibt's
in deinem Ansatz nicht.

Eine einfach Lösung: Die Signale decodieren und dann
zum Senden wieder encodieren. Leg dazu dein Clock-Signal
auf einen Clock-fähigen Eingang. Dieser Treibt dann eine
PLL/DCM. Die DCM generiert dann ein Sample-Clock-Signal
mit 7-facher Frequenz (bei 1024er Auflösung etwa 350MHz,
was bei einem Spartan3 noch geht) und eine Logic-Clock
mit 3.5-Facher Frequenz (175 MHz). Damit werden dann die
4  LVDS-Signale gesampelt, auf 175MHz runtertransformiert,
decodiert und am Ausgang wieder encodiert und
hochtransformiert, anschliessend ausgegeben. Fehlt nur
noch das Clock-Ausgangssignal. Aber das läss sich auch
relativ einfach generieren.
Vorteil: Du hast Zugriff auf die Farbvektoren und kannst
sie beliebig ändern, oder du kannst zwischen verschiedenen
LVDS-Eingängen hin- und herschalten etc.
Hättest du einen Virtex4/Höher, dann könnte die komplette
De/Encodierung entfallen.

von Daniel M. (bnutzaname)


Lesenswert?

Ich hatte befürchtet, dass Decodieren und wieder Encodieren die Lösung 
werden würde. Nur komme ich da dann leider nicht mit der Auflösung hin, 
die ich gerne hätte.

Es gibt also keine Möglichkeit, das ordentlich zu constrainen und ich 
sollte am besten einen anderen Ansatz wählen?

von Sigi (Gast)


Lesenswert?

Welche Auflösung willst du haben?

Ich habe mal mit einem Spartan3 ein TFT mit 1366er
Auflösung angesteuert, vom Timing her nach Oben hin
noch reichlich Platz. 1920er Auflösung ist aber
nur mit dem höchsten Speed-Grade möglich (plus
keinen Tricksereien).
Und was man bein Spartan nich vergessen darf: er
hat sowohl beim Eingang als auch beim Ausgang
DDR-FFs, d.h. du must nur mit der halben Frequenz
arbeiten.

von FPGA-Neuling (Gast)


Lesenswert?

Sigi schrieb:
> Und was man bein Spartan nich vergessen darf: er
> hat sowohl beim Eingang als auch beim Ausgang
> DDR-FFs, d.h. du must nur mit der halben Frequenz
> arbeiten.
Wie verwendete man diese Funktion in der Praxis? Wie verarbeitet der/das 
FPGA dann die Daten intern? Doppelt, parallel?

von Sigi (Gast)


Lesenswert?

FPGA-Neuling schrieb im Beitrag #4130813:
> Wie verwendete man diese Funktion in der Praxis? Wie verarbeitet der/das
> FPGA dann die Daten intern? Doppelt, parallel?

Jeder Hersteller mach das anders. Bei Xilinx z.B. sind alle 
FPGA-internen
Komponenten dokumentiert, schau mal in UG607 (auf der Xilinx-Doc-Seite)
"Spartan-3 Libraries Guide for HDL Designs", sowas gibt's für jede
Familie.

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
Noch kein Account? Hier anmelden.