Čeština / English
Login

Aplikace / Zobrazování textur

Autoři: Zdeněk Vašíček (); Ladislav Čapka

Abstrakt: Aplikace demonstrující zobrazení textur s možností pohybu jednou texturou pomocí klávesnice. Textury se načítají z FLASH paměti FITkitu do BRAM v FPGA, odkud probíhá zobrazování.

Update: 20090326

1. Popis aplikace

vga_text_img.png

Úkolem této aplikace je využití grafického portu pro zobrazování textur (opakující se vzory). Kromě zobrazování textur obsahuje FPGa logiku, která umožňuje pohybovat obrázkem po texturovaném pozadí. Zobrazování pohybujícího se obrázku řídí FPGA pomocí několika komparátorů, které detekují správnou pozici.

Textury a obrázek jsou uloženy v paměti FLASH a pomocí mikrokontroleru se při startu načítají do blokových pamětí RAM (dále jen BRAM), které jsou součástí FPGA. Jedna BRAM slouží k uchování indexu textury (drží tedy obsah celého obrazu) a další tři pro uchování jednotlivých RGB kanálů textur. Mikrokontroler umožňuje aktualizaci textur ve FLASH přes terminál (lze nahrát vlastní textury) a provádí obsluhu posunujícího obrázku pomocí na základě stisku příslušných kláves klávesnice.

Zdrojové kódy pro mikrokontroler a FPGA je možné shlédnout zde.

1.1. Hardwarová část (konfigurace pro FPGA)

Aplikace využívá zobrazení na port VGA pomocí řadiče VGA. K uložení zobrazovaných dat (textur) jsou využity 3 bloky paměti BRAM, kde v každém bloku je uložena jedna barva z kombinace RGB. Pro uložení pozic textur pozadí slouží čtvrtá BRAM. O naplnění těchto BRAM příslušnými daty se stará MCU, který přes adresový dekodér SPI ukládá do všech čtyř BRAM požadovaná data. Dostupné paměti BRAM mají dva nezávislé porty. K jednomu z portů je připojen dekodér SPI, k druhému portu všech bloků BRAM je připojen řadič VGA řízený frekvencí 25 MHz požadovanou pro grafický řežim s rozlišením 640x480 obrazových bodů (pixelů) a obnovovací frekvencí 60 Hz. V aplikaci jsou využity 3 SPI dekodéry. První je připojen na 3 bloky paměti BRAM s obrazovými daty, druhý SPI dekodér je připojen k BRAM, ve kterém je uložena texturovací maska. Poslední SPI dekodér je využit pro manuální ovládání, tj. aktuální data o stavu klávesnice (LINK) dostupné přímo na FITkitu jsou odeslána do MCU a současně je z MCU odeslána aktuální pozice pohyblivého obrázku. FPGA potom zajišťuje na žádost VGA řadiče grafická data, která jsou vždy dostupná v uvedených BRAM a řídí, který typ texturovacího obrázku se má kreslit, případně zajistí i data pohyblivého obrázku. Zapojení jednotlivých komponent řadičů v FPGA společně s vazbou na MCU a výstupní port ukazuje následující obrázek .

vga_text_sch.png

Obrázek 1.1: Blokové schéma aplikace

Nastavení SPI adresových dekodérů je voleno dle požadavků na data. Adresový dekodér SPI, který slouží k aktualizaci RGB dat v BRAM musí pokrýt 9 barevných bitů, ze kterých lze na FITkitu tvořit VGA barvy. Pro danou velikost BRAM byla zvolena velikost obrázku 64x64 pixelů a každá BRAM obsahuje 3 bity jedné barvy RGB. Obrázek je dále rozdělen na 3 texturové obrázky a jeden pohyblivý, všechny o velikosti 32x32 pixelů. Adresový dekodér SPI splňující tuto úlohu má nastaveno 16 datových bitů a 12 adresových.

Druhý adresový dekodér SPI připojený ke čtvrtému bloku BRAM s daty, která definují rozložení texturovacích obrázků, musí pokrýt 3 typy textur a složením textur musí být vyplněno rozlišení 640x480 pixelů. Pro zvolený řadič dostačují 2 bity na texturu, které definují index textury 0 až 2. Při rozlišení 640x480 vyplněné texturou o velikosti 32x32 je nutné 20x15 texturových obrázků. Pro danou aplikaci tedy byla zvolena velikost 32x32 indexů textur.

Poslední řadič musí být schopný předat data o stavu klávesnice a současně pozici pohyblivého obrázku. Pro stav dostupné klávesnice s 16ti tlačítky je nutno využít 16 bitů, obsahujících stav tlačítka. Pro pozici s nutností pokrýt pozici až 624 je požadováno 10 bitů jak pro X tak pro Y. Proto má poslední SPI adresový dekodér 32 (24) datových bitů. Adresování v tomto případě není využito.

1.2. Softwarová část (firmware)

Program pro MCU musí v této aplikaci zastat několik úloh, kterými jsou ukládání dat do paměti flash, aktualizaci dat z flash do BRAM v FPGA a pohyb klávesnicí. Uložení dat do paměti probíhá ve dvou krocích. První krok je uložení obrázku a druhý texturovací maska. K uložení obrázku slouží příkaz FLASH W TEX, po kterém je nutné zadat soubor obsahující příslušná data. Podobně je tomu pro masku, příkaz FLASH W MASK. Druhá část je aktualizace dat z paměti flash do BRAM v FPGA. Toto se děje automaticky po spuštění FITkitu a nebo vynuceně přes terminál příkazem UPDATE TEX. Poslední úlohou MCU je vyhodnocování dat z klávesnice a změna pozice pohyblivého obrázku. Vyhodnocení klávesnice se provádí vždy s určitou prodlevou tak, aby se obrázek nepohyboval příliš rychle.

Struktura vstupních dat

Vstupní data, která tato aplikace vyžaduje, musí mít určitou strukturu. Protože FITkit obsahuje jen 3 bitový D/A převodník před výstupním portem VGA, je zbytečné využívat více než 3 bity. Proto musí být vstupní soubor s texturou reprezentovaný jako 9 bitové RGB (pro každou barvu 3 bity). Pro jednoduchost zpracování při příjmu dat z terminálu do MCU je každý pixel vstupního obrazu zarovnán na 16 bitů, jeden pixel tedy tvoří 2 byty. Velikost obrázku obsahujícího 4 podobrázky je, jak je výše popsáno, 64x64 pixelů. Celý soubor má tedy vždy velikost 8192 bytů. Pozice těchto dat v paměti flash je od adresy 2000h. S druhou částí vstupních dat, kterou je texturovací maska, je situace podobná. Jak je popsáno výše, texturovací data se skládají z indexů textur 0-2 a mají velikost 32x32. Tato data v paměti flash navazují na texturová data a jsou tedy bezprostředně za textorovými daty uložena, což předznačuje počáteční adresu 4000h. Ve vstupním souboru jsou data pro jednoduchost zarovnána vždy na celé byty a velikost souboru je tedy vždy 1024 bytů. V obou dvou případech jsou data v souboru zapsány po řádcích za sebou.

Aby mohla aplikace správně pracovat, musí mít k dispozici alespoň nějaká data. Demonstrační data (tzn. masku a textury) je možné najít v SVN FITkitu v adresáři data.

2. Zprovoznění aplikace

  1. přeložte aplikaci

  2. aktivujte propojku J6 pro povolení periferií PC

  3. naprogramujte MCU a FPGA a spusťte terminálový program

  4. pomocí vhodného terminálu nahrajte do FLASH texturu a masku z adresáře data

    • FLASH W MASK - inicializuje odesílání souboru s maskou pozadí do paměti FLASH

    • FLASH W TEX - inicializuje odesílání souboru s texturami do paměti FLASH

  5. nahrajte textury FPGA

    • UPDATE TEX - aktualizuje textury v FPGA z paměti FLASH

    Nyní by se měl na displeji zobrazit obrázek a pomocí klávesnice je možné s ním pohybovat.

Zobrazeno: 2452x Naposledy: 1.10.2023 10:00:28