Forum: FPGA, VHDL & Co. VHDL LVDS Display Hilfe


von Guenther (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

ich versuche derzeit ein Display mit vier LVDS-Daten-Kanälen und einem 
CLK-Kanal mit einem Zynq in Hardware anzusteuern; das dazugehörige 
Timing-Diagramm findet ihr im Anhang. Ich hänge aber etwas an der 
Takterzeugung.
Den schematischen Aufbau findet ihr im Blockdiagramm. Für die LVDS 
Signale wollte ich die OSERDES-Elemente des Zynqs nutzen. Hierzu habe 
ich mir einen 7 mal schnelleren Takt für die serielle Schnittstelle 
erzeugt (35.11 * 7 --> ~245.77 MHz). Aus diesem Takt erzeuge ich mir 
mittels eines Zählers den Pixelclock von 35.11 MHz (zwei Serial-Takte 
an, drei aus, zwei an). beide Takte führe ich auf jeweils einen BUFG.

Für die HYNC-, VSYNC- und DE-Signale zähle ich nur noch den Pixelclock.
Das ganze soll nun in einem Datengenerator zusammengesetzt werden, was 
soweit auch funktioniert.

ABER: Die Ausgabe des seriellen Daten-Signals erfolgt ja 
Phasenverschoben zum Pixelclock. Mein Datengenerator müsste also 
ebenfalls Phasenverschoben meine Daten auf die OSERDES-Elemente geben. 
Wie setze ich soetwas jetzt am geschicktesten um? Nutze ich einfach 
einen kleinen Signalgeber, der bei korrekter Phasenlage dem 
Datengenerator die neuen Signale ausgeben lässt?
Oder denke ich in die falsche Richtung und mein Taktkonzept ist falsch 
aufgebaut?


Viele Grüße

von Micha (Gast)


Lesenswert?

Das einfachste ist, Du nutzt für den LVDS-Clk auch den Serdes.
Packe einfache die Bilddaten in vier Schieberegister, die Du mit dem
schnellen clk rausschiebst und dem langsamen clk neu befüllst.
Das gleiche machst Du mit dem Clk für das Display mit einem 5. Register.
Hier beschreibst Du das Register jeweils mit "1100011" und schiebst das 
dann raus.

Gruß Micha

von Christian R. (supachris)


Lesenswert?

Micha schrieb:
> Das einfachste ist, Du nutzt für den LVDS-Clk auch den Serdes.

So ist es. Schau dir die XAPP1064 bzw. XAPP585 an, da ist das drin.

von Sigi (Gast)


Lesenswert?

Am Besten alle Signale (inkl. Clk) in
IO-FFs legen, dann die seriellen Daten
per DDR-FFs ausgeben.

In Deiner Skizze hast Du das
Clk-hi-lo-Verhältnis von 4:3, oft findet
man aber auch 1:1, d.h. die "mittleren"
Daten liegen genau auf der fallenden
Flanke, und das passt eben gut zu DDR-FF.
Per IO-Delays kannst Du dann die Phasen
zwischen Signalen und Clock einstellen.

von Guenther (Gast)


Lesenswert?

Hallo,

schon mal vielen Dank für eure Antworten.

Also wenn ich euch richtig verstehe, soll ich sowohl für den Takt als 
auch für die Daten SerDes nutzen. An den Takt-SerDes lege ich dann das 
Bitmuster von Micha an. Dann erzeuge ich mir meinen 35.11 MHz und 245.77 
MHz Takt im FPGA. Den 35.11 MHz Takt nutze ich dann um die 
Schieberegister der SerDes zu aktualisieren und den 245.77 MHz Takt für 
die seriellen Daten zum Display.

Dazu hätte ich aber noch eine generelle Frage. Bei der Übertragung des 
ersten Pixels würde das Display nun ja eine Flanke sehen, und dann für 
2*(TClk/7) ein High-Signal. Ist das dem Display egal? Oder erwartet es 
eine Flanke und dann für 4*(TClk/7) ein High-Signal?
Mehr als die Abbildung im ersten Post lässt sich das Datenblatt des 
Displays bzgl. der Timings nicht aus.


Viele Grüße

von Christian R. (supachris)


Lesenswert?

Guenther schrieb:
> Dazu hätte ich aber noch eine generelle Frage. Bei der Übertragung des
> ersten Pixels würde das Display nun ja eine Flanke sehen, und dann für
> 2*(TClk/7) ein High-Signal. Ist das dem Display egal? Oder erwartet es
> eine Flanke und dann für 4*(TClk/7) ein High-Signal?
> Mehr als die Abbildung im ersten Post lässt sich das Datenblatt des
> Displays bzgl. der Timings nicht aus.

Das Bitmuster, was dann den Bit-Takt / 7 darstellt, kannst du doch frei 
definieren. Wichtig ist, dass du alle OSERDES am gleichen Takt und 
gleichen Reset hängen hast, dass die synchron laufen.

: Bearbeitet durch User
von Guenther (Gast)


Lesenswert?

Hallo Christian,

verstehe ich da jetzt etwas falsch?
Dem Display wird doch der Takt in Form des Bitmusters "1100011" 
übertragen. Im Datenblatt findet sich die Abbildung aus dem ersten Post 
("Timing.png"). Hier sieht man zum Teil noch die Übertragung des 
vorherigen Pixels. Noch bevor die serielle Übertragung des vorherigen 
Pixels fertig ist, liegt bereits eine neue Taktflanke an (OLVCLK). 
Synchronisieren sich die Displays auf diese Taktflanke oder werden eh 
alle Signale mit einer festen Frequenz abgetastet?.
Falls ersteres, dann kommen wir wieder zu meinem Verständnisproblem. 
Braucht das Display einfach nur das Muster "1100011" oder benötigt es 
die Taktflanke und dann ein Muster nach "1111000"? Dann müsste ich die 
Daten-SerDes ja quasi 2*(TClk/7) später starten.

Tut mir Leid, ich weiß leider nicht, wie ich es besser beschreiben soll. 
Vielleicht stelle ich es mir auch viel zu kompliziert vor.


Viele Grüße

von Christian R. (supachris)


Lesenswert?

Laut dem Bild wechselt der Takt den Pegel zum gleichen Zeitpunkt wie die 
Daten. Dazu ist extra der senkrechte Strich 2 Flanken vor dem Ende des 
Pixels da eingezeichnet. Durch die /7 Frequenz kann der auch gar nicht 
zum Abtasten der Daten herangezogen werden. Ich vermute eher, im Display 
wird damit eine PLL gespeist und das "Taktsignal" wird als eine Art 
Framesync für jeweils ein Pixel benutzt. Genau so machen das auch z.B. 
serielle ADCs wie der LTC2174 o.ä.
Du kannst also den Takt genauso wie die Daten behandeln, nur dass der 
ein statisches Muster hat. 1100011 ist schon richtig dann.

von Guenther (Gast)


Lesenswert?

Super, vielen Dank für die Erklärung. Und ich habe mir von Anfang an 
Gedanken darüber gemacht, warum da diese Phasenverschiebung ist und wie 
man das dann bei der Datenerzeugung berücksichtig. Wenn dem Display 
wirklich nur das Bitmuster "1100011" genügt, dann passt alles.


Vielen Dank!

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.