Projekt VGA Core in VHDL
von J.S.
Ein einfacher VGA-Core in VHDL zur Implementierung in eigene designs zwecks direkter Ausgabe digital repräsentierter Analogsignale oder Erzeugung dynamischer, grafischer Animationen.
Motivation
Oftmals besteht die Notwendigkeit, eine grössere Zahl von sich schnell ändernden Signalen innerhalb eines FPGA-Designs visuell darzustellen, hat aber nicht die Möglichkeit, eine ausreichend schnelle Schnittstelle zu einem übergeordneten System zu implementieren und zu nutzen. Änderungen an FFT-Daten oder Bilddaten oder parallelen Signalwegen mehrerer AD-Eingänge können vom Auge mit wenigstens 10 Bildern je Sekunde erfasst werden - erforderten aber große Datenraten zu einem PC hin sowie und dazu weitere Auswertesoftware. Mit einer direkten Ausgabe auf einem Monitor kann der Aufwand vereinfacht werden sowie Hürden, wie die Latenz bei PCs und die Bandbreite bzw. die limitierte Zahl von Kanälen bei LogicAnalyzern und Oszilloskopen umgangen werden.
Für die Beobachtung von flächenförmigen Datenanordnungen wie Registerbänken oder sporadischen Fehlern bieten sich Datenfelder mit Markierungen und Farbwerten an, die man als Matrix darstellt. Je nach Auftreten eines Signals klinkt dann das entsprechende Kästchen.
Signalerzeugung
Je nach gewünschter Auflösung des Bildes ist ein bestimmtes Videotiming einzuhalten. Der Core ist vorbereitet für 640x480 sowie 800x600, kann jedoch leicht der Erfordernissen angepasst werden, sofern die Hardware die benötigte Signalbandbreite / Taktfrequenz leisten kann.
Tabelle
Pixeltakt | 50 MHz | 75 MHz | 100 MHz | 108 MHz | 135 | 135 /162 | 148.351 | 148.500 | 154.000 | 193.250 |
---|---|---|---|---|---|---|---|---|---|---|
Horizontal | 800 | 1024 | 1280 | 1280 | 1280 | 1600 | 1920 | 1920 | 1920 | 1920 |
Front Porch | 56 | 24 | 40 | 48 | 64 | 64 | 88 | 528 | 48 | 136 |
Synch | 120 | 136 | 168 | 184 | 192 | 192 | 48 | 44 | 32 | 200 |
Back Porch | 64 | 144 | 96 | 200 | 192 | 305 | 144 | 148 | 80 | 336 |
Pixel X | 1040 | 1328 | 1584 | 1712 | 1728 | 2160 | 2200 | 2640 | 2080 | 2592 |
Pixeltakt | 48,1 | 56,5 | 63,1 | 63,1 | 78,1 | 75 | 67,4 | 56,3 | 1920 | 1920 |
Vertikal | 600 | 768 | 1024 | 1024 | 1024 | 1200 | 1080 | 1080 | 1200 | 1200 |
Front Porch | 37 | 3 | 3 | 3 | 3 | 1 | 4 | 4 | 3 | 3 |
Synch | 6 | 6 | 3 | 3 | 3 | 3 | 5 | 5 | 6 | 6 |
Back Porch | 23 | 29 | 26 | 26 | 55 | 46 | 36 | 36 | 26 | 36 |
Pixel Y | 666 | 806 | 1056 | 1056 | 1085 | 1250 | 1125 | 1125 | 1235 | 1245 |
Frames | 72,2 | 70,1 | 59,8 | 59,7 | 72,0 | 50 /60 | 60,1 | 50,1 | 59,94 | 59,9 |
Links
Datenspeicherung
unbuffered
Die Daten werden idealerweise zum Zeitpunkt der Entstehung ausgegeben. Damit entfällt eine aufwändige Pufferung oder ein Video-RAM. Damit ist es nötig, die Daten entsprechend vorzuberechnen.
buffered
Wenn Systemtakt und Horizontal-Frequenz nicht zusammenpassen oder Daten nicht permanent periodisch anfallen, reicht für die Daten ein asynchrones FIFO, das maximal einmalig je Bild beschrieben- und durch den H-Takt ausgelesen wird. Damit lässt sich rechentechnisch die komplette Zeit des Rohbildes für die Datenerzeugung nutzen und eine höhere Komplexität realisieren, bzw das Timing bei kritischen Anwendungen noch einhalten.
Im einfachsten Fall lässt sich dies für eine Zeile realisieren. Ansonsten braucht es einen Bildspeicher.
Ausgabe
1-Bit Version
Hier erfolgt die Ausgabe digital, also nur mit einem Bit je Farbkanal. Es werden 5 Leitungen benötigt. Damit sind 7 Farben und Schwarz darstellbar. Wie man trotzdem mehr Farben bekommt, wird im Projekt unten dargestellt.
Mehrbit-Version
Hier erfolgt die Ausgabe ebenfalls digital, allerdings mit mehreren Bits je Farbkanal. Es werden damit 3 x n + 2 Leitungen benötigt. Zur Anwendung kommt ein Widerstandsnetzwerk vom Typ R-2R, wie es z.B. auf dem Spartan 3A board von Digilent / Trenz realisiert ist. Die Widerstände bilden in Zusammenwirkung mit den Terminierungswiderständen und der Leitungsimpedanz einen Spannungsteiler.
DAC - Version
Hier wird der Farbwert je Kanal an einen Video-DAC übertragen
Applikationsbeispiele
Nachfolgend befinden sich einige von usern bereitgestellte fertig synthetisierte files zum Laden in den jeweiligen FPGA. Wer das Projekt auf seine Plattform portiert, bitte das file auch einstellen.
Spartan 3E
Board-Beschreibung
Der core muss an folgende Eigenheiten des boards angepasst werden:
Das board läuft mit 50MHz Quarz, besitzt nur einen 1-Bit-Anschluss je VGA-Farbe und wird daher interlaced (s.u.).
Es werden die 4 Input buttons verwendet, von denen einer als Reset fungiert. Dieser wurde auf den Drehencoder umgemappt.
Wichtig für das S3E: Die Steuerleitungen für das Flash müssen gfs. programmiert werden. Siehe Projekt.
Ansonsten wird nichts verwendet. Das Laden geht über das Platform-Flash (embedded JTAG Adapter).
Testbildgenerator 800x600 SVGA (J.S.)
Testbildgenerator für das Spartan 3E-board von digilent: Vga test.bit
Das Spartan 3E-board wird mit einem 3-Bit Anschluss betrieben, womit eigentlich nur 7 Farben möglich wären. Im Beispieldesign werden jeweils 2 benachbarte Farben im Spektrum multiplext, z.B. Rot und Gelb zu Orange oder Blau und Schwarz zu Dunkelblau. So entstehen etwa 30 verschiedene, nutzbare Farben. Das Multiplexen wird mit einem selbstschwingenden Takt bewerkstelligt, der nicht mit dem H-Takt korrelliert. Genaueres zu dieser Funktion im Projekt oder hier: Farbmultiplexfunktion (Stand 2007)
Zusätzlich zu den rotierenden Farben bewegt sich ein Cursor/Ball durchs Bild, um zu zeigen, wie man selektiv Objekte einblenden und dem Raster überlagern kann. In ähnlicher Weise liesse sich ein ruler für ein Oszilloskop oder auch eine Lichtorgel realisieren.
Das Bild entspricht exakt der Ausgabe der Version im folgenden ISE-Projekt: Jsvgademo s3e.zip
Oszilloskop mit FFT und Ausgabe in SXGA 1280x1024 (J.S.)
Das file Datei:Jsoscvgacore1280 s3e.bit demonstriert ein Oszilloskop mit 8 verschiedenen Wellenformen, zwei IIR-Filter eine FFT523 und die Echtzeitausgabe entlang von x und y. Es erzeugt nacheinander im Wechsel 8 Wellenformen, filtert diese in 2 Stufen und stellt sie im bekannten 10x8 Raster dar. Die hierfür gewählte Auflösung beträgt gegenüber der VGA-Demo jetzt 1280x1024, da diese einfach in das typische Oszi-Raster mit jeweils 128 Punkten passt. Aufgrund der Echtzeitausgabe wird kein Video-RAM benötigt. Die Wellen werden als Punkte (weiss), sowie Linien (gelb und türkis) dargestellt.
Die Demo selbsttätig die Filtereingänge (gelb / türkis) über zwei wechselnde Windows auf einen FFT-Core, dessen scan-Bereich und Werteausgabe in der jeweiligen Farbe angezeigt wird. Zudem wird in der neuen Version die gefensterte Welle dargestellt. Das Umschalten erfolgt mit dem Bildzähler. Das Design ist absichtlich auf ein file zusammenkopiert und trennt nur zwischen Signal-Generator und Video-Mixer. Dieser kann entfallen, wenn man keine interlacten Farben haben möchte.
Leider lässt der begrenzte Platz im S3E keine erweiterten Funktionen wie Datenspeicherung, Zoom, verbreiterte Darstellung der FFT, etc zu. Die Wellensynthesen, Filter und Modulatoren, sowie die FFT mussten in der Zahl und Auflösung reduziert werden. Auch das Maus-Interface und der Zeichengenerator wurden herausgenommen. Damit enthält das Design kaum noch PCB-spezifische Elemente und kann leicht portiert werden. Die FFT ist maximal ausgebaut und per area constraint synthetisiert, um das design erzeugt zu bekommen. Um das Design praktisch zu verwenden, müsste die FFT gekürzt werden. Eigene Module können eingehängt werden, indem man sich auf die bereitgestellten Video-X und Video-Y Koordinaten bezieht und die Latenzen, die bei einer umständlicheren Berechung entstehen, anpasst. Die Latenz beträgt derzeit je nach Implementierung 3-4 Takte.
Wichtig: Das Design nutzt zwei verkette DCMs, um auf die "krumme" Frequenz von 108MHz statt ehemals 135MHz zu kommen, die für die Darstellung nötig ist. Damit sinkt die Wiederholfrequenz von 75Hz auf 60Hz, aber mit der geringeren Video-Taktfrequenz ist das Design bei dem S3E erheblich einfacher zu fitten, da entspannter. Bei beiden Versionen war das Bild gestochen scharf und die Bewegung der Wellen sehr plastisch. Getestet wurde mit 2 TFT-Monitoren, die beide allerdings etwas brauchen, bis sie sich auf das Bild zentriert haben. Teilweise kommt es zum Ruckeln, wenn die Monitore einen Auto-Zoomm nutzen und ständig kalibieren. Der fette weisse Rahmen hilft, das zu unterdrücken. Manchmal klappt das Farbmultiplex nicht richtig - scheint an der Art zu liegen, wie die TFTs die Analogdaten scannen und interpolieren. In eigenen Designs daher entweder weglassen und nur die Vollfarben verwenden oder einen 4-Bit Ausgang für die Farben nutzen.
Logic Analyzer
Spektrum Analyzer
Spartan 3A
board ist defekt - kann nicht getestet werden. Wer ein solche board hat, bitte die Version laden, anpassen und wieder hochladen und den Satz entfernen.
Spartan 6
Digilent Atlys Spartan 6
- Drum Computer GUI
- Eingebaute GUI für einen Schlagzeugsynthesizer (siehe Projekt Drumcomputer in VHDL) mit Keyboard, Mouse-CTRL, virtuellen Reglern für die Settings und Parameter sowie Volumen-Anzeigen für Kompressoren und Master-Volume. Realisiert mit DVI-Ausgabekarte mit bis zu 1600x1200, hier 800x600.
Trenz TE630 mit S6LX75
Das plugin-Modul von Trenz-Elektronik, hier montiert auf einem passenden Trägerboard. Daten des Systems:
- S6 LX75 FPGA (mit Webedition programmierbar)
- DDR3-RAM 1 GB
- Serial Male/FeMale
- VGA 5Bit/Farbe RGB
- USB, PS/2 Maus + Tastatur
- Compact Flash-Interface
- JTAG, Spannungsversorgung
Komplettes FPGA-Projekt für Xilinx ISE 14.7, angepasst für TE0304 + TE630file mit dem integrierten 100 MHZ-Oszillator fuer 50MHz-VGA-timing 800x600x72 auf CRT-Monitor. Zur eigenen Verwendung muss gfs das timing etwas angepasst werden. Bei anderen Applikationen gfs. die Inverter aus der Schaltung nehmen, wegen Polarität der Synch-Signale. Datei zur freien Verwendung: Datei:Jsvgacore s6.zip
Link zu einer Visualisierung: https://youtu.be/H3eBzMw-HfI
Altera Cyclone IV DE-115 (Terasic)
Das Cyclone -IV board von Terasic ist ein ideales board mit allen möglichen Komponenten für viele professionelle Anwendungen. Es wird zusammen mit einem extension board verwendet, das ADCs und DACs sowie weitere Audio-In-Outs zur Verfügung stellt. Es ist vollständig mit der freien Webedition programmierbar und kommt zudem mit einer System-Builder-Software, die den einfachen Aufbau von Systemen gestattet. Ein Video-DAC mit hoher Analoggüte ist auch integriert. Wenn das nicht reicht, kann über die SAMTEC-Stecker z.B. ein third party DVI-Video-Board angeschlossen werden.
MainBoard:
- 115.000 LEs, 180 Multiplier DSPs, 2x GB Ethernet, 1x USB Host + 2x USB + 1 Seriell, 1x VideoInput, 1 Stereo LineIn, 1 Stereo MicIn, 1 Stereo Stereo LineOut / Stereo HeadPhone, 16 Schalter, 4 Taster
Extension Board:
- 2x ADC 150 MHz 14 Bit, 2x DAC 250 MHz 14 Bit
- Stereo LineIn, Stereo MicIn, Stereo Stereo LineOut, Stereo HeadPhone
Detaillierte Farbausgabe mit 4-Bit-VGA für ein Musikprojekt zur schnellen Darstellung der Parameter eines MIDI-Controllers und der resultierenden Wellenamplituden in Echtzeit mit zusätzlicher Darstellung des Controllerwertes über virtuelle digitale 7-Segment-Anzeigen und Zeichensatzgenerator im RAM.
Wellenformgenerator nach LaPlace
Bildung eines Kreises durch sinusförmige Grundwelle und einigen sinusförmigen Oberwellen nach LaPlace/Fourier. Das System produziert bis zu 20MHz + 7 Oberwellen bis zu 160MHz. In einer Anwendung zur Klangsynthese (additive Synthese) werden ab 5Hz Oberwellen bis 50kHz erzeugt. Siehe Ein Funktionsgenerator mit FPGA
Eingebautes virtuelles Oszilloskop
Um Messsignale in einem FPGA in Echtzeit beobachten zu können, wird ein virtuelles Oszilloskop eingebaut und dessen optischer output auf einem VGA-Monitor dargestellt. Hier kommen 4 Kanäle in klassischer Darstellung zu Anwendung. Ausgabe als 1920x1080 mit 60Hz. Es werden insgesamt 3x4+2 Pins benötigt. Bei kurzen Kabeln ist kein Treiber nötig. Die Signale werden direkt aus dem FPGA getrieben.
Downloads
- VGA-Oszilloskop-Demo mit 1280x1024x60 für Digilent Spartan 3E board. (Xilinx ISE 14.1 - Projekt) Datei:Uc-js-vga-osc.zip
Bezugsquellen
- Digilent Spartan 3E board (Deutschland): http://www.trenz-electronic.de
- AVNET / SILICA (Deutschland) : http://silica.avnet.com
- Terasic Altera Cyclone IV (Taiwan) : www.terasic.com.tw
Links zu Anwendungen
- Audio-Monitoring Applikation Video-Core in Aktion mit mehreren Objekten
Relevante Beiträge
- Rechenungenauigkeiten im FPGA als Video
- Farben Multiplexen bei Ausgabe
- VGA Signale mit colour map
- VGA-Bildschirm mit XILINX-Board ansteuern
- FPGA-basierter LA / Oszi mit VGA-Ausgang
- Möglichkeit unterschiedliche VGA-Signale auszugeben
- Digital-Vorsatz für Analog-Scope
- VSync und HSync bei VGA
- VGA Aufbau mit AVR
- VGA Grafikkarte mit AVR und 8MB SDRAM
- VGA-Signal digitalisieren
- FBAS in VGA Wandler
- VGA in VHDL - Simulieren
- VGA-Grafikkarte an uC
- Zynq VGA - Blockram füllen
- digital VGA 6bit -> VGA?
- VGA Monitor Hardware emulation
- EDID erstellen / programmieren (Windows 7)