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!