26
FPGA Praktikum WS2000/2001 6.Woche: VGA Monitoransteuerung

FPGA Praktikum WS2000/2001 6.Woche: VGA Monitoransteuerung

Embed Size (px)

Citation preview

Page 1: FPGA Praktikum WS2000/2001 6.Woche: VGA Monitoransteuerung

FPGA Praktikum WS2000/2001

6.Woche:VGA Monitoransteuerung

Page 2: FPGA Praktikum WS2000/2001 6.Woche: VGA Monitoransteuerung

VGA Grafik

Prinzip einer Braunschen-Röhre VGA Signale Anschluß an den FPGA Aufgaben

Page 3: FPGA Praktikum WS2000/2001 6.Woche: VGA Monitoransteuerung

Die Braunsche-Röhre

Vakuumröhre mit einem Elektronenstrahl, der ein Beschichtung auf der Vorderseite einen Punkt zum leuchten bringt.

Der Elektronenstrahl kann abgelenkt werden

Die Intensität des Strahls kann gesteuert werden.

Page 4: FPGA Praktikum WS2000/2001 6.Woche: VGA Monitoransteuerung

Bildaufbau

Der Strahl baut jedes Bild Zeile für Zeile und Punkt für Punkt nacheinander auf.

Er läuft eine Zeile von links nach rechts ab.

Die Intensitätsschwankung gibt die Helligkeit der Punkte auf der Zeile an.

Dann läuft er schnell an den Anfang der nächsten Zeile zurück. Dabei muß der Strahl ausgeschaltet sein.

Am Ende der letzten Zeile läuft der Strahl an den Anfang des Bildes zurück. (Austastlücke)

Page 5: FPGA Praktikum WS2000/2001 6.Woche: VGA Monitoransteuerung

Problemstellung:

Um ein Bild darzustellen, muß der Elektronenstrahl genau zum richtigen Zeitpunkt die richtige Intensität haben

Aufeinanderfolgende Bilder müssen richtig positioniert werden

Beim Zeilenrücklauf muß der Elektronenstrahl abgeschaltet sein

Page 6: FPGA Praktikum WS2000/2001 6.Woche: VGA Monitoransteuerung

Ansteuerung

Ein VGA Monitor wird über 5 Signale gesteuert: HSYNC (Horizontale Synchronisation, Ende einer

Zeile) VSYNC (Vertikale Synchronisation, Ende eines

Bildes) Rote Intensität Grüne Intensität Blaue Intensität

Page 7: FPGA Praktikum WS2000/2001 6.Woche: VGA Monitoransteuerung

Sync Signale

Das HSYNC Signal kennzeichnet das Ende einer Zeile Das VSYNC Signal kennzeichnet das Ende eines Bildes Da die meisten Monitore einen Schwingkreis mit diesen

Signalen synchronisieren müssen die Signale zeitlich sehr gleichmäßig sein.

Außerdem müssen die Signalzeiten in einem vom Monitor vorgegebenen Bereich liegen.

Bei manchen Monitoren (fixed frequency, Fernseher) müssen sogar genau vorgeschriebene Timings eingehalten werden.

Page 8: FPGA Praktikum WS2000/2001 6.Woche: VGA Monitoransteuerung

Video Timing

Wer schon mal einen Monitor oder eine Grafikkarte gekauft hat, ist über die Timinggrenzwerte gestolpert: Vertikalfrequenz: Bilder pro Sekunde

25 Hz beim Fernseher, z.B. 50 bis 100 Hz bei meinem 17“ Monitor

Horizontalfrequenz: Zeilen pro Sekunde Auch unsichtbare Zeilen der Austastlücke werden mitgezählt 15 kHz Fernseher 30 kHz bis 90kHz bei meinem 17“ Monitor D.h.: Mein Monitor kann offiziell den guten alten Spiele-Modus mit

320x200 Punkten bei 60 Bildern/s (ca. 14kHz) nicht darstellen. Eine Verletzung des Timings kann den Monitor

beschädigen!

Page 9: FPGA Praktikum WS2000/2001 6.Woche: VGA Monitoransteuerung

Beispieltiming für den SVGA Modus mit 31,5 MHz

Vertikalfrequenz: ca. 60 Bilder/s (16,784 ms pro Bild)

480 Sichtbare Zeilen pro Bild Horizontalfrequenz: 31,5 kHz

31,77 µs pro Zeile 31,77 µs * 480 = 15,25 ms für den Sichtbaren Teil des Bildes 16,784 ms - 15,25 ms = 1,534 ms vertikale Austastlücke 1,534 ms / 31,77 µs = 48 Zeilen Austastlücken Insgesamt also 528 Zeilen

640 Pixel pro Zeile in sichtbaren 25,17 µs 31,77 µs - 25,17 µs = 6,6 µs horizontale Austastlücke 640 / 25,17 µs = 25,4 MHz Pixelfrequenz

Page 10: FPGA Praktikum WS2000/2001 6.Woche: VGA Monitoransteuerung

HSYNC Timing

Aufbau einer Zeile Die HSYNC Signale werden für jede Zeile gesendet,

auch während der Vertikalen Austastlücke HSYNC Puls ist 3,77 µs lang auf dem Wert ‘0‘.

Page 11: FPGA Praktikum WS2000/2001 6.Woche: VGA Monitoransteuerung

HSYNC Timing

Damit es bei allen läuft, sollte die Schaltung mit 19,202 MHz arbeiten.

Dann ergeben sich die folgenden Werte: 610 Pixel pro Zeile (31,77 µs) 512 sichtbare Pixel (26,66 µs statt 25,17 µs) die restlichen 98 Pixel sind schwarz Der HSYNC Puls startet bei Pixel 520 der HSYNC Puls endet vor Pixel 592

Durch verschieben des HSYNC Pulses läßt sich das Bild links/rechts verschieben.

Page 12: FPGA Praktikum WS2000/2001 6.Woche: VGA Monitoransteuerung

VSYNC Timing

Aufbau eines Bildes

Page 13: FPGA Praktikum WS2000/2001 6.Woche: VGA Monitoransteuerung

VSYNC Timing

Das Bild besteht aus 529 Zeilen 480 Zeilen sind sichtbar 49 Zeilen sind schwarz Der VSYNC Puls ist zwei Zeilen lang ‘0‘: Zeilen 494 und 495

Page 14: FPGA Praktikum WS2000/2001 6.Woche: VGA Monitoransteuerung

Intensitätssteuerung

Der Monitor bekommt vom FPGA drei Intensitätssignale gesendet.

Je eins für die Grundfarben Rot, Grün und Blau. Jedes Signal kann über einen einfachen 2-Bit

Analog/Digitalwandler auf vier verschiedene Spannungswerte gesetzt werden

Damit sind 23*2 = 26 = 64 verschiedene Farben möglich.

Am bequemsten faßt man im VHDL-Code die sechs Signale zu einem Vektor zusammen:

RGB <= R(1 downto 0) & G(1 downto 0) & B(1 downto 0);

Page 15: FPGA Praktikum WS2000/2001 6.Woche: VGA Monitoransteuerung

Pinbelegung

Für die UCF Datei: NET HSYNCB LOC=P180;NET VSYNCB LOC=P181;NET R<1> LOC=P194;NET R<0> LOC=P193;NET G<1> LOC=P192;NET G<0> LOC=P191;NET B<1> LOC=P189;NET B<0> LOC=P188;

Page 16: FPGA Praktikum WS2000/2001 6.Woche: VGA Monitoransteuerung

Schaltung eines VGA Farbausganges

Page 17: FPGA Praktikum WS2000/2001 6.Woche: VGA Monitoransteuerung

2-Bit D/A Wandler

3,3V Ausgangsspannung am FPGA Pin Red = „00“

Ausgangsspannung 0V

Red = „01“ Spannungsteiler 1000 zu (470 || 75)=65 Ausgangsspannung 201 mV

Red = „10“ Spannungsteiler 470 zu (1000 || 75)=70 Ausgangsspannung 390 mV

Red = „11“ Spannungsteiler (1000 || 470)=320 zu 75 Ausgangsspannung 627 mV

Page 18: FPGA Praktikum WS2000/2001 6.Woche: VGA Monitoransteuerung

Aufgabe 6.1: Generierung des VGA Timings

Baut eine Schaltung, die HSYNC und VSYNC mit dem beschriebenen Timing erstellt.

Verwendet dazu einen X Zähler von 0 bis 610 und einen Y Zähler von 0 bis 528 aus STD_LOGIC_VECTOR (Wieviele Bits benötigen die Zähler?)

Simuliert mit einem 19,2 MHz Takt mindestens 700 Taktzyklen und überprüft, ob die HSYNC Timing richtig ist. (72 Pixel lang, alle 610 Pixel)

Implementiert, und testet ob im Logfile mindestens 19,2 MHz Taktfrequenz angegeben sind.

Nur weitermachen, wenn diese Überprüfungen positiv ausfallen!

Falls euer Rechner schnell genug ist, überprüft auch das VSYNC Timing. Andernfalls prüft wenigstens, ob der Y Zähler einmal pro Zeile zählt.

Page 19: FPGA Praktikum WS2000/2001 6.Woche: VGA Monitoransteuerung

Aufgabe 6.2: Ein schwarzes Testbild

Im Diplomandenraum steht ein zusätzlicher Monitor. Zuhause müßt Ihr ständig umstöpseln, oder euch irgendwoher

einen zweiten Monitor besorgen. Ladet die Schaltung in den FPGA, schließt einen Monitor an

und steuert gegebenenfalls das Reset Signal an. Der Monitor sollte nicht pfeifen, kein rollendes Bild zeigen

oder rote Warnlampen aufblinken lassen oder sich abschalten. Es sollte ein stabiles, schwarzes Bild zu sehen sein. Falls nicht: Schnell Monitor ausschalten und Kontakt zu Till

aufnehmen.

Page 20: FPGA Praktikum WS2000/2001 6.Woche: VGA Monitoransteuerung

Aufgabe 6.3: Ein buntes Testbild

Im Diplomandenraum steht ein zusätzlicher Monitor. Benutzt die obersten Bits des X Zählers, um dem RGB

Farbausgang Werte zuzuweisen. Beispielsweise für Streifen Schwarz, Blau, Rot, Lila: RGB <= H(7) & H(7) & “00“ & H(6) & H(6)

Denkt daran, daß ab Zeile 480 wieder RGB=“000000“ gelten muß.

Testet, ob Ihr die Streifen seht. Gebt die VHDL Dateien für 6.3, den Bitstream für 6.3 und das

Simulationsskript aus Aufgabe 6.1 ab [email protected]

Page 21: FPGA Praktikum WS2000/2001 6.Woche: VGA Monitoransteuerung

Nützliche VHDL Infos

Unbedingt zusätzlich die Bibliothek std_logic_unsigned verwenden: use IEEE.std_logic_unsigned.all

Zähler: if rising_edge(clk) if zaehler < 609 then -- zaehlt von 0 bis

609 = 610 Pixel zaehler <= zaehler + 1; else zaehler <= “000000000“;end if;

Page 22: FPGA Praktikum WS2000/2001 6.Woche: VGA Monitoransteuerung

Nützliche VHDL Infos

Taktet alle Ausgangssignale in Register. Die 52ns Verzögerung die dadurch entstehen sind egal, wenn alle Signale gleichmäßig verzögert werden.

Dies erhöht die mögliche Taktfrequenz, da die externen Signallaufzeiten von den internen getrennt werden.

Wer möchte kann auch intern noch mehrere Pipelinestufen einbauen.

Page 23: FPGA Praktikum WS2000/2001 6.Woche: VGA Monitoransteuerung

Aufgabe 6.4: Bilder (Einführung)

Wenn man die X- und Y-Zähler als Adressen eines ROMs verwendet, kann man ein Bild darstellen, das in dem ROM gespeichert ist.

Wenn man obere Adressbits nicht anschließt, wiederholt sich das Bild mehrmals, wenn man untere nicht anschliest, werden die Bildpunkte größer.

Schließt man z.B. XCOUNT(6 downto 3) und YCOUNT(6 downto 3) an ein ROM mit 8 Adressleitungen, so enthält das Bild 16x16 Bildpunkte, die jeweils 8x8 Pixel auf dem Monitor groß sind. Das Bild kann sich in X-Richtung also 4 mal wiederholen.

Man kann z.B. ein 1-Bit breites ROM verwenden und dann abhängig vom Wert des Bits eine von zwei Farben anzeigen (palette), oder man speichert in einem 6-Bit breiten ROM direkt die Farbe. (direct color)

Page 24: FPGA Praktikum WS2000/2001 6.Woche: VGA Monitoransteuerung

Aufgabe 6.4: Bilder (Einführung)

Insgesamt stehen in dem FPGA 14 BlockROMs mit je 4096 Bits zur Verfügung.

Möglich Aufteilungen sind daher: 2-Farben, 256x196, 12 BlockROMs 4-Farben, 196x128, 12 BlockROMs 8-Farben, 128x128, 12 BlockROMs 64-Farben, 128x64, 12 BlockROMs

Page 25: FPGA Praktikum WS2000/2001 6.Woche: VGA Monitoransteuerung

Aufgabe 6.4: Bilder (Aufgabe)

Generiert ein ROM, daß die Daten für ein einfaches Bild enthält. (Z.B. zwei diagonale Linien)

Das Bild soll mindestens 16x16 Pixel groß sein. Sucht euch aus, wieviele Farben Ihr haben wollt,

und ob Ihr eine Palette oder direct color verwenden wollt.

Baut das ROM so in eure Schaltung ein, daß das Bild auf dem Monitor zu sehen ist.

(Das sollten nur ein paar Drähte sein)

Page 26: FPGA Praktikum WS2000/2001 6.Woche: VGA Monitoransteuerung

Zusatzaufgabe 6(schwer, nur für gelangweilte Studenten)

Der Prozessor enthält ein DPRAM, daß je einen Port zum PC und zur ALU besitzt.

Statt des Ausgaberegisters kann man dort ein DPRAM einbauen, daß einen Schreib-Port zum Prozessor hat, und einen Leseport zur VGA Grafik

Für die VGA Grafik ersetzt das RAM dann das ROM

Der Prozessor kann jetzt Grafik in das RAM malen. (Probiert mal ein Rechteck zu füllen)