Tartalomjegyzék:

Zynq képjavító rendszer: 7 lépés
Zynq képjavító rendszer: 7 lépés

Videó: Zynq képjavító rendszer: 7 lépés

Videó: Zynq képjavító rendszer: 7 lépés
Videó: Начало работы с Zynq 2024, Július
Anonim
Zynq képjavító rendszer
Zynq képjavító rendszer
Zynq képjavító rendszer
Zynq képjavító rendszer

Ahogy valószínűleg a címből is kitűnik, ennek a projektnek a célja egy képjavító rendszer létrehozása a ZYNQ ApSOC használatával. Pontosabban, olyan rendszert szeretnénk felépíteni, amely képes a köd eltávolítására a képekből vagy videókból. Ez a rendszer rossz körülmények között vizuális adatokat használ bemenetként, képjavító technikákkal dolgozza fel, majd adja ki az eredményt.

A projektet a Digilent Zybo Boardon építették és tesztelték, de más ZYNQ eszközöknek is működniük kell.

Ezt a projektet 3 részre osztjuk:

1) INPUT = Bemeneti kép Etherneten keresztül számítógépről/kameráról

2) PROCESS = Feldolgozza a képet

3) OUTPUT = A kép megjelenítése HDMI interfészen keresztül

Nagyon ellentmondó módon kezdjük a projekt kimeneti részével (ezáltal jobb hibakeresési lehetőségeket kapunk az út mentén), folytatjuk a bemenettel, és befejezzük a feldolgozó részt.

1. lépés: Anyagok

Anyagok
Anyagok

A projekt befejezéséhez szüksége lesz:

HARDVER

- bármelyik HDMI -vel és Ethernet -sel rendelkező ZYNQ -kártya működhet / a Digilent Zyboyt használom

- USB A - micro B USB kábel

- HDMI kábel

- Hálózati kábel

- Kijelző HDMI bemenettel

SZOFTVER

- Xilinx Vivado

- Xilinx SDK

2. lépés: KIMENET - VGA vezérlő 1. rész

KIMENET - VGA vezérlő 1. rész
KIMENET - VGA vezérlő 1. rész

Vizuális adatainkat a táblán található HDMI -port segítségével adjuk ki. A HDMI port a ZYNQ PL (Programozható logika = FPGA) oldalához van csatlakoztatva, és ehhez VHDL formátumú vezérlőt kell terveznünk. Ha valaha is tervezett VGA vezérlőt, ezt nagyon hasonlónak találja. A HDMI és a VGA időzítése valójában ugyanaz, valójában építhet egy meglévő VGA -vezérlőre a HDMI -vezérlő beszerzéséhez.

Annak érdekében, hogy jobban megértsük, mi történik valójában, először tervezünk egy VGA vezérlőt

1920x1080 felbontásban szeretnénk megjeleníteni.

A VGA vezérlő feladata a pixeladatok (RGB formátumban) egymás utáni, pixelről pixelre történő továbbítása a kijelzőre. Az 1920x1080 -as tényleges megjelenítési területen kívül néhány "határ" terület is található, nevezetesen: előtér, hátsó veranda és retrace. Ezeknek a területeknek a mérete pixelben szabványos és minden felbontásra jellemző. Ezek a területek valójában NEM jelennek meg a képernyőn, de kötelezőek, és ezen a területen a pixelek színének feketenek kell lennie. Jogos kérdés lenne, hogy miért van szükség ezekre a többletterületekre. Ez a kérdés megcáfolja ennek az utasításnak a célját, de ha kíváncsi vagy rá, arra bátorítalak, hogy végezz online további kutatásokat.

Ez egy jó videó, amely elmagyarázza a VGA interfészt

Esetünkben 1920*1080 felbontásban szeretnénk megjeleníteni, és ezek az időzítések:

Vízszintes megjelenítési terület = 1920 képpont

Vízszintes előlap Veranda = 88 képpont

Vízszintes hátsó tornác = 148 képpont

Vízszintes retrace = 44 képpont

Függőleges megjelenítési terület = 1080 képpont

Függőleges elülső veranda = 4 képpont

Függőleges hátsó tornác = 36 képpont

Függőleges retrace = 5 képpont

(Itt megtalálhatja a többi állásfoglalás időzítését

Tehát a tényleges felbontásunk 2200 x 1125 lesz. 60 fps (képkocka / másodperc) értéket szeretnénk, így a pixelóra 60*2200*1125 = 148,5 MHz lesz. A Zybo Boardon egy 125 Mhz -es óra található. Egy MMCM IP segítségével generáljuk a szükséges 148,5 MHz -es Pixel Clock -ot.

3. lépés: KIMENET - VGA vezérlő 2. rész

KIMENET - VGA vezérlő 2. rész
KIMENET - VGA vezérlő 2. rész

Az előző lépés elméleti hátterével meg kell tudnia tervezni saját VGA vezérlőjét. Biztosítok egy Vivado projektet, amely ezt megteszi, de azt tanácsolom, hogy legalább először próbálja meg egyedül elkészíteni.

A legtöbb VGA -port nem ad 8 bitet színes csatornánként képpontonként (lásd a fenti képet), így a kialakítást hozzá kell igazítania a tábla által biztosított színekhez tartozó csapok számához (ez azonban nem jelent problémát a HDMI számára).

A Design a teljes képernyőt kékre fogja festeni, kivéve a bal felső pixelt, amely piros lesz. Meg kell jegyezni, hogy ez a projekt a ZYBO Board korlátozásait használja. Ha tehát ezt a projektet egy másik táblán kívánja futtatni, frissítse a kényszerfájlt, és módosítsa a színek színkombinációinak számát.

Vessen egy pillantást a sz. 2. Ne feledje, hogy míg a VGA -vezérlőnkönként 5/6 bitet ad ki, ezek a bitek analóg jellé alakulnak minden színcsatorna (piros, zöld és kék) előtt, mielőtt átmennek a kábelen.

4. lépés: KIMENET - HDMI vezérlő 1. rész

KIMENET - HDMI vezérlő 1. rész
KIMENET - HDMI vezérlő 1. rész

Most, hogy tudjuk, hogyan működik a VGA -vezérlő, és van egy működő kialakításunk, folytathatjuk a HDMI -vezérlővel. A HDMI vezérlő valójában a VGA vezérlőben kifejlesztett összes kódot fogja használni. A HDMI és a VGA azonos időzítést és azonos jeleket használ. A különbség a kimeneti csapokon jelenik meg.

Míg a VGA minden színhez egy vezetéket használ, és analóg jelet továbbít, a HDMI a színeket digitálisan továbbítja 1 bitben minden egyes színhez, és differenciális jelzést használ. A differenciális jelzés azt jelenti, hogy minden bitnél a HDMI -nek 2 érintkezője van, az egyik ellentétes a másikkal. Tehát ha az "1" jelet szeretnénk továbbítani, akkor az "1" -et továbbítanánk egy vezetékre, az "1" -et pedig a másik vezetékre. Ez biztosítja a jel integritását, és erről bővebben itt olvashat https://goo.gl/6CPCzB. Van egy ilyen csatorna minden színhez, PIROS, ZÖLD és KÉK, és egy az órához. A differenciáljelzés sajátosságai miatt a hdmi -n keresztül küldött jeleknek egyenletesen kiegyensúlyozottnak kell lenniük, ami azt jelenti, hogy az 1 -esek és a 0 -k számának nagyjából egyenlőnek kell lenniük egy bizonyos időablakban. Ennek érdekében 8b/10b kódolást használunk. Sokat megtudhat a differenciáljelzés és a 8b/10b kódolás működéséről a DVI specifikációból itt: https://goo.gl/hhh8Ge (a DVI és a HDMI ugyanazokat a videojeleket használja).

5. lépés: KIMENET - HDMI vezérlő 2. rész

KIMENET - HDMI vezérlő 2. rész
KIMENET - HDMI vezérlő 2. rész

Elég elmélet, térjünk rá a projektünkre. Míg a VGA vezérlőben megúsztuk a 148,5 MHz -es órát, itt ennek a frekvenciának a tízszeresét kell megadnunk, mert minden színhez 8 bitet akarunk továbbítani, és a 8b/10b kódolást használva, ami 10 bit/pixel és 10 *148,5 MHz = 1485 MHz. Ez óriási gyakoriság, amely nem érhető el a Zybo Boardon. Szerencsére kaptunk néhány trükköt a hüvelyünkben. 5*148,5MHz = 742,5MHz -et tudunk kezelni, és OSERDES (sorosító) IP -t használunk az adatok továbbítására mind a 742,5 MHz -es óra emelkedő, mind csökkenő szélén, így valójában 1485 MHz -en továbbítjuk az adatokat. A Vivado figyelmeztetést ad nekünk az időzítésről, és mindig alacsonyabb felbontást választhat kisebb órával, de mivel működik, egyelőre nem bánjuk (a figyelmeztetések azzal kapcsolatosak, hogy az óra pufferei hivatalosan nem támogatja a 464 MHz -nél magasabb frekvenciákat).

Tehát annyit kell tennünk, hogy kódoljuk a VGA vezérlőkimenetünkből származó adatokat 8b/10b formátumban, majd a fentiek szerint sorosítjuk. Szükségünk lesz még egy MMCM hozzáadására a projekthez a 742,5 MHz -es óra generálásához.

Az alábbiakban csatoltam a kódoló és a sorosító vhdl fájljait. Először kódolni kell az RGB csatornákat, majd sorosítani.

Példa a piros csatornára:

TMDS_encoder_RED: TMDS_encoder

porttérkép (clk148, red_channel_8bits, c_red, video_on, encoded_red_10bits);

Serialiser_RED: Serialiser10_1

porttérkép (clk148, clk742, encoded_red_10bits, reset, red_serial_1bit);

A TMDS_encoder "c" bemenete piros és zöld "00", kék esetén "vsync & hsync" (ez a DVI specifikáció része:

6. lépés: Képek megjelenítése RAM -ból

Képek megjelenítése RAM -ból
Képek megjelenítése RAM -ból

A HDMI vezérlő célja a feldolgozott képek megjelenítése. Most, hogy a vezérlő megvalósult és készen áll, gondolnunk kell arra, hogy ezt a vezérlőt adatokkal tápláljuk. Tekintettel arra, hogy a képjavítási folyamat nagy része a PS -ben (Processing System = ARM Processor) megy végbe, és az eredményül kapott képek a DDR RAM -ban lesznek. Szükségünk van tehát arra, hogy az adatokat a RAM -ból a HDMI -vezérlőbe juttassuk.

Ennek eléréséhez 3 IP -re lesz szüksége:

1) VDMA (Video Direct Memory Access)

2) VTC (videó időzítő vezérlő)

3) Streamelés videó kimenetre (ezentúl S2VO -nak hívjuk)

Az S2VO valójában RGB 24BIT jelet biztosít a kimenetre, valamint a szükséges HSYNC és VSYNC jeleket. Tehát kihagyhatjuk a HDMI -vezérlőnek ezt a részét.

Hozzá kell adnia ezeket az IP -címeket a tervezéshez, konfigurálnia kell őket, és létre kell hoznia a megfelelő kapcsolatokat.

Végül valami hasonlót kell kapnia a fenti vázlathoz.

7. lépés: KIMENET - SDK VÉGE

KIMENET - SDK VÉGE
KIMENET - SDK VÉGE

Az összes hardver beállításával és használatra készen kell állítanunk a szoftvert a PS -be. Exportáljuk a hardvert és a bitfolyamot, és elindítjuk az SDK -t.

1) Fájl -> Exportálás -> Hardver exportálása -> Jelölje be a Bitstream beillesztése lehetőséget, majd nyomja meg az OK gombot

2) Fájl -> Indítsa el az SDK -t

Az SDK -ban hozzon létre egy új alkalmazásprojektet.

3) Fájl -> Új -> Alkalmazási projekt

4) Válassza ki a projekt nevét, majd nyomja meg a Tovább gombot

5) Válassza ki a "Hello World" sablont, és nyomja meg a Befejezés gombot

Az SDK -ban lévő alkalmazásnak be kell programoznia a VDMA -t. Ennek érdekében néhány szabványos funkciót használnak (ha időm engedi, részletezem).

A tervezés teszteléséhez az SDK visszaállítás (Xilinx Eszközök -> Dump/Restore) funkciót használjuk, hogy képet helyezzünk a DDR RAM memóriába és megjelenítsük a HDMI vezérlőnk segítségével. A képet bárhová betöltheti, ahová szeretné (kivéve néhány korlátozott területet a memória elején). Példánkban a 16777216 címet és a 8294400 = 1920*1080*4 fájlméretet választottuk (4 csatorna = RGB + alfa).

Működik !

Folytatjuk

Ajánlott: