Obsah:

Systém vylepšenia obrazu Zynq: 7 krokov
Systém vylepšenia obrazu Zynq: 7 krokov

Video: Systém vylepšenia obrazu Zynq: 7 krokov

Video: Systém vylepšenia obrazu Zynq: 7 krokov
Video: FPGA Twitch 02 - Работа с IP ядрами в Xilinx Vivado: UG939 Design with IP tutorial (часть 1 из 4) 2024, November
Anonim
Systém vylepšenia obrazu Zynq
Systém vylepšenia obrazu Zynq
Systém vylepšenia obrazu Zynq
Systém vylepšenia obrazu Zynq

Ako ste asi z názvu pochopili, cieľom tohto projektu je vytvoriť systém na vylepšenie obrazu pomocou ZYNQ ApSOC. Konkrétnejšie si želáme vybudovať systém, ktorý dokáže odstrániť hmlu z obrázkov alebo videa. Tento systém bude za nevhodných podmienok prijímať vizuálne údaje ako vstup, spracuje ich pomocou techník vylepšenia obrazu a potom vygeneruje výsledok.

Projekt bol zostavený a testovaný na doske Digilent Zybo, ale fungovať by mali aj ďalšie zariadenia ZYNQ.

Tento projekt rozdelíme na 3 časti:

1) INPUT = Vstupný obraz cez ethernet z počítača/fotoaparátu

2) PROCES = Spracujte obrázok

3) VÝSTUP = Výstup obrazu prostredníctvom rozhrania HDMI

Veľmi neintuitívnym spôsobom začneme výstupnou časťou projektu (to nám poskytne lepšie možnosti ladenia), pokračujeme vstupom a skončíme časťou spracovania.

Krok 1: Materiály

Materiály
Materiály

Na dokončenie tohto projektu budete potrebovať:

HARDWARE

- akákoľvek doska ZYNQ s HDMI a ethernetom by mala fungovať / používam Digilent Zybo

- USB kábel USB A na micro B USB

- kábel HDMI

- Ethernetový kábel

- Displej so vstupom HDMI

SOFTVÉR

- Xilinx Vivado

- Xilinx SDK

Krok 2: VÝSTUP - Ovládač VGA, časť 1

VÝSTUP - Ovládač VGA, časť 1
VÝSTUP - Ovládač VGA, časť 1

Naše vizuálne údaje budeme prenášať pomocou portu HDMI prítomného na doske. Port HDMI je pripojený k PL (Programmable Logic = FPGA) strane ZYNQ a budeme naň musieť navrhnúť ovládač vo VHDL. Ak ste niekedy navrhli VGA radič, bude sa vám to veľmi podobať. Časovanie pre HDMI a VGA je v skutočnosti rovnaké, v skutočnosti môžete na získanie radiča HDMI stavať na existujúcom radiči VGA.

Aby sme lepšie pochopili, čo sa vlastne deje, najskôr navrhneme VGA radič

Chceme zobrazovať v rozlíšení 1920x1080.

VGA radič je zodpovedný za postupný prenos pixelových dát (vo formáte RGB), pixel po pixeli na displej. Mimo skutočnej oblasti zobrazovacej plochy 1920 x 1080 existujú aj niektoré "hraničné" oblasti, konkrétne: predná veranda, zadná veranda a spätné sledovanie. Veľkosť v pixeloch týchto oblastí je štandardná a špecifická pre každé rozlíšenie. Tieto oblasti sa v skutočnosti NEOBJAVUJÚ na obrazovke, ale sú povinné a farba pixelov v tejto oblasti musí byť čierna. Platnou otázkou by bolo, prečo sú tieto ďalšie oblasti potrebné. Táto otázka je v rozpore s účelom tohto pokynu, ale ak vás to zaujíma, povzbudil by som vás, aby ste urobili ďalší výskum online.

Toto je dobré video vysvetľujúce rozhranie VGA

V našom prípade chceme zobraziť v rozlíšení 1920*1080 a toto sú načasovania:

Horizontálna zobrazovacia plocha = 1920 pixelov

Horizontálna predná veranda = 88 pixelov

Horizontálna zadná veranda = 148 pixelov

Horizontálne retrace = 44 pixelov

Vertikálna oblasť zobrazenia = 1080 pixelov

Vertikálna predná veranda = 4 pixely

Vertikálna zadná veranda = 36 pixelov

Zvislé sledovanie = 5 pixelov

(Tu nájdete načasovanie ďalších uznesení

Takže naše skutočné rozlíšenie bude 2200 x 1125. Chceme 60 snímok za sekundu (snímky za sekundu), takže náš takt pixelov bude 60*2200*1125 = 148,5 MHz. Na doske Zybo sú k dispozícii hodiny 125 MHz. Na vygenerovanie potrebných pixelových hodín 148,5 MHz použijeme IP MMCM.

Krok 3: VÝSTUP - Ovládač VGA, časť 2

VÝSTUP - Ovládač VGA, časť 2
VÝSTUP - Ovládač VGA, časť 2

Na základe teoretických znalostí z predchádzajúceho kroku by ste mali byť schopní navrhnúť vlastný ovládač VGA. Poskytnem vám projekt Vivado, ktorý to robí, ale radím vám, aby ste sa najskôr pokúsili vytvoriť ho najskôr sami.

Väčšina portov VGA vám neposkytuje 8 bitov na farebný kanál na pixel (pozri obrázok vyššie), takže budete musieť prispôsobiť dizajn počtu pinov na farbu, ktoré doska poskytuje (to však nie je problém pre HDMI).

Dizajn namaluje celú obrazovku na modro, s výnimkou ľavého horného pixelu, ktorý bude červený. Je potrebné poznamenať, že tento projekt využíva obmedzenia pre predstavenstvo ZYBO. Ak teda chcete spustiť tento projekt na inej doske, mali by ste aktualizovať súbor obmedzení a prispôsobiť počet pinov na farbu.

Pozrite sa na obrázok č. 2. Pamätajte si, že zatiaľ čo náš ovládač VGA vydáva 5/6 bitov na farbu, tieto bity sa pred prechodom káblom prevedú na jeden analógový signál pre každý farebný kanál (červený, zelený a modrý).

Krok 4: VÝSTUP - Ovládač HDMI, časť 1

VÝSTUP - Ovládač HDMI, časť 1
VÝSTUP - Ovládač HDMI, časť 1

Teraz, keď vieme, ako funguje ovládač VGA, a máme funkčný dizajn, môžeme pokračovať s ovládačom HDMI. Ovládač HDMI skutočne použije všetok kód, ktorý sme vyvinuli v ovládači VGA. HDMI a VGA používajú rovnaké načasovanie a rovnaké signály. Rozdiel sa objaví na výstupných kolíkoch.

Kým VGA používa pre každú farbu jeden vodič a prenáša cez neho analógový signál, HDMI prenáša údaje digitálne vždy po 1 bite pre každú farbu a používa diferenciálnu signalizáciu. Diferenciálna signalizácia znamená, že pre každý bit má HDMI 2 piny, z ktorých jeden je opakom druhého. Ak by sme teda chceli prenášať signál „1“, vysielali by sme „1“na vodiči a „1“na druhom vodiči. To zaisťuje integritu signálu a viac si o tom môžete prečítať tu https://goo.gl/6CPCzB. Máme jeden z týchto kanálov pre každú farbu, ČERVENÝ, ZELENÝ a MODRÝ a jeden pre hodiny. Vzhľadom na špecifiká diferenciálnej signalizácie signály, ktoré posielame cez hdmi, musia byť DC vyvážené, to znamená, že počet 1 a 0 musí byť v určitom časovom období zhruba rovnaký. Aby sme to dosiahli, použijeme kódovanie 8b/10b. Veľa o tom, ako funguje diferenciálna signalizácia a kódovanie 8b/10b, sa môžete dozvedieť zo špecifikácie DVI tu https://goo.gl/hhh8Ge (DVI a HDMI používajú rovnaké video signály).

Krok 5: VÝSTUP - Ovládač HDMI, časť 2

VÝSTUP - Ovládač HDMI, časť 2
VÝSTUP - Ovládač HDMI, časť 2

Dosť teórie, poďme na náš projekt. Kým v ovládači VGA sme sa dostali k hodinám 148,5 MHz, tu budeme musieť poskytnúť 10 -násobok tejto frekvencie, pretože chceme prenášať 8 bitov pre každú farbu a používať kódovanie 8b/10b, ktoré sa prekladá na 10 bitov na pixel a 10 *148,5 MHz = 1485 MHz. To je obrovská frekvencia, ktorú nemožno dosiahnuť na doske Zybo. Našťastie sme v rukáve dostali niekoľko trikov. Dokážeme spravovať 5*148,5 MHz = 742,5 MHz a na prenos údajov na stúpajúcej aj klesajúcej hrane hodín 742,5 MHz použijeme IP OSERDES (serializátor), takže údaje skutočne budeme prenášať na frekvencii 1485 MHz. Vivado nám poskytne niekoľko upozornení na načasovanie a vždy by ste mohli s menším hodinami siahnuť po nižšom rozlíšení, ale keďže to funguje, zatiaľ nám to veľmi nevadí (upozornenia súvisia s tým, že vyrovnávacie pamäte hodín oficiálne nie sú podpora frekvencií vyšších ako 464 MHz).

Čo teda musíme urobiť, je zakódovať údaje z nášho výstupu VGA ovládača vo formáte 8b/10b a potom ich serializovať, ako je uvedené vyššie. Tiež budeme musieť do projektu pridať ďalší MMCM na generovanie hodín 742,5 MHz pre serializáciu.

Ďalej som pripojil nižšie uvedené súbory vhdl pre kodér a serializátor. Kanály RGB musíte najskôr zakódovať a potom serializovať.

Príklad pre červený kanál:

TMDS_encoder_RED: TMDS_encoder

mapa portov (clk148, red_channel_8bits, c_red, video_on, encoded_red_10bits);

Serialiser_RED: Serialiser10_1

mapa portov (clk148, clk742, encoded_red_10bits, reset, red_serial_1bit);

Vstup „c“do TMDS_encoder je „00“pre červenú a zelenú a „vsync & hsync“pre modrú (je to súčasť špecifikácie DVI

Krok 6: Zobrazovanie obrázkov z pamäte RAM

Zobrazovanie obrázkov z pamäte RAM
Zobrazovanie obrázkov z pamäte RAM

Účelom ovládača HDMI je zobraziť spracované obrázky. Teraz, keď je ovládač implementovaný a pripravený na použitie, mali by sme premýšľať o napájaní tohto ovládača údajmi. Vzhľadom na to, že veľa procesov vylepšovania obrazu bude prebiehať v systéme PS (Processing System = ARM Processor) a výsledné obrázky budú uložené v pamäti DDR RAM. Potrebujeme teda spôsob, ako dostať údaje z pamäte RAM do ovládača HDMI.

Aby ste to dosiahli, budete potrebovať 3 IP:

1) VDMA (priamy prístup do pamäte videa)

2) VTC (ovládač časovania videa)

3) Stream na video výstup (odteraz ho budeme nazývať S2VO)

S2VO skutočne poskytne na výstup signál RGB 24BIT a potrebné signály HSYNC a VSYNC. Túto časť ovládača HDMI teda môžeme vynechať.

Tieto adresy IP by ste mali pridať do návrhu, nakonfigurovať ich a vytvoriť správne pripojenia.

Nakoniec by ste mali dostať niečo, čo sa podobá schéme vyššie.

Krok 7: VÝSTUP - KONEC SDK

VÝSTUP - KONIEC SDK
VÝSTUP - KONIEC SDK

Keď je všetok hardvér nastavený a pripravený na použitie, musíme teraz softvér postaviť v systéme PS. Exportujeme hardvér a bitový tok a spustíme súpravu SDK.

1) Súbor -> Export -> Exportovať hardvér -> Začiarknite políčko Zahrnúť bitový tok a stlačte tlačidlo OK

2) Súbor -> Spustiť SDK

V SDK vytvorte nový projekt aplikácie.

3) Súbor -> Nový -> Projekt aplikácie

4) Vyberte názov projektu a stlačte tlačidlo Ďalej

5) Vyberte šablónu „Hello World“a stlačte tlačidlo Dokončiť

Aplikácia v SDK bude musieť naprogramovať VDMA. Na tento účel sa používa niekoľko štandardných funkcií (podrobnejšie informácie uvediem, keď budem mať čas).

Na otestovanie nášho dizajnu použijeme funkciu SDK Restore (Xilinx Tools -> Dump/Restore) na vloženie obrázku do pamäte DDR RAM a jeho zobrazenie pomocou nášho ovládača HDMI. Obrázok môžete načítať kdekoľvek chcete (okrem niektorých malých obmedzených oblastí na začiatku pamäte). V našom prípade sme vybrali adresu 16777216 a veľkosť súboru 8294400 = 1920*1080*4 (4 kanály = RGB + alfa).

Funguje to !

Pokračovanie nabudúce

Odporúča: