www.mikrocontroller.net

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.

Inhaltsverzeichnis

[Bearbeiten] Motivation

Oftmals besteht die Notwendigkeit, eine grössere Zahl sich schnell ändernde Signale innerhalb eines FPGA-Designs visuell darzustellen, hat aber nicht die Möglichkeit, eine ausreichend schnelle Schnittstelle zu implementieren und zu nutzen. Änderungen an FFT-Daten oder Bilddaten, parallele Signalwege mehrere AD-Eingänge können vom Auge mit bis zu 20 Bildern je Sekunde erfasst werden und erforderten grosse Datenraten zu einem PC hin sowie weitere Auswertesoftware. Mit einer direkten Ausgabe kann der Aufwand vereinfacht- und Hürden, wie Latenz bei PCs und Bandbreite oder Kanalbreite bei Oszilloskopen überwunden 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.

[Bearbeiten] Signalerzeugung

Je nach gewünschter Auflösung ist ein bestimmtes Videotiming einzuhalten.

[Bearbeiten] Tabelle

[Bearbeiten] Links

VGA timing infos

[Bearbeiten] Datenspeicherung

[Bearbeiten] unbuffered

Die Daten werden idealerweise zum Zeitpunkt der Entstehung ausgegeben. Damit entfällt eine aufwändige Pufferung oder ein Video-RAM.

[Bearbeiten] buffered

Wenn Systemtakt und H-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.

[Bearbeiten] Ausgabe

[Bearbeiten] 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.

[Bearbeiten] 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.

[Bearbeiten] DAC - Version

Hier wird der Farbwert je Kanal an einen Video-DAC übertragen

[Bearbeiten] 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.

[Bearbeiten] Spartan 3E

[Bearbeiten] Board-Beschreibung

Spartan 3E Kit von Digilent

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


[Bearbeiten] Testbildgenerator 800x600 (J.S.)

Modus: 800×600 @ 50MHz, mit scrollenden und interlacten Farben.

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. Genaueres dazu im Projekt oder hier: Farbmultiplexfunktion (Stand 2007)

Zusätzlich bewegt sich ein Cursor/Ball durchs Bild, um zu zeigen, wie man selektiv Objekte einblenden kann. In ähnlicher Weise liesse sich ein Oszilloskop realisieren.

Das Bild entspricht exakt der Ausgabe der Version im folgenden ISE-Projekt: Jsvgademo s3e.zip


[Bearbeiten] VGA-Oszilloskop mit FFT 1280x1024(J.S.)

Modus: 1280×1024 @ 135MHz, mit der ersten von 2 Wellenformen und FFT der gelben ungefilterten Welle.

Das file Datei:Jsoscvgacore1280 s3e.bit demonstriert ein VGA-Oszilloskop, einen IIR-Filter eine FFT und die Echtzeitausgabe entlang von x und y. Es erzeugt eine Wellenform, 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 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 (gelb) und Linien (violett) dargestellt.

Ferner schaltet die Demo selbsttätig die Filtereingänge (gelb / violett) auf einen FFT-Core, dessen scan-Bereich und Ausgang in der jeweiligen Farbe angezeigt wird. Das Umschalten erfolgt mit jedem Überlauf der Bildzählers. 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 oder braucht.


Die gleiche Ausgabe nun mit der zweiten Wellenformen und deren gefiltertem Verlauf sowie FFT-Analyse.

Leider lässt der begrenzte Platz im S3E keine erweiterten Funktionen wie Zoom etc zu. Bereits die FFT musste in der Amplituuden-Auflösung reduziert werden. Das Projekt kommt noch. 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 2-3 Takte.

Wichtig: Das Design nutzt zwei verkette DCMs, um auf die "krumme" Frequenz von 135MHz zu kommen, die für die Darstellung nötig ist. Trotz der hohen Frequenz und analoger Verbindung ist das Bild relativ scharf. Getestet wurde mit 2 TFT-Monitoren, die beide etwas brauchen, bis sie sich auf das Bild zentriert haben. Bei Monitoren, welche die Wiederholrate von 75Hz nicht können, wäre gfs der geringere Modus mit 70Hz machbar. Dazu sind dann 108MHz Horizontaltakt nötig.


[Bearbeiten] Logic Analyzer

[Bearbeiten] Spektrum Analyzer

[Bearbeiten] Spartan 3A

todo

[Bearbeiten] Altera Cyclone IV DE-115 (Terasic)

Das C4 board von Terasic ist ein ideales board mit allem drauf, was für professionelle Anwendungen nötig ist. 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. Ein Video-DAC mit hoher Analoggüte ist integriert. Wenn das nicht reicht, kann über die SAMTEC-Stecker ein third party DVI-Video-Board angeschlossen werden.

Altera Cyclone 4 Plattform mit IO-Extension von Terasic

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


[Bearbeiten] Wellenformgenerator nach LaPlace

LaPlace-Generator mit 4 Wellen

Bildung eines Kreises durch sinusförmige Grundwelle und einigen sinusförmigen Oberwellen nach LaPlace/Fourier. Das System produziert bis zum 20MHz + 7 Oberwellen bis zu 160MHz.

Ein Funktionsgenerator mit FPGA


[Bearbeiten] Relevante Beiträge

[Bearbeiten] Projekte

webmaster@mikrocontroller.netImpressumNutzungsbedingungenWerbung auf Mikrocontroller.net