Tartalomjegyzék:
- 1. lépés: Anyagok
- 2. lépés: KIMENET - VGA vezérlő 1. rész
- 3. lépés: KIMENET - VGA vezérlő 2. rész
- 4. lépés: KIMENET - HDMI vezérlő 1. rész
- 5. lépés: KIMENET - HDMI vezérlő 2. rész
- 6. lépés: Képek megjelenítése RAM -ból
- 7. lépés: KIMENET - SDK VÉGE
Videó: Zynq képjavító rendszer: 7 lépés
2024 Szerző: John Day | [email protected]. Utoljára módosítva: 2024-01-30 09:43
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
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
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
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
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
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
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
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:
Ultra alacsony fogyasztású WiFi otthoni automatizálási rendszer: 6 lépés (képekkel)
Rendkívül kis teljesítményű WiFi otthoni automatizálási rendszer: Ebben a projektben megmutatjuk, hogyan lehet néhány lépésben felépíteni egy alapvető helyi otthoni automatizálási rendszert. Raspberry Pi -t fogunk használni, amely központi WiFi eszközként fog működni. Míg a végcsomópontokhoz az IOT Cricket -et fogjuk használni az akkumulátor előállításához
Saját fotovoltaikus 5V -os rendszer készítése: 4 lépés (képekkel)
Saját fotovoltaikus 5V-os rendszer készítése: Ez egy bak-átalakítót használ 5 V-os kimenetként az akkumulátor (Li Po/Li-ion) töltésére. És Boost konverter 3,7 V -os akkumulátorról 5 V -os USB kimenetre az 5 V -os eszközökhöz. Hasonló az eredeti rendszerhez, amely ólom -sav akkumulátort használ energiatároló töltésként
Színrendező rendszer: Arduino alapú rendszer két övvel: 8 lépés
Színrendező rendszer: Arduino alapú rendszer két övvel: Az ipari területen lévő termékek és tárgyak szállítása és/vagy csomagolása szállítószalagok segítségével készült vonalakkal történik. Ezek az övek bizonyos sebességgel segítik az elemek egyik pontból a másikba történő áthelyezését. Egyes feldolgozási vagy azonosítási feladatok
WIDI - vezeték nélküli HDMI a Zybo segítségével (Zynq Development Board): 9 lépés (képekkel)
WIDI - vezeték nélküli HDMI a Zybo segítségével (Zynq Development Board): Azt kívánta valaha, hogy a TV -t külső monitorként PC -hez vagy laptophoz tudja csatlakoztatni, de nem akarta, hogy mindezek a bosszantó vezetékek ne legyenek útban? Ha igen, akkor ez az oktatóanyag csak neked szól! Bár vannak olyan termékek, amelyek elérik ezt a célt, egy
Quadcopter a Zybo Zynq-7000 tábla használatával: 5 lépés
Quadcopter a Zybo Zynq-7000 tábla használatával: Mielőtt hozzákezdenénk, íme néhány dolog, amit a projekthez szeretne: Alkatrészlista 1x Digilent Zybo Zynq-7000 tábla 1x Quadcopter keret, amely képes a Zybo rögzítésére (Adobe Illustrator fájl lézeres vágáshoz) 4x Turnigy D3530/ 14 1100KV kefe nélküli motor 4x