HES Praktikum, Aufgabe 2
VGA-Testbild-Generator

Aufgabenstellung

Schreiben und testen Sie ein Modul "vga", das nur den Takt als Eingang hat und das an seinen Ausgaengen pixclk, hsync, vsync, blank, r[7:0], g[7:0] und b[7:0] mit Hilfe des auf dem Board montierten VGA DAC ein normgerechtes VGA-Signal fuer ein Bild mit 640x480 Bildpunkten erzeugt. Zum Generieren eines Testbildes speisen Sie ausgewaehlte Bits des Horizontal- und Vertikalzaehlers in die 24 Farbbits ein. Sie sollten das so entstehende Bild genau erklaeren koennen!

Hinweise

Das Bild auf alten Roehren-Monitoren wird sequentiell durch einen Elektronenstrahl gezeichnet, Zeile fuer Zeile, von links nach rechts, von oben nach unten (genauer sind es drei Strahlen, jeweils einer fuer die roten, die gruenen und die blauen Bildpunkte - sie werden aber alle mit der gleichen Vorrichtung ausgelenkt). Auf modernen LCD-Monitoren ist die Physik der Leuchtpunkterzeugung ganz anders - aber die Signale zum Ansteuern der Schnittstelle sind gleich. Damit der Monitor "weiss", wann eine neue Zeile beginnt, gibt's den Zeilen-Synchronimpuls (fuer ein neues Bild den Bildsynchronimpuls). Vor und nach den Synchronimpulsen darf fuer eine bestimmte Zeit keine andere Farbinformation als "schwarz" uebertragen werden. Das nennt man die vordere bzw. hintere "Schwarzschulter". Die zeitliche Lage und die Dauer der verschiedenen Impulse wird durch zwei Zaehler erzeugt. Der erste ist fuer das Timing innerhalb einer Zeile zustaendig, der zweite fuer das Timing innerhalb eines Bildes.

Hier ist eine Tabelle der VGA-Timing-Parameter ; der von uns benutzte Modus heisst "VGA3". Benutzen Sie den 50-MHz-Takt des FPGAs. Teilen durch zwei ergibt den Pixeltakt. Denken Sie aber daran, eine synchrone (!) Schaltung zu bauen (das bedeutet insbesondere, dass Sie fuer alle (!) Flip-Flops ausnahmslos denselben 50-MHz-Takt als Clock verwenden). Zeichnen Sie zwei Diagramme (jeweils eines fuer eine Zeile und eines fuer ein Bild), in dem Sie den Zaehlerstand, den Synchronimpuls und den Austastimpuls einzeichnen. Der Austastimpuls umfasst den Synchronimpuls und die Schwarzschultern. Fuer die spaeteren Aufgaben ist es guenstig, die Zuordnung "Zaehlerstand <--> Wo befinde ich mich in der Zeile/im Bild?" so zu waehlen, dass die sichtbaren Pixel ab Zaehlerstand 0 beginnen: dann lassen sich die Zaehler auch zum Adressieren der Speicher fuer den Bildinhalt benutzen.

Ein Vorschlag zur Erzeugung der Farbinformation: benutzen Sie jeweils drei aufeinanderfolgende Bits des Horizontal- bzw. Vertikalzaehlers fuer die drei hoechsten Bits einer Farbkomponente, z.B. rot[7:5] = horizontal[4:2], gruen[7:5] = vertikal[4:2], blau[7:5] = horizontal[7:5]. Die restlichen rgb-Bits setzen Sie auf 0.

Hier noch zwei Hinweise zum richtigen Betrieb des DAC:
- Wir brauchen keine Sync-Information auf dem Gruenkanal, deswegen sollten Sie SYNC_N auf 0 setzen.
- Alle Eingaenge des DAC werden mit der steigenden Flanke des DAC-Clock-Signals CLOCK gespeichert und damit um einen Takt von CLOCK verzoegert. Die Synchronsignale Ihrer Schaltung (hsync, vsync) gehen aber direkt zum Monitor und kaemen deshalb zu frueh dort an. Was muessen Sie unternehmen, um das zu vermeiden?

ACHTUNG, WICHTIG!

Sie MUESSEN sich IMMER erst ENTLADEN, bevor Sie irgendeinen Teil des FPGA-Bords beruehren! Nichtbeachtung kann zur Zerstoerung der Bauteile durch statische Aufladung fuehren!