Forum: Platinen VGA Karte für FPGA&Co, wirklich so einfach?


von Matthias (Gast)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,

Anbei gibt es den Screenshot für einen kleinen VGA-Adapter welchen ich 
für ein Digilent Arty FPGA-Board bauen möchte.

Als RAMDAC habe ich einen ADV7123 in der 140MHz Version.

Ich habe bereits etwas an den Pins der Ports JA bis JD des Boards 
gemessen und festgestellt dass die Timings an JB und JC mindestens 
Monocrom (auf Grün) für Auflösungen bis 1280x1024@75Hz reichen sollten.
Bei Nutzung aller 3 Farben kann es sein dass diese nicht ganz erreicht 
wird.

Jedenfalls stellt sich mir die Frage, ob ich noch mehr als in diesem 
Schaltplan zu sehen ist benötige. Denn es scheint mir recht wenig.
Also funktioniert dass so einfach?

Sollte man noch etwas zusätzlich vorsehen?

Wäre toll wenn jemand seine Erfahrung einbringen könnte :)

von Karl-Peter Pinsel-Kleckus (Gast)


Lesenswert?

Matthias schrieb:
> Sollte man noch etwas zusätzlich vorsehen?

Das ist schon vielzuviel für ein FPGA-VGA Adapter, da braucht es nur 
eine Handvoll Widerstande:

Beitrag "VGA: R2R und Transistor-Treiberstufe Entwurf"
Beitrag "VGA-Ausgang mit FPGA DE2-115 ansteuern"


Zumal klassisches VGA keine 3x10bit Farbe hat, sondern lediglich 8 bit. 
Die Farbtiefe wird generell eher über- als unterschätzt:
https://en.wikipedia.org/wiki/Color_depth#Comparison

von Frank K. (fchk)


Lesenswert?

Ich würde in die eingehenden Datenleitungen (RGB und Steuerleitungen) 
noch Serienwiderstände setzen, damit beim Schalten weniger Störungen 
entstehen. Am Besten sowas hier

https://www.bourns.com/docs/product-datasheets/catcay.pdf?sfvrsn=eae9f7ea_22

das lässt sich gut layouten und hat einie geringe Induktivität. 
Widerstandswert irgendwas zwischen 10 und 100 Ohm, mein Standardwert 
sind immer so 22 oder 33 Ohm.

Dann: Multilayer-Leiterplatte, durchgehende Groundplane.

Leitungen möglichst gleich lang machen und dabei auch die Leitungslängen 
auf dem FPGA-Board mit einrechnen. Es zählt die Länge FPGA-Pin zu 
DAC-Pin.

H/VSYNC und Pixelclock mit genügend Abstand routen.

Dann sollte das gehen.

fchk

von Karl-Peter Pinsel-Kleckus (Gast)


Lesenswert?

Und mal mit dem Standard für den VGA-Stecker vergleichen, Pin9 an Masse 
muß nicht sein:
https://de.wikipedia.org/wiki/VGA-Anschluss

von Magnus M. (magnetus) Benutzerseite


Lesenswert?

Karl-Peter Pinsel-Kleckus schrieb:
> Zumal klassisches VGA keine 3x10bit Farbe hat

-> richtig

> sondern lediglich 8 bit.

-> falsch

VGA war in der Lage 262144 Farben darzustellen (allerdings gleichzeitig 
nur eine Auswahl von 256 "Farben" gleichzeitig). Jede Grundfarbe wurde 
also nur mit 2^6 Bit (64 Stufen) aufgelöst.


Was mich bei Matthias' Konzept irritiert ist dass er

a) unnötig viele Bits pro Farbe einsetzen will
b) diese Bits auch noch in unterschiedlicher Bitbreite ausführen will 
(wie folgt:)
1
Bit:   9876543210
2
Rot    OOOOOOOOO-
3
Grün   OOOOOOOOOO
4
Blau   OOOOOOOO--
5
6
O  ==  Bit verwendet
7
-  ==  Bit nicht verwendet

Die nicht verwendeten Bits R0, B0 und B1 werden noch nicht einmal auf 
einen definierten Pegel gelegt.

: Bearbeitet durch User
von Matthias (Gast)


Angehängte Dateien:

Lesenswert?

Karl-Peter Pinsel-Kleckus schrieb:
> Zumal klassisches VGA keine 3x10bit Farbe hat, sondern lediglich 8 bit.
> Die Farbtiefe wird generell eher über- als unterschätzt:
> https://en.wikipedia.org/wiki/Color_depth#Comparison

Da hast du wohl recht, und da sowieso nicht genug Pins zur vefügung 
stehen um alle 3 Farben voll auszustatten habe ich sie nun auf 8Bit 
reduziert.

Frank K. schrieb:
> Ich würde in die eingehenden Datenleitungen (RGB und Steuerleitungen)
> noch Serienwiderstände setzen, damit beim Schalten weniger Störungen
> entstehen. Am Besten sowas hier
>
> https://www.bourns.com/docs/product-datasheets/catcay.pdf?sfvrsn=eae9f7ea_22
>
> das lässt sich gut layouten und hat einie geringe Induktivität.
> Widerstandswert irgendwas zwischen 10 und 100 Ohm, mein Standardwert
> sind immer so 22 oder 33 Ohm.

Hab ich nun, Passt das so?

Frank K. schrieb:
> Dann: Multilayer-Leiterplatte, durchgehende Groundplane.

Genau so habe ich vor es zu machen, die Bildqualität soll schon recht 
gut werden. Deshalb möhcte ich auich keine Widerstandsteiler verwenden, 
da durch den DAC sämtliche Leitungsunterschiede nochmal ausgeglichen 
werden und die Wandlung da drin auch bei hohen Frequenzen wohl recht gut 
ist.

Frank K. schrieb:
> Leitungen möglichst gleich lang machen und dabei auch die Leitungslängen
> auf dem FPGA-Board mit einrechnen. Es zählt die Länge FPGA-Pin zu
> DAC-Pin.

Darauf werde ich achten, jedoch sampelt der DAC mit dem rising_edge(clk) 
damit muss nur das Timing´eingehalten werden können und das sollte auf 
den schnellen Ports JB + JC bis 140MHz möglich sein.

Frank K. schrieb:
> H/VSYNC und Pixelclock mit genügend Abstand routen.

Habe ich nun, auch hab ich die I2C Signale nun noch herausgeführt.

Karl-Peter Pinsel-Kleckus schrieb:
> Und mal mit dem Standard für den VGA-Stecker vergleichen, Pin9 an Masse
> muß nicht sein:
> https://de.wikipedia.org/wiki/VGA-Anschluss

Stimmt, jetzt ist er offen, denn 5V hab ich leider nicht auf der Karte.

von Matthias (Gast)



Lesenswert?

Die Leitungslänge würde ich gerne besser ausgleichen. Denke aber dass es 
so vermutlich reicht.

Vielleicht mache ich noch ein Paar Via's drauf, sonst denke ich es ist 
so ganz OK.

Für verbesserungsvorschläge bin ich Offen ;)

Bin schon gespannt wie gut es am Ende tatsächlich funktioniert, mit den 
16Mio Farben und welche Auflösungen bei guter Bildqualität tatsächlich 
machbar sind :)

von Sigi (Gast)


Lesenswert?

Matthias schrieb:
> Die Leitungslänge würde ich gerne besser ausgleichen. Denke aber dass es
> so vermutlich reicht.

Bei 140MHz brauchs keine Anpassung, der ADV7123
sampelt nur alle 7ns. Wenn du also im FPGA Clock
und Signale auf der Zeitachse ausreichend
"auseinanderhälst", dann reichst das.

Matthias schrieb:
> Für verbesserungsvorschläge bin ich Offen ;)

Dein nahzukünftiges ICH wird dich auf Knien anflehen,
doch 10 Bits pro Farbkanal zu verwenden. Schon bei
1024x768er Auflösung sieht man die 8 Bits!!!! Ich
hoffe, du hast dazu noch genug Pinreserven.

von MaWin (Gast)


Lesenswert?

Matthias schrieb:
> Jedenfalls stellt sich mir die Frage, ob ich noch mehr als in diesem
> Schaltplan zu sehen ist benötige

Ich finde HSYNC und VSYNC direkt aus dem FPGA kritisch, mangelnde EMI 
Filterung an RGB, zudem unterstützt du kein I2C DisplayData DDC 
http://www.righto.com/2018/03/reading-vga-monitors-configuration-data.html

von Matthias (Gast)


Lesenswert?

Sigi schrieb:
> Matthias schrieb:
>> Die Leitungslänge würde ich gerne besser ausgleichen. Denke aber dass es
>> so vermutlich reicht.
>
> Bei 140MHz brauchs keine Anpassung, der ADV7123
> sampelt nur alle 7ns. Wenn du also im FPGA Clock
> und Signale auf der Zeitachse ausreichend
> "auseinanderhälst", dann reichst das.

So sehe ich es bei den Leitungslängen und 7NS auch.

Sigi schrieb:
> Matthias schrieb:
>> Für verbesserungsvorschläge bin ich Offen ;)
>
> Dein nahzukünftiges ICH wird dich auf Knien anflehen,
> doch 10 Bits pro Farbkanal zu verwenden. Schon bei
> 1024x768er Auflösung sieht man die 8 Bits!!!! Ich
> hoffe, du hast dazu noch genug Pinreserven.

Das geht leider nicht, es fehlen die Pin's aber aber der Unterschied 
zwischen 8 und 10Bit wird wohl kaum mit bloßem Auge erkennbar sein.

MaWin schrieb:
> Ich finde HSYNC und VSYNC direkt aus dem FPGA kritisch, mangelnde EMI
> Filterung an RGB, zudem unterstützt du kein I2C DisplayData DDC
> http://www.righto.com/2018/03/reading-vga-monitors-configuration-data.html

Für HSYNC+VSNC sehe ich keine einfache andere Lösung zu deren Erzeugung, 
man könnte allenfalls einen Buffer vorsehen.
Oder welche Alternative gibt es?

Zur EMI-Filterung, da finde ich grade kein Dokument welches beschreibt 
wie hier zu filtern ist. Dass muss ja dann auch noch auflösungsabhängig 
geschehen?

I2C DisplayData DDC sollte damit doch unterstützt werden?
I2C leitungen mit den Pull-PU's sind ja vorgesehen.
Stimmt dass so nicht? Müssen die Pull-UP's auf 5V gehen?

Bis dahin schonmal danke für die Hinweise :)

von Matthias (Gast)


Lesenswert?

Für die Sync-Signale wäre wohl ein Buffer mit 15 bis 55Ohm (je nach 
Quelle) Ausgangsimpedanz ideal.

Für die EMI-Filterung brauche ich wohl ein PI-Filter, welches dann 
sinvollerwiese wohl auf der Maximalen Sample-Frequenz seine 
Grenzfrequenz haben sollte.

Der DDC braucht 5V für den I2C und somit einen Level-Shifter.

Die Ideale Lösung um alle 3 Wünsche zu verwirklichen ist der MAX9511.
(Nicht so leicht zu bekommen...)

So weit meine neuesten Erkenntnisse ;)

von MaWin (Gast)


Lesenswert?

Matthias schrieb:
> So weit meine neuesten Erkenntnisse

Kling jetzt gut.

Pi-Filter findest du auf alten VGA-Karzen :-)

von Matthias (Gast)


Angehängte Dateien:

Lesenswert?

Super :)

Da ich aber sonst Pi-Filter + Buffer + I2C Spannungsumsetzer brauche, 
habe ich doch vor, die Ideallösung, den MAX9511 zu nutzen.

So habe ich den Schaltplan nun nach Bild angepasst.
Auch kann damit nun auch die Monitor-Info nach dem ID-System ausgelesen 
werden und die Slewrate des MAX9511 durch den MCP4018 gesteuert werden.

Nun habe ich noch eine eher theoretische Frage zum ADV7123. Dieser hat 
im Datenblatt eine Tabelle mit den SFDR's. Diese sind für Double-Ended 
immer um einige sb bessser.

Andererseits sind für VGA separate Masseleitungen für jede Farbe, für 
die SYNC-Pulse und auch für den DDC vorgesehen.

Sollten nun die Massen für RGB idealerweise aus den invertierten RGB 
Ausgängen des ADV7123 erzeugt werden?
Wäre dass dann Double-Ended?
Braucht mann dafür dann auch PI-Filter?

Wie wird dass mit den separaten Massen, auch für DDC und Sync-Signale 
auf Grafikkarten realisiert?

Wäre toll wenn jemand da mehr wüsste?

Verbesserungsvorschläge für die Schaltung sind auch sehr erwünscht...

von Thomas R. (analogfreak)


Lesenswert?

VGA-Kabel haben 75 Ohm Wellenwiderstand, auch H- und V-Sync. Daher 
Serienwiderstände von 75 Ohm minus Innenwiderstand der Ausgänge

von Matthias (Gast)


Lesenswert?

Thomas R. schrieb:
> VGA-Kabel haben 75 Ohm Wellenwiderstand, auch H- und V-Sync. Daher
> Serienwiderstände von 75 Ohm minus Innenwiderstand der Ausgänge

Stimmt, da kann man noch welche vorsehen, jedoch hat der Treiber bereits 
35 bis 85 (typical 55) Ohm Ausgangswiderstand.

von Bernd (Gast)


Lesenswert?

Matthias schrieb:
> jedoch hat der Treiber bereits
> 35 bis 85 (typical 55) Ohm Ausgangswiderstand
Dann brauchst Du halt nur noch 20 Ohm zusätzlich (typical)...

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.