Obsah:

Zynq Image Enhancement System: 7 kroků
Zynq Image Enhancement System: 7 kroků

Video: Zynq Image Enhancement System: 7 kroků

Video: Zynq Image Enhancement System: 7 kroků
Video: Image Processing on Zynq (FPGAs) : Part 3 Design of MAC 2024, Červenec
Anonim
Zynq Image Enhancement System
Zynq Image Enhancement System
Zynq Image Enhancement System
Zynq Image Enhancement System

Jak už z názvu pravděpodobně vyplývá, cílem tohoto projektu je vytvořit systém pro vylepšení obrazu pomocí ZYNQ ApSOC. Konkrétněji si přejeme vybudovat systém, který dokáže odstranit mlhu z obrázků nebo videa. Tento systém převezme za špatných podmínek vizuální data jako vstup, zpracuje je pomocí technik vylepšení obrazu a poté vydá výsledek.

Projekt byl sestaven a testován na desce Digilent Zybo, ale fungovat by měla i další zařízení ZYNQ.

Tento projekt rozdělíme na 3 části:

1) INPUT = Vstup obrazu přes ethernet z počítače/kamery

2) PROCES = Zpracování obrázku

3) VÝSTUP = Výstup obrazu přes rozhraní HDMI

Velmi neintuitivním způsobem začneme výstupní částí projektu (to nám poskytne lepší možnosti ladění na cestě), pokračujeme vstupem a dokončíme část zpracování.

Krok 1: Materiály

Materiály
Materiály

K dokončení tohoto projektu budete potřebovat:

HARDWARE

- jakákoli deska ZYNQ s HDMI a ethernetem by měla fungovat / používám Digilent Zybo

- USB A na micro B USB kabel

- HDMI kabel

- Ethernetový kabel

- Displej se vstupem HDMI

SOFTWARE

- Xilinx Vivado

- Xilinx SDK

Krok 2: VÝSTUP - řadič VGA, část 1

VÝSTUP - řadič VGA, část 1
VÝSTUP - řadič VGA, část 1

Naše vizuální data budeme odesílat pomocí portu HDMI přítomného na desce. Port HDMI je připojen k PL (Programmable Logic = FPGA) straně ZYNQ a budeme pro něj muset navrhnout ovladač ve VHDL. Pokud jste někdy navrhli VGA řadič, najdete to velmi podobné. Načasování pro HDMI a VGA je ve skutečnosti stejné, ve skutečnosti můžete pro získání ovladače HDMI stavět na stávajícím řadiči VGA.

Pro lepší pochopení toho, co se ve skutečnosti děje, nejprve navrhneme VGA řadič

Chceme zobrazovat v rozlišení 1920x1080.

Řadič VGA je zodpovědný za postupný přenos dat pixelů (ve formátu RGB), pixel po pixelu na displej. Mimo skutečnou oblast zobrazovací oblasti 1920 x 1080 existují také některé "hraniční" oblasti, jmenovitě: přední veranda, zadní veranda a retrace. Velikost v pixelech těchto oblastí je standardní a specifická pro každé rozlišení. Tyto oblasti se ve skutečnosti NEOBJEVÍ na obrazovce, ale jsou povinné a barva pixelů v této oblasti musí být černá. Platnou otázkou by bylo, proč jsou tyto další oblasti potřebné. Tato otázka odporuje účelu tohoto pokynu, ale pokud jste zvědaví, doporučil bych vám provést další průzkum online.

Toto je dobré video vysvětlující rozhraní VGA

V našem případě chceme zobrazit v rozlišení 1920*1080, a toto jsou načasování:

Horizontální zobrazovací plocha = 1920 pixelů

Horizontální přední veranda = 88 pixelů

Horizontální zadní veranda = 148 pixelů

Horizontální retrace = 44 pixelů

Svislá oblast zobrazení = 1080 pixelů

Svislá přední veranda = 4 pixely

Vertikální zadní veranda = 36 pixelů

Vertikální retrace = 5 pixelů

(Zde najdete načasování dalších řešení

Naše skutečné rozlišení tedy bude 2200 x 1125. Chceme 60 fps (snímků za sekundu), takže naše pixelové hodiny budou 60*2200*1125 = 148,5 MHz. Na desce Zybo jsou k dispozici hodiny 125 Mhz. K vygenerování potřebných pixelových hodin 148,5 MHz použijeme IP MMCM.

Krok 3: VÝSTUP - řadič VGA, část 2

VÝSTUP - řadič VGA, část 2
VÝSTUP - řadič VGA, část 2

S teoretickým pozadím z předchozího kroku byste měli být schopni navrhnout vlastní VGA řadič. Poskytnu vám projekt Vivado, který to dělá, ale radím vám, abyste se alespoň pokusili nejprve to udělat sami.

Většina portů VGA vám nedává 8 bitů na barevný kanál na pixel (viz obrázek výše), takže budete muset přizpůsobit design počtu pinů na barvu, kterou deska poskytuje (to však není problém pro HDMI).

Design namaluje celou obrazovku modře, kromě levého horního pixelu, který bude červený. Je třeba poznamenat, že tento projekt využívá omezení pro představenstvo ZYBO. Pokud tedy chcete spustit tento projekt na jiné desce, měli byste aktualizovat soubor omezení a přizpůsobit počet pinů na barvu.

Podívejte se na obrázek č. 2. Pamatujte, že zatímco náš řadič VGA vydává 5/6 bitů na barvu, tyto bity se před procházením kabelu převádějí na jeden analogový signál pro každý barevný kanál (červený, zelený a modrý).

Krok 4: VÝSTUP - Ovladač HDMI Část 1

VÝSTUP - Ovladač HDMI Část 1
VÝSTUP - Ovladač HDMI Část 1

Nyní, když víme, jak funguje řadič VGA, a máme funkční design, můžeme pokračovat s ovladačem HDMI. Ovladač HDMI ve skutečnosti použije veškerý kód, který jsme vyvinuli v řadiči VGA. HDMI a VGA používají stejné časování a stejné signály. Rozdíl se objeví na výstupních pinech.

Zatímco VGA používá pro každou barvu jeden vodič a přenáší přes něj analogový signál, HDMI přenáší data digitálně po 1 bitu pro každou barvu a používá diferenciální signalizaci. Diferenciální signalizace znamená, že pro každý bit má HDMI 2 piny s jedním opačným. Pokud bychom tedy chtěli vyslat signál „1“, vyslali bychom „1“na vodič a „1“na druhém vodiči negovaný. Tím je zajištěna integrita signálu a více si o tom můžete přečíst zde https://goo.gl/6CPCzB. Máme jeden z těchto kanálů pro každou barvu, ČERVENÝ, ZELENÝ a MODRÝ a jeden pro hodiny. Vzhledem ke specifikům diferenciální signalizace musí být signály, které vysíláme přes hdmi, stejnosměrně vyvážené, což znamená, že počet 1 a 0 musí být v určitém časovém období zhruba stejný. Abychom toho dosáhli, použijeme kódování 8b/10b. Hodně se o tom, jak funguje diferenciální signalizace a kódování 8b/10b, můžete dozvědět ze specifikace DVI zde https://goo.gl/hhh8Ge (DVI a HDMI používají stejné video signály).

Krok 5: VÝSTUP - Ovladač HDMI, část 2

VÝSTUP - Ovladač HDMI, část 2
VÝSTUP - Ovladač HDMI, část 2

Dost teorie, pojďme k našemu projektu. Zatímco v řadiči VGA jsme se dostali s hodinami 148,5 MHz, zde budeme muset poskytnout 10krát vyšší frekvenci, protože chceme vysílat 8 bitů pro každou barvu a používat kódování 8b/10b, které překládá na 10 bitů na pixel a 10 *148,5 MHz = 1485 MHz. To je obrovská frekvence, kterou nelze získat na desce Zybo. Naštěstí jsme v rukávu dostali pár triků. Můžeme spravovat 5*148,5MHz = 742,5MHz a použijeme IP OSERDES (serializátor) k přenosu dat jak na stoupající, tak na sestupné hraně hodin 742,5Mhz, takže ve skutečnosti získáme data přenášená na 1485MHz. Vivado nám poskytne několik upozornění na načasování a vždy byste mohli jít na nižší rozlišení s menšími hodinami, ale protože to funguje, zatím nám to nevadí (varování souvisejí s tím, že vyrovnávací paměti hodin nejsou oficiálně podporují frekvence vyšší než 464 MHz).

Co tedy musíme udělat, je zakódovat data z výstupu našeho ovladače VGA ve formátu 8b/10b a poté je serializovat, jak je uvedeno výše. Také budeme muset do projektu přidat další MMCM pro generování hodin 742,5 MHz pro serializaci.

Níže jsem připojil soubory vhdl pro kodér a serializátor. Nejprve musíte zakódovat kanály RGB a poté je serializovat.

Příklad pro červený kanál:

TMDS_encoder_RED: TMDS_encoder

mapa portů (clk148, red_channel_8bits, c_red, video_on, encoded_red_10bits);

Serialiser_RED: Serialiser10_1

mapa portů (clk148, clk742, encoded_red_10bits, reset, red_serial_1bit);

Vstup „c“do TMDS_encoder je „00“pro červenou a zelenou a „vsync & hsync“pro modrou (to je součástí specifikace DVI

Krok 6: Zobrazení obrázků z RAM

Zobrazení obrázků z RAM
Zobrazení obrázků z RAM

Účelem ovladače HDMI je zobrazit zpracované obrázky. Nyní, když je ovladač implementován a připraven k provozu, bychom měli přemýšlet o krmení tohoto ovladače daty. Vzhledem k tomu, že velká část procesu vylepšení obrazu proběhne v systému PS (Processing System = ARM Processor) a výsledné obrázky budou umístěny v paměti DDR RAM. Potřebujeme tedy způsob, jak dostat data z RAM do ovladače HDMI.

Abyste toho dosáhli, budete potřebovat 3 IP:

1) VDMA (přímý přístup k paměti videa)

2) VTC (ovladač časování videa)

3) Stream to Video Out (od této chvíle tomu budeme říkat S2VO)

S2VO ve skutečnosti poskytne na výstup signál RGB 24BIT a potřebné signály HSYNC a VSYNC. Tuto část ovladače HDMI tedy můžeme vynechat.

Tyto IP adresy byste měli přidat do návrhu, nakonfigurovat je a vytvořit správná připojení.

Nakonec byste měli dostat něco, co se podobá výše uvedenému schématu.

Krok 7: VÝSTUP - KONEC SDK

VÝSTUP - KONEC SDK
VÝSTUP - KONEC SDK

S veškerým hardwarem nastaveným a připraveným jít nyní musíme software postavit v PS. Exportujeme hardware a bitstream a spustíme SDK.

1) Soubor -> Export -> Exportovat hardware -> Zaškrtněte Zahrnout bitstream a stiskněte OK

2) Soubor -> Spustit SDK

V SDK vytvořte nový projekt aplikace.

3) Soubor -> Nový -> Projekt aplikace

4) Vyberte název projektu a stiskněte Další

5) Vyberte šablonu „Hello World“a stiskněte Dokončit

Aplikace v sadě SDK bude muset naprogramovat VDMA. K dosažení tohoto cíle se používá několik standardních funkcí (až budu mít čas, půjdu do podrobností).

Abychom mohli otestovat náš design, použijeme funkci SDK Restore (Xilinx Tools -> Dump/Restore) k vložení obrázku do paměti DDR RAM a jeho zobrazení pomocí našeho ovladače HDMI. Obrázek můžete načíst kamkoli chcete (kromě některých malých omezených oblastí na začátku paměti). Pro náš příklad jsme vybrali adresu 16777216 a velikost souboru 8294400 = 1920*1080*4 (4 kanály = RGB + alfa).

Funguje to !

Pokračování příště

Doporučuje: