Përmbajtje:

Sistemi i përmirësimit të imazhit Zynq: 7 hapa
Sistemi i përmirësimit të imazhit Zynq: 7 hapa

Video: Sistemi i përmirësimit të imazhit Zynq: 7 hapa

Video: Sistemi i përmirësimit të imazhit Zynq: 7 hapa
Video: Весь мир был потрясён. Вот что обнаружили учёные на Марсе! Верится с трудом! 2024, Korrik
Anonim
Sistemi i përmirësimit të imazhit Zynq
Sistemi i përmirësimit të imazhit Zynq
Sistemi i përmirësimit të imazhit Zynq
Sistemi i përmirësimit të imazhit Zynq

Siç mund ta kuptoni nga titulli, qëllimi i këtij projekti është të krijojë një Sistem të Përmirësimit të Imazhit duke përdorur ZYNQ ApSOC. Më konkretisht, ne dëshirojmë të ndërtojmë një sistem që mund të pastrojë mjegullën nga imazhet ose videot. Ky sistem do të marrë në kushte të këqija të dhëna vizuale si hyrje, do t'i përpunojë ato duke përdorur teknika të zgjerimit të imazhit dhe më pas do të nxjerrë rezultatin.

Projekti u ndërtua dhe u testua në Bordin Digilent Zybo, por pajisjet e tjera ZYNQ duhet të funksionojnë gjithashtu.

Ne do ta ndajmë këtë projekt në 3 pjesë:

1) INPUT = Futni Imazhin përmes Ethernet nga Kompjuteri/Kamera

2) PROCESI = Përpunoni Imazhin

3) OUTPUT = Nxjerr imazhin përmes një ndërfaqe HDMI

Në një mënyrë shumë kundërintuitive do të fillojmë me pjesën dalëse të projektit (kjo do të na japë mundësi më të mira të korrigjimit përgjatë rrugës) të vazhdojmë me hyrjen dhe të përfundojmë me pjesën e përpunimit.

Hapi 1: Materialet

Materiale
Materiale

Për të përfunduar këtë projekt do t'ju duhet:

HARDWARE

- çdo Bord ZYNQ me HDMI dhe Ethernet duhet të funksionojë / Unë jam duke përdorur Digynt Zybo

- Kabllo USB A në mikro B USB

- kabllo HDMI

- Kabllo Ethernet

- Ekran me hyrje HDMI

SOFTWARE

- Xilinx Vivado

- Xilinx SDK

Hapi 2: OUTPUT - Kontrolluesi VGA Pjesa 1

OUTPUT - Kontrolluesi VGA Pjesa 1
OUTPUT - Kontrolluesi VGA Pjesa 1

Ne do të nxjerrim të dhënat tona vizuale duke përdorur portën HDMI të pranishme në tabelë. Porta HDMI është e lidhur me anën PL (Logjika e Programueshme = FPGA) e ZYNQ dhe do të na duhet të krijojmë një kontrollues në VHDL për të. Nëse keni krijuar ndonjëherë një kontrollues VGA, do ta gjeni këtë shumë të ngjashëm. Kohët për HDMI dhe VGA janë në të vërtetë të njëjta, në fakt ju mund të mbështeteni në një kontrollues ekzistues VGA për të marrë një kontrollues HDMI.

Për një kuptim më të mirë të asaj që po ndodh në të vërtetë, së pari do të krijojmë një kontrollues VGA

Ne duam të shfaqim në një rezolucion prej 1920x1080.

Kontrolluesi VGA është përgjegjës për transmetimin e të dhënave të pikselave (në formatin RGB) në mënyrë sekuenciale, piksel pas piksel në ekran. Jashtë zonës aktuale të ekranit të 1920x1080 ka edhe disa zona "kufitare", domethënë: verandën e përparme, verandën e pasme dhe retrace. Madhësia në piksele e këtyre zonave është standarde dhe specifike për çdo rezolutë. Këto zona NUK shfaqen në të vërtetë në ekran, por ato janë të detyrueshme dhe ngjyra e pikselave në këtë zonë duhet të jetë e zezë. Një pyetje e vlefshme do të ishte pse nevojiten këto zona shtesë. Kjo pyetje kundërshton qëllimin e këtij udhëzimi, por nëse jeni kurioz, unë do t'ju inkurajoja të bëni kërkime të mëtejshme në internet.

Kjo është një video e mirë që shpjegon ndërfaqen VGA

Në rastin tonë ne duam të shfaqim në një rezolucion prej 1920*1080, dhe këto janë afatet:

Zona horizontale e ekranit = 1920 piksele

Portiku Horizontal i Fronit = 88 piksele

Portiku horizontal prapa = 148 piksele

Përsëritja horizontale = 44 piksele

Zona vertikale e ekranit = 1080 piksele

Portiku vertikal i përparmë = 4 piksele

Portiku vertikal i pasmë = 36 piksele

Rikthimi vertikal = 5 piksele

(Këtu mund të gjeni kohën për rezolutat e tjera

Pra, rezolucioni ynë aktual do të jetë 2200 x 1125. Ne duam 60 fps (kuadro për sekondë) kështu që ora jonë piksel do të jetë 60*2200*1125 = 148.5 MHz. Në Bordin Zybo sigurohet një orë 125 Mhz. Ne do të përdorim një IP MMCM për të gjeneruar orën Pixel 148.5 MHz që na nevojitet.

Hapi 3: OUTPUT - Kontrolluesi VGA Pjesa 2

OUTPUT - Kontrolluesi VGA Pjesa 2
OUTPUT - Kontrolluesi VGA Pjesa 2

Me sfondin teorik nga hapi i mëparshëm ju duhet të jeni në gjendje të krijoni vetë kontrolluesin VGA. Unë do t'ju ofroj një projekt Vivado që e bën këtë, por ju këshilloj që së paku të përpiqeni ta bëni vetë në radhë të parë.

Shumica e porteve VGA nuk ju japin 8 bit për kanal ngjyrash për piksel (shikoni imazhin më lart) kështu që do t'ju duhet të përshtatni modelin me numrin e kunjave për ngjyrë që ofron Bordi (megjithatë ky nuk është problem për HDMI).

Dizajni do të pikturojë të gjithë ekranin blu, përveç pikselit të sipërm të majtë i cili do të jetë i kuq. Duhet të theksohet se ky projekt përdor kufizimet për Bordin ZYBO. Pra, nëse doni të ekzekutoni këtë projekt në një bord tjetër, duhet të azhurnoni skedarin e kufizimeve dhe të përshtatni numrin e kunjave për ngjyrë.

Hidhini një sy figurës nr. 2. Kujtoni që ndërsa Kontrolluesi ynë VGA nxjerr 5/6 bit për ngjyrë, ato bit shndërrohen në një sinjal analog për çdo kanal ngjyrash (E kuqe, jeshile dhe blu) para se të kaloni përmes kabllit.

Hapi 4: OUTPUT - Kontrolluesi HDMI Pjesa 1

OUTPUT - Kontrolluesi HDMI Pjesa 1
OUTPUT - Kontrolluesi HDMI Pjesa 1

Tani që e dimë se si funksionon kontrolluesi VGA dhe kemi një dizajn pune, mund të vazhdojmë me kontrolluesin HDMI. Kontrolluesi HDMI në të vërtetë do të përdorë të gjithë kodin që kemi zhvilluar në kontrolluesin VGA. HDMI dhe VGA përdorin të njëjtat kohë dhe të njëjtat sinjale. Dallimi shfaqet në kunjat e daljes.

Ndërsa VGA përdor një tel për secilën ngjyrë dhe transmeton një sinjal analog në të gjithë atë, HDMI transmeton të dhënat në mënyrë dixhitale 1 bit në të njëjtën kohë për secilën ngjyrë dhe përdor sinjalizim diferencial. Sinjalizimi diferencial nënkupton që për secilin bit HDMI ka 2 kunja me njërën të kundërtën e tjetrës. Pra, nëse do të donim të transmetonim një sinjal '1' ne do të transmetonim '1' në një tel dhe '1' të mohuar në telin tjetër. Kjo siguron integritetin e sinjalit dhe mund të lexoni më shumë rreth tij këtu https://goo.gl/6CPCzB. Ne kemi një nga këto kanale për secilën ngjyrë, KUQ, GREEN dhe BLUE dhe një për orën. Për shkak të specifikave të sinjalizimit diferencial, sinjalet që po dërgojmë përmes hdmi duhet të jenë të balancuara në DC, që do të thotë se numri i 1 -ve dhe 0 -ve duhet të jetë afërsisht i barabartë në një dritare të caktuar kohe. Për ta arritur këtë ne do të përdorim kodimin 8b/10b. Mund të mësoni shumë se si funksionon sinjalizimi diferencial dhe kodimi 8b/10b nga specifikimi DVI këtu https://goo.gl/hhh8Ge (DVI dhe HDMI përdorin të njëjtat sinjale video).

Hapi 5: OUTPUT - Kontrolluesi HDMI Pjesa 2

OUTPUT - Kontrolluesi HDMI Pjesa 2
OUTPUT - Kontrolluesi HDMI Pjesa 2

Mjaft teori, le të shkojmë te projekti ynë. Ndërsa në Kontrolluesin VGA u larguam me një orë 148.5 MHz, këtu do të na duhet të sigurojmë 10 herë atë frekuencë sepse duam të transmetojmë 8 bit për secilën ngjyrë dhe duke përdorur kodimin 8b/10b që përkthehet në 10 bit për pixel dhe 10 *148.5MHz = 1485MHz. Kjo është një frekuencë e madhe që nuk mund të merret në Bordin Zybo. Për fat të mirë kemi disa truke në mëngë. Ne mund të menaxhojmë 5*148.5MHz = 742.5MHz dhe ne do të përdorim një IP OSERDES (serializer) për të transmetuar të dhëna si në skajin në rritje ashtu edhe në rënie të orës 742.5Mhz, kështu që në të vërtetë do të marrim të dhëna të transmetuara në 1485MHz. Vivado do të na japë disa paralajmërime për kohën dhe ju gjithmonë mund të shkoni për një rezolucion më të ulët me një orë më të vogël, por meqenëse funksionon, ne nuk e kemi parasysh atë tani për tani (paralajmërimet lidhen me faktin se tamponët e orës nuk zyrtarisht mbështesin frekuenca më të larta se 464MHz).

Pra, ajo që duhet të bëjmë është të kodojmë të dhënat nga dalja jonë e VGA Controller në formatin 8b/10b dhe pastaj t'i serializojmë siç u përmend më lart. Ne gjithashtu do të duhet të shtojmë një MMCM tjetër në projekt për të gjeneruar orën 742.5MHz për serializim.

Unë i bashkëngjisja skedarëve vhdl për koduesin dhe serializuesin. Së pari duhet të kodoni kanalet RGB dhe pastaj t'i serializoni ato.

Shembull për kanalin e kuq:

TMDS_encoder_RED: TMDS_encoder

harta e portit (clk148, red_channel_8bits, c_red, video_on, encoded_red_10bits);

Serialiser_RED: Serialiser10_1

harta e portit (clk148, clk742, encoded_red_10bits, reset, red_serial_1bit);

Hyrja "c" në koduesin TMDS është "00" për të kuqen dhe jeshilen dhe "vsync & hsync" për ngjyrën blu (kjo është pjesë e specifikimit DVI

Hapi 6: Shfaqja e imazheve nga RAM

Shfaqja e imazheve nga RAM
Shfaqja e imazheve nga RAM

Qëllimi i kontrolluesit HDMI është të shfaqë imazhet e përpunuara. Tani, me kontrolluesin e zbatuar dhe gati për të shkuar ne duhet të mendojmë për ta ushqyer këtë kontrollues me të dhëna. Duke pasur parasysh se një pjesë e madhe e procesit të përmirësimit të imazhit do të zhvillohet në PS (Sistemi i përpunimit = Procesori ARM) dhe imazhet e rezultuara do të banojnë në RAM DDR. Pra, ne kemi nevojë për një mënyrë për të marrë të dhënat nga RAM në kontrolluesin HDMI.

Për ta arritur këtë do t'ju duhen 3 IP:

1) VDMA (Video Direct Memory Access)

2) VTC (Kontrolluesi i kohës së videos)

3) Transmetimi në Video Out (ne do ta quajmë S2VO tani e tutje)

S2VO në të vërtetë do të sigurojë një sinjal RGB 24BIT në dalje dhe sinjalet e nevojshme HSYNC dhe VSYNC. Kështu që ne mund ta lëmë atë pjesë të kontrolluesit HDMI jashtë.

Ju duhet t'i shtoni këto IP në modelin tuaj, t'i konfiguroni ato dhe të bëni lidhjet e duhura.

Më në fund ju duhet të merrni diçka që i ngjan skemës së mësipërme.

Hapi 7: OUTPUT - SDK END

DALJA - FUNDI i SDK -së
DALJA - FUNDI i SDK -së

Me të gjithë pajisjen e vendosur dhe gati për të shkuar tani duhet të ndërtojmë softuerin në PS. Ne do të eksportojmë harduerin dhe bitstream -in dhe do të lançojmë SDK -në.

1) File -> Export -> Export Hardware -> Check Include Bitstream dhe Shtyp OK

2) Skedari -> Nis SDK

Në SDK krijoni një projekt të ri aplikimi.

3) Skedari -> E Re -> Projekti i Aplikimit

4) Zgjidhni një emër për projektin tuaj dhe shtypni Next

5) Zgjidhni modelin "Përshëndetje Botërore" dhe shtypni Finish

Aplikacioni në SDK do të duhet të programojë VDMA. Ka disa funksione standarde të përdorura për ta arritur këtë (do të hyj në detaje kur të kem kohë).

Për të testuar modelin tonë, ne do të përdorim veçorinë SDK Restore (Tools Xilinx -> Dump/Restore) për të futur një imazh në kujtesën RAM DDR dhe për ta shfaqur atë duke përdorur kontrolluesin tonë HDMI. Mund ta ngarkoni imazhin kudo që dëshironi (përveç disa zonave të vogla të kufizuara në fillim të kujtesës). Për shembullin tonë ne zgjodhëm adresën 16777216 dhe madhësinë e skedarit 8294400 = 1920*1080*4 (4 kanale = RGB + alfa).

Punon !

Vazhdon

Recommended: