Čeština / English
Login

Firmware / VGA rozhraní

Autor: Ladislav Čapka
Update: 20.3.2009

1. Úvod

VGA port je analogové rozhraní sloužící k připojení zobrazovacího zařízení k výstupu grafické karty. Pro přenos dat se využívá jednoduchý protokol, který obsahuje dva typy synchronizačních pulsů. Zobrazovaná data jsou reprezentována třemi základními barevnými složkami, ze kterých je možné vytvořit širokou škálu barev (typicky 16 milionů). Jedná se o násedující barvy: červenou (red), zelenou (green) a modrou (blue). Aby bylo možné jednoznačně určit pozici právě zobrazovaných dat, je zapotřebí kromě informace o barvě i informace o pozici. Pozice je určena pomocí dvou typů synchronizačních pulsů a sice vertikální a horizontální synchronizace. Způsob zobrazování, tj. rozlišení a obnovovací frekvence, jsou připojenou periferií automaticky detekovány podle délky a trvání synchronizačních pulzů. Výhodou je to, že zobrazovací zařízení připojené na VGA port nepotřebuje žádné další informace o režimu apod.

Pro aktivování grafického portu VGA na FITkitu musí být spojena propojka J6.

1.1. Popis protokolu VGA

VGA je jednosměrný (výstupní) port pro připojení zobrazovacích periferií. V nejjednodušším případě tvoří rozhraní pět signálů. A sice tři analogové signály - VGA_RED, VGA_GREEN, VGA_BLUE, každý pro jednu ze složek RGB. A dva synchronizační signály (aktivní v logické 0) - horizontální VGA_HSYNC pro zpětný řádkový běh a vertikální VGA_VSYNC pro zpětný obrazový běh. Z důvodů zmenšení počtu bitů potřebných pro reprezentaci jednotlivých barevných složek a zjednodušení hardware, jsou ve FITkitu použity tři jednoduché tříbitové odporové digitálně analogové převodníky. Na monitoru máme možnost zobrazit maximálně 2^9=512 různých barev.

vga_spec.png

Obrázek 1.1: Protokol VGA.

Port VGA využívá časování závislého na aktivním rozlišení. Jednotlivé pixely jsou s určitou frekvencí odesílány pomocí signálů VGA_RED, VGA_BLUE a VGA_BLUE. Synchronizační VGA_HSYNC, VGA_VSYNC mají negativní polaritu a jsou ve stavu logická 1. Jakmile jsou vyslány všechny barevné hodnoty pro body daného řádku, nastává prodleva (nutná pro návrat elektronového děla monitoru na začátek dalšího řádku). Tato prodleva trvá určitý čas a v tomto čase je aktivní synchronizační puls VGA_HSYNC, což znamená, že je určitý čas ve stavu 0. Po této prodlevě následuje stejným způsobem následující řádek.

Když nastává konec posledního řádku aktivního grafického rozlišení, je nutné navíc aktivovat vertikální synchronizační puls. Tento puls je mnohonásobně delší než horizontální. Vše musí být řízeno vnitřním časováním zařízení, které grafická data vysílá tímto portem. Přijímající zařízení se podřizuje charakteru vstupních dat a dle těchto charakteristik nastavuje rozlišení a obnovovací frekvenci. Proto nemusí být několik prvních snímků zobrazených správně a nebo vůbec, než se zařízení správně zasynchronizují. V praxi to není při obnovovacích frekvencích, které grafický port VGA využívá, viditelné.

1.2. Příklady časování

Rozlišení

Obnovovací frekvence [Hz]

CLK ] [MHz]

Bodů na řádek

Délka horizontální synchronizace [bodů]

Viditelných bodů

640x480

60

25.175

800

96

640

640x480

72

31.5

832

40

640

720x400

70

28.322

900

108

720

720x350

70

28.322

900

108

720

800x600

56

36

1024

72

800

800x600

60

40

1056

128

800

800x600

72

50

1024

120

800

Tabulka : Příklady horizontálních synchronizačních pulsů

Rozlišení

Obnovovací frekvence [Hz]

Počet řádků na obraz

Délka vertikální synchronizace [řádků]

Viditelných řádků

640x480

60

525

2

480

640x480

72

520

3

480

720x400

70

449

2

400

720x350

70

449

2

350

800x600

56

625

1

600

800x600

60

628

4

600

800x600

72

666

6

600

Tabulka : Příklady vertikálních synchronizačních pulsů

2. Implementace VGA řadiče na FITkitu

Navrhnutý řadič je schopen generovat signály pro port VGA pro téměř libovolný grafický režim. Volba režimu se provádí nastavením určité hodnoty na vstupní 61 bitový signál MODE. Tuto hodnotu je nutné držet po celou dobu aktivity řadiče. Nastavení lze provést pomocí funkce setmode, která je dostupná v balíku vga_controller_cfg, kde jsou také přednastaveny hodnoty pro několik grafických režimů. Vstupní hodiny CLK musí mít frekvenci dle požadovaného rozlišení. Frekvence hodinového signálu v závislosti na zvoleném rozlišení je uvedena v tabulce ve sloupci CLK. Jakmile je nastavený režim a řadič je aktivní, tj. signál RST je v log. 0 a signál ENABLE v log. 1, začne řadič generovat výstupní data. Požadované RGB hodnoty se nastavují pomocí signálů DATA_RED, DATA_GREEN a DATA_BLUE. Všechny tyto barvonosné signály jsou 3 bitové. Všechny signály začínající názvem "`signal:VGA_`", se zapojují na grafický port VGA jen s tím rozdílem, že digitální 3 bitové barvonosné hodnoty jsou pomocí D/A převodníku převedeny na analogový signál. Pozici zobrazovaných dat určuje dvojice signálů - ADDR_COLUMN (číslo sloupce) a ADDR_ROW (číslo řádku). Maximální hodnoty jsou závislé na nastaveném režimu - např. pro 640x480 se hodnota ADDR_COLUMN pohybuje v rozhrahu 0-639 a hodnota ADDR_ROW v rozsahu 0-479.

Protože počet taktů mezi požadavkem na data a vlastním vystavením dat se v závislosti na periferii připojené k VGA řadiči může lišit, existuje v řadiči generický parametr REQ_DELAY, pomocí kterého je možné nastavit, kolik taktů potřebuje periferie mezi požadavkem (nastavením ADDR_COLUMN, ADDR_ROW) a vystavením barevných hodnot pro tento požadavek (na signálech DATA_RED, DATA_GREEN a DATA_BLUE). Výchozí hodnota je 1, což znamená, že v taktu bezprostředně následujícím za požadavkem musí být vystavena platná data.

Rozhraní implementovaného VGA řadiče je na obrázku 2.1.

vga_ctrl.png

Obrázek 2.1: Rozhraní řadiče VGA.

Popis generických parametrů entity řadiče:

  • REQ_DELAY - zpoždění, definující počet taktů mezi vystavením adresy na signálech ADDR_ROW/ADDR_COLUMN a očekáváním platných vstupních dat na signálech DATA_RED, DATA_GREEN a DATA_BLUE.

Popis vstupních a výstupních signálů entity řadiče:

  • DATA_RED, DATA_GREEN, DATA_BLUE - hodnoty barev RGB pro požadovaný obrazový bod

  • MODE - nastavení grafického řežimu VGA

  • ADDR_ROW, ADDR_COLUMN - číslo řádku a číslo sloupce určující pozici bodu, který se bude zobrazovat

  • CLK - vstupní hodinový signál řadiče (frekvence dle rozlišení!)

  • RST - reset řadiče

  • ENABLE - aktivace řadiče

  • VGA_RED, VGA_GREEN, VGA_BLUE, VGA_HSYNC, VGA_VSYNC - signály připojené na VGA port

Zobrazeno: 3878x Naposledy: 19.11.2017 08:06:23