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 :)
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
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.
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.
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 :)
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.
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 :)
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 ;)
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...
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.
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)...