Obsah:
- Krok 1: Materiály
- Krok 2: VÝSTUP - řadič VGA, část 1
- Krok 3: VÝSTUP - řadič VGA, část 2
- Krok 4: VÝSTUP - Ovladač HDMI Část 1
- Krok 5: VÝSTUP - Ovladač HDMI, část 2
- Krok 6: Zobrazení obrázků z RAM
- Krok 7: VÝSTUP - KONEC SDK
Video: Zynq Image Enhancement System: 7 kroků
2024 Autor: John Day | [email protected]. Naposledy změněno: 2024-01-30 08:23
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
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
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
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
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
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
Úč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
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:
Systém třídění barev: Systém založený na Arduinu se dvěma pásy: 8 kroků
Systém třídění barev: Systém založený na Arduinu se dvěma pásy: Přeprava a/nebo balení produktů a položek v průmyslové oblasti se provádí pomocí linek vyrobených pomocí dopravníkových pásů. Tyto pásy pomáhají přesouvat předmět z jednoho bodu do druhého určitou rychlostí. Některé úlohy zpracování nebo identifikace mohou být
WIDI - Bezdrátové HDMI pomocí Zybo (Zynq Development Board): 9 kroků (s obrázky)
WIDI - Bezdrátové HDMI pomocí Zybo (Zynq Development Board): Přáli jste si někdy, abyste mohli připojit svůj televizor k počítači nebo notebooku jako externí monitor, ale nechtěli jste mít v cestě všechny ty otravné kabely? Pokud ano, tento návod je právě pro vás! Přestože existuje několik produktů, které tohoto cíle dosahují
Internetový zabezpečovací systém DSC Home Security System: 22 kroků
Internet povolen DSC Home Security System: Upravte stávající systém DSC Home Security tak, aby umožňoval internet a byl monitorován sám. Tento návod předpokládá, že máte fungující Raspberry Pi. Upozorňujeme, že tato implementace má následující nedostatky: Pokud zloděj přeruší přicházející kabel DSL
Kvadrokoptéra využívající desku Zybo Zynq-7000: 5 kroků
Kvadrokoptéra využívající desku Zybo Zynq-7000: Než začneme, zde jsou některé věci, které byste chtěli k projektu: Seznam dílů 14 Střídavých motorů 1100KV 4x
Jak správně připojit a nastavit mini HiFi policový systém (zvukový systém): 8 kroků (s obrázky)
Jak správně připojit a nastavit mini HiFi policový systém (zvukový systém): Jsem člověk, kterého baví učit se o elektrotechnice. Jsem střední škola na Ann Richards School for Young Women Leaders. Dělám tento návod, abych pomohl každému, kdo si chce užít svou hudbu z Mini LG HiFi Shelf Syste