VGA-Decodierung - Umgang mit Toleranzen

Aktualisieren:

Der VGA-Simulator ist in Betrieb. Sie können Ihre eigenen Designs simulieren oder einfach die Beispieldatei verwenden, um zu sehen, wie es funktioniert. Ich habe auch einen Blog-Beitrag geschrieben , um allen den Einstieg in die Verwendung für ihre eigenen VHDL-Designs zu erleichtern.


Ich mache einen VGA-Simulator oder virtuellen Monitor, weil Xilinx zu lange braucht, um VHDL zu synthetisieren (auf meinem PC und im Allgemeinen für große Projekte). Mit diesem VGA-Simulator kann ich einfach meine Testbench ausführen, die in einer Datei protokolliert, während sie in einem normalen Simulator wie Isim ausgeführt wird, und diese Protokolldatei dann in meinem VGA-Simulator verwenden, um die Frames zu generieren.

Der VGA-Simulator dekodiert hsync, vsync und rgb (5 Hauptsignale), um die Frames zu erzeugen.

Gibt es eine Möglichkeit, die Auflösung oder Pixeltaktrate nur aus den 5 Hauptsignalen zu erhalten? Im Moment habe ich nur einige Textfelder, die Sie manuell eingeben müssen (siehe Formular). Ich brauche die Pixeltaktrate, um zu verfolgen, an welchem ​​​​Pixel das System arbeitet.

Textfeld für Auflösung und px-Taktrate

Ich gehe davon aus, dass jeder Monitor 640 x 480 bei 60 Hz als Standardeinstellung für VGA verwendet, weil ich an nichts herumfummeln muss, damit es funktioniert. Ich verstehe, dass es einige EDID-Pins und einige neuere serielle Schnittstellen gibt, die spezifiziert sind, aber werden sie tatsächlich verwendet, um eine andere Auflösung oder fps/Hz zu bestimmen? Auf dem Basys 2 sind sie nur geerdet.

Mein Simulator funktioniert im Moment hervorragend, berücksichtigt aber nicht, back porchdass ich oben links Leerzeichen und unten rechts einige abgeschnitten habe. Dies liegt daran, dass ich nur nach einer steigenden Flanke in hsync und vsync suche und mit der Erfassung beginne. Dies ist keine große Sache und leicht zu beheben, aber ich bin mir nicht sicher, welchen Wert ich für back porchverwenden soll, um mit einer Vielzahl von Protokolldateien von Personen zu arbeiten.

Mein VHDL-Design (basierend auf diesem Design ) hat back porch48 Taktzyklen und dieses Dokument sagt zum Beispiel, dass es 45 sein sollte, und dieses sagt 48. Was ist die richtige Toleranz für die back porchoder die richtige Art der Synchronisierung, um diese Diskrepanzen zu vermeiden?

Natürlich ist ein Monitor so konzipiert, dass dies alles berücksichtigt wird, aber was sind die richtigen Wege, um mit der Toleranz nicht nur bei der Pixeluhr umzugehen, sondern auch bei der Anzahl der Zyklen, die jeder Prozess benötigt (Front Porch, Back Porch, Auflösung, fps)?

Ein Beispiel für eine Diskrepanz: Mein Design teilt einfach den 50-MHz-Takt auf dem Basys 2 durch zwei, um einen 25-MHz-Pixeltakt zu erhalten, um den VGA anzusteuern, wenn er überall auf 25,175 Hz spezifiziert ist, aber natürlich müssen Sie Ihren Pixel setzen Uhr in der Form, so dass es für mein Design im Moment kein Thema ist.


Hier ist nur ein schönes Diagramm des Timings von hsync und vsync (nur eine gute Referenz):

VGA-Timing

Es mag hilfreich sein, sich daran zu erinnern, dass früher Video durch Lenken eines Elektronenstrahls erzeugt wurde. Synchronimpulse waren ungefähr jene Intervalle, in denen der Strahl nach links (HS) oder oben (VS) zurückgeschnappt werden konnte. Die „Verande“ sind nichts weiter als ein Rand, damit der Strahl wieder in den sichtbaren Anzeigebereich gelangen kann. Porch-Zeiten passen grundsätzlich die Zentrierung des Bildes an. Holen Sie sich die richtige Gesamtzeilenzeit, und Sie können sie mehr oder weniger nach Belieben zwischen den Poren und den aktiven Pixeln aufteilen.
@JustJeff Ich wusste, dass eine CRT mit einem Elektronenstrahl arbeitet und ihn über den Bildschirm scannt, aber es hat nicht ganz geklickt, dass das Signal, das ich an den Bildschirm sende, explizit die analoge Schaltung im Monitor steuert, anstatt es zu interpretieren und auszustrahlen ( der strahl ist nur die technologie, die den bildschirm anstelle eines lcd betreibt). Wenn Sie die Positionsoption auf dem Monitor ändern, ändern Sie im Wesentlichen die back porchWerte, und ich habe ein paar Bereichseingaben hinzugefügt, damit die Leute ihr Signal ausrichten können.
@JustJeff: Obwohl VGA normalerweise über separate Drähte für die Synchronisierungssignale ausgegeben wird, war es kaum ungewöhnlich, es in Monitore einzuspeisen, die erwarten, dass die Synchronisierung dem "grünen" Signal überlagert wird. Das Extrahieren von Sync aus einem zusammengesetzten Signal erfordert, dass das Signal vor dem Sync-Impuls eine konsistente stabile Spannung aufweist; die Veranda stellt sicher, dass dies der Fall ist. Wenn VGA keine vordere Veranda enthalten hätte, müssten VGA-zu-3-Draht-Adapter die horizontale Synchronisierung verzögern, um eine hinzuzufügen.
@JustJeff: Das "analoge" Verhalten von Monitoren ermöglicht es Monitoren (insbesondere monochromen), eine Vielzahl von Auflösungen "perfekt" anzuzeigen, im Gegensatz zu LCD-Bildschirmen, die eine bestimmte feste Auflösung haben und jede andere Auflösung nach oben oder unten skalieren müssen.
@supercat - versuche nur, der Situation eine Perspektive zu verleihen. In der Elektronik finden wir oft scheinbar seltsame Schnittstellen, die ungerade Teile der OBE-Technologie bewahren. Vielen Dank für die Erweiterung.

Antworten (1)

EDID wird unter anderem verwendet, um den Monitor nach den gewünschten Timings abzufragen. Es wird nicht zur Übertragung von Videoinformationen verwendet.

Ich schätze, es ist so lange her, dass sich niemand daran erinnert, aber VGA-Monitore hatten damals Anpassungen für die Bildposition auf der CRT. Sie können es nach links oder rechts, oben oder unten verschieben oder horizontal oder vertikal skalieren. Fortgeschrittenere Monitore hatten zusätzliche Anpassungen. Mit diesen können Sie das verwendete Timing, das lokale Magnetfeld, das das Bild verzerren könnte, usw. kompensieren.

Was diese Anpassungen hinter den Kulissen tun, ist natürlich die Anpassung der Timing-Parameter. Sie waren notwendig, weil das VGA-Signal nicht explizit sagt, wie viel Austastzeit vorhanden ist. Wie Sie bemerkt haben, gibt es einige allgemeine Konventionen, und der Monitor kann (über EDID) Unterstützung für bestimmte Timings ankündigen, aber es ist nicht erforderlich, dass diese Timings an den Monitor gesendet werden.

Was Sie tun können, und was LCD-Monitore tun, die noch über VGA-Schnittstellen verfügen, wenn Sie die Taste "Auto Adjust" drücken, ist, die Austastzeit zu erraten, indem Sie einfach die R-, G- und B-Signale betrachten. Diese sollten für die Austastzeit schwarz sein, und wahrscheinlich sind sie sonst nicht schwarz. Natürlich könnte jemand auf einen schwarzen Bildschirm schauen, und dieser Ansatz wird nicht funktionieren.

Ebenso glaube ich nicht, dass das VGA-Signal irgendetwas enthält, das Ihnen sagt, wie hoch die Auflösung ist. Sie können es erraten, indem Sie nach den Rändern zwischen den Pixeln suchen und diese zeitlich abstimmen, und das ist wiederum das, was LCD-Monitore tun. Denken Sie jedoch daran, dass VGA ein analoges Signal ist, das für die Anzeige auf einem analogen Gerät entwickelt wurde. Es hat kein Konzept von "Pixeln".

Ahh, ich habe gerade rübergeschaut und obwohl der Monitor, den ich verwende, keine Knöpfe hat, hat er eine Optionstaste, um die horizontale und vertikale Position, Form und den Zoom anzupassen. Ich erinnere mich, dass andere Monitore, die ich früher besaß, Knöpfe hatten, aber das war, als ich klein war und natürlich gesagt wurde, ich solle mich nicht damit anlegen. Sieht so aus, als müsste ich einige weitere Textfelder/Bereichseingaben für diese Parameter hinzufügen, damit die Leute ihre Frames feinabstimmen können. Danke!