VGA-Digitizer mit FPGA (Eingang, nicht Ausgang)

Die Erzeugung eines VGA-Signals mit einem FPGA wurde von so vielen Menschen durchgeführt, dass es sich um ein gemeinsames Starterprojekt handelt. Was ich nicht finden kann, sind Informationen zum Decodieren eines VGA-Signals mit einem FPGA, um beispielsweise ein Videoframe im Speicher zu erfassen. Angenommen, es gibt nichts als R, G, B, VSYNC, HSYNC, mit dem man arbeiten kann, kein DDC. Angenommen, das Konvertieren von analogem RGB in digitales kann durchgeführt werden.

VSYNC gibt Ihnen die Aktualisierungsrate und die Anzahl der HSYNCs zwischen jedem gibt Ihnen die Anzahl der Zeilen. Nehmen wir an, es ist einfach, 525 Zeilen zu zählen, und die Bildwiederholfrequenz beträgt 60 Hz. Dieser Teil ist nicht schwer.

Wie legen Sie die Anzahl der Pixel in jeder Zeile und damit den Pixeltakt fest? Geht es darum, verschiedene bekannte Werte (aus einer Tabelle wie VGA-Timing oder der VESA-DMT-Spezifikation) basierend auf den bekannten Informationen (Linien, Aktualisierung) anzupassen und nur zu sehen, welche Fälle zu einem HSYNC und einer vorderen / hinteren Veranda führen? erwartete Orte, die eine bekannte Pixeluhr zum Abtasten von Pixeln angeben?

Antworten (1)

Die Digitalisierung von Videos erfolgt am besten mit einem dafür vorgesehenen Chip. Viele Hersteller haben Chips, die Triple-Video-ADC enthalten. Diese nehmen die analogen RGB- und digitalen HS/VS-Synchronisierungen auf. Sie erzeugen den Pixeltakt mit einer PLL basierend auf dem HS-Signal, basierend darauf, wie viele Pixel pro Zeile Sie haben möchten. Es ist also die Aufgabe des Programmierers, das möglicherweise verwendete Videoformat anhand der Informationen des Chips zu identifizieren und die Parameter so zu konfigurieren, dass Sie die gewünschte Ausgabe für dieses Format erhalten. Zu den verfügbaren Erkennungsparametern gehören normalerweise Zeilen pro Frame, Synchronisationspolaritäten und eine Möglichkeit, die HS- oder VS-Rate in einigen Einheiten zu kennen. Wenn vom Chip keine Erkennungsinformationen verfügbar sind, muss MCU/FPGA die HS/VS-Sync-Signale selbst analysieren.

Im Grunde könnten Sie also eine Liste von Formaten in einer Tabelle haben. Wenn Sie sehen, dass das aktuell eingehende Video mit einem Eintrag in der Formattabelle übereinstimmt, wird dieses Format empfangen. Sie können natürlich jede beliebige Methode zur Erkennung verwenden, um alle gewünschten Formate zu unterstützen.

Wenn Sie beispielsweise feststellen, dass Sie 525 HS-Impulse pro VS-Impuls haben, die Synchronisationspolaritäten beide negative Impulse sind und Sie entweder VS so messen, dass es nahe genug bei 59,94 Hz liegt, oder HS nahe genug bei 31,46875 kHz liegt, dann sollte das so sein das Format, das 800 Pixel pro Zeile benötigt, um den korrekten Pixeltakt von 25,175 MHz zu erhalten.

Ich möchte auch darauf hinweisen, dass der "klassische" Weg von selbstgebauten Framegrabbern, um zu wissen, welches Videoformat sie erhalten, einfach so wenige Formate wie möglich in ihrer EDID angibt, damit die angeschlossenen Videoerzeugungsgeräte dies tun Versuchen Sie nichts Lustiges.
Danke. Ich interessiere mich hauptsächlich für ältere VGA-Implementierungen, bei denen es kein EDID gibt, aber ich denke, es wird möglich sein, den richtigen Modus aus der Reihe möglicher Modi auszuwählen. Ich bin davon ausgegangen, dass die Prozessmonitore Rate und Resync durchlaufen haben, dass es so etwas sein musste.