Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

6.Woche: VGA Monitoransteuerung

Ähnliche Präsentationen


Präsentation zum Thema: "6.Woche: VGA Monitoransteuerung"—  Präsentation transkript:

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

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

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

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

5 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

6 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

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

8 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!

9 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

10 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‘.

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

12 VSYNC Timing Aufbau eines Bildes

13 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

14 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);

15 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;

16 Schaltung eines VGA Farbausganges

17 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

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

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

20 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 bei

21 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 = 610 Pixel zaehler <= zaehler + 1; else zaehler <= “ “; end if;

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

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

24 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

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

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


Herunterladen ppt "6.Woche: VGA Monitoransteuerung"

Ähnliche Präsentationen


Google-Anzeigen