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 :)
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
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
Und mal mit dem Standard für den VGA-Stecker vergleichen, Pin9 an Masse muß nicht sein: https://de.wikipedia.org/wiki/VGA-Anschluss
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
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.
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
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 ;)
Matthias schrieb: > So weit meine neuesten Erkenntnisse Kling jetzt gut. Pi-Filter findest du auf alten VGA-Karzen :-)
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...
VGA-Kabel haben 75 Ohm Wellenwiderstand, auch H- und V-Sync. Daher Serienwiderstände von 75 Ohm minus Innenwiderstand der Ausgänge
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)...
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.