Talaan ng mga Nilalaman:

Zynq Sistema ng Pagpapahusay ng Imahe: 7 Mga Hakbang
Zynq Sistema ng Pagpapahusay ng Imahe: 7 Mga Hakbang

Video: Zynq Sistema ng Pagpapahusay ng Imahe: 7 Mga Hakbang

Video: Zynq Sistema ng Pagpapahusay ng Imahe: 7 Mga Hakbang
Video: Криолиполиз Clatuu 2024, Hulyo
Anonim
Zynq System ng Pagpapahusay ng Imahe
Zynq System ng Pagpapahusay ng Imahe
Zynq System ng Pagpapahusay ng Imahe
Zynq System ng Pagpapahusay ng Imahe

Tulad ng marahil na makukuha mo mula sa pamagat, ang layunin ng proyektong ito ay upang makagawa ng isang Image Enhancement System gamit ang ZYNQ ApSOC. Mas partikular, nais naming bumuo ng isang system na maaaring i-clear ang hamog mula sa mga imahe o video. Ang sistemang ito ay kukuha ng hindi magandang kondisyon na visual data bilang input, iproseso ito gamit ang mga diskarte sa pagpapahusay ng imahe at pagkatapos ay i-output ang resulta.

Ang proyekto ay binuo at nasubukan sa Digilent Zybo Board ngunit ang iba pang mga aparatong ZYNQ ay dapat ding gumana.

Hahatiin namin ang proyektong ito sa 3 bahagi:

1) INPUT = Input na Imahe sa pamamagitan ng Ethernet mula sa Computer / Camera

2) PROSESO = Iproseso ang Imahe

3) OUTPUT = I-output ang Imahe sa pamamagitan ng isang HDMI interface

Sa isang napaka-counterintuitive fashion magsisimula kami sa output na bahagi ng proyekto (bibigyan kami nito ng mas mahusay na mga posibilidad ng pag-debug kasama ang paraan) magpatuloy sa pag-input at tapusin ang bahagi ng pagproseso.

Hakbang 1: Mga Kagamitan

Mga Kagamitan
Mga Kagamitan

Upang makumpleto ang proyektong ito kakailanganin mo:

HARDWARE

- Ang anumang ZYNQ Board na may HDMI at Ethernet ay dapat na gumana / Gumagamit ako ng Digilent Zybo

- USB A hanggang micro B USB cable

- HDMI cable

- Ethernet cable

- Ipakita na may HDMI input

SOFTWARE

- Xilinx Vivado

- Xilinx SDK

Hakbang 2: OUTPUT - VGA Controller Bahagi 1

OUTPUT - VGA Controller Bahagi 1
OUTPUT - VGA Controller Bahagi 1

Kami ay maglalabas ng aming visual data gamit ang HDMI port na naroroon sa board. Ang HDMI port ay konektado sa bahagi ng PL (Programmable Logic = FPGA) ng ZYNQ at kakailanganin naming mag-disenyo ng isang controller sa VHDL para dito. Kung nakadesenyo ka ba ng isang VGA controller ay mahahanap mo ito katulad. Ang mga oras para sa HDMI at VGA ay talagang pareho, sa katunayan maaari kang bumuo sa isang mayroon nang VGA controller upang makakuha ng isang HDMI controller.

Para sa isang mas mahusay na pag-unawa sa kung ano talaga ang nangyayari ay magdidisenyo muna kami ng isang VGA controller

Nais naming ipakita sa isang resolusyon ng 1920x1080.

Ang VGA controller ay responsable para sa paglilipat ng data ng pixel (sa format na RGB) nang sunud-sunod, pixel ayon sa pixel sa display. Sa labas ng aktwal na lugar ng lugar ng pagpapakita ng 1920x1080 mayroon ding ilang mga "hangganan" na lugar, lalo: front porch, back porch at retrace. Ang laki sa mga pixel ng mga lugar na ito ay pamantayan at tukoy sa bawat resolusyon. Ang mga lugar na ito ay HINDI talagang lilitaw sa screen ngunit sapilitan ang mga ito at ang kulay ng mga pixel sa lugar na ito ay dapat na itim. Ang isang wastong tanong ay bakit kailangan ang mga labis na lugar na ito. Ang katanungang ito ay lumalaban sa layunin ng pagtuturo na ito ngunit kung ikaw ay may kuryoso ay hihimokin kita na gumawa ng karagdagang pagsasaliksik sa online.

Ito ay isang magandang video na nagpapaliwanag ng interface ng VGA

Sa aming kaso nais naming ipakita sa isang resolusyon ng 1920 * 1080, at ito ang mga oras:

Pahalang na Lugar ng Display = 1920 na mga pixel

Pahalang na Fron Porch = 88 mga pixel

Pahalang na Back Porch = 148 mga pixel

Pahalang na Retrace = 44 na mga pixel

Vertical Display Area = 1080 pixel

Vertical Front Porch = 4 na mga pixel

Vertical Back Porch = 36 mga pixel

Vertical Retrace = 5 mga pixel

(Dito maaari kang makahanap ng mga oras para sa iba pang mga resolusyon

Kaya ang aming aktwal na resolusyon ay magiging 2200 x 1125. Gusto namin ng 60 fps (mga frame bawat segundo) kaya ang aming pixel na orasan ay 60 * 2200 * 1125 = 148.5 MHz. Sa Zybo Board isang 125 Mhz na orasan ang ibinigay. Gumagamit kami ng isang MMCM IP upang makabuo ng 148.5 MHz Pixel Clock na kailangan namin.

Hakbang 3: OUTPUT - VGA Controller Bahagi 2

OUTPUT - VGA Controller Bahagi 2
OUTPUT - VGA Controller Bahagi 2

Gamit ang teoretikal na background mula sa nakaraang hakbang dapat mong ma-disenyo ang pagmamay-ari mo ng VGA controller. Bibigyan kita ng isang proyekto ng Vivado na ginagawa iyon ngunit pinapayuhan ko kayo na kahit papaano ay subukang gawin ito sa iyong sarili muna.

Karamihan sa mga port ng VGA ay hindi nagbibigay sa iyo ng 8 piraso bawat kulay ng channel bawat pixel (tingnan ang imahe sa itaas) kaya kakailanganin mong iakma ang disenyo sa bilang ng mga pin bawat kulay na ibinibigay ng Lupon (hindi ito isang problema para sa HDMI).

Ipapinta ng Disenyo ang buong screen asul, maliban sa tuktok na kaliwang pixel na magiging pula. Dapat pansinin na ang proyektong ito ay gumagamit ng mga hadlang para sa ZYBO Board. Kaya kung nais mong patakbuhin ang proyektong ito sa isa pang Lupon dapat mong i-update ang mga hadlang na file at iakma ang bilang ng mga pin bawat kulay.

Tingnan ang figure nr. 2. Alalahanin na habang ang aming VGA Controller ay naglabas ng 5/6 bits bawat kulay, ang mga bit na iyon ay nai-convert sa isang analogue signal para sa bawat color channel (Red, Green at Blue) bago dumaan sa cable.

Hakbang 4: OUTPUT - HDMI Controller Bahagi 1

OUTPUT - HDMI Controller Bahagi 1
OUTPUT - HDMI Controller Bahagi 1

Ngayon alam na namin kung paano gumagana ang VGA controller at mayroon kaming isang gumaganang disenyo maaari naming ipagpatuloy ang HDMI controller. Talagang gagamitin ng HDMI controller ang lahat ng code na binuo namin sa VGA controller. Gumagamit ang HDMI at VGA ng parehong oras at parehong signal. Lumilitaw ang pagkakaiba sa mga pin ng ouput.

Habang ang VGA ay gumagamit ng isang kawad para sa bawat kulay at nagpapadala ng isang signal ng analogue sa tapat nito, ipinapadala ng HDMI ang data nang digital nang 1 bit sa bawat oras para sa bawat kulay at gumagamit ng pagkakaiba sa pagbibigay ng senyas. Ang pagkakaiba-iba ng pagbibigay ng senyas ay nangangahulugang para sa bawat bit ang HDMI ay mayroong 2 mga pin na may isa kabaligtaran ng isa pa. Kaya kung nais naming magpadala ng isang senyas na '1' magpapadala kami ng '1' sa isang kawad at '1' na na-negate sa iba pang kawad. Tinitiyak nito ang integridad ng signal at maaari mong mabasa ang tungkol dito dito https://goo.gl/6CPCzB. Mayroon kaming isa sa mga channel na ito para sa bawat kulay, PULA, GREEN at BLUE at isa para sa orasan. Dahil sa mga detalye ng pagkakaiba sa pag-sign ng mga signal na ipinapadala namin sa pamamagitan ng HDMI ay dapat na balanseng DC na nangangahulugang ang bilang ng 1 at 0 ay dapat na halos pantay sa isang tiyak na window ng oras. Upang magawa ito gagamitin namin ang 8b / 10b encoding. Marami kang maaaring matutunan tungkol sa kung paano gumagana ang pagkakaiba sa pag-signaling at 8b / 10b na pag-encode mula sa pagtutukoy ng DVI dito https://goo.gl/hhh8Ge (ang DVI at HDMI ay gumagamit ng parehong mga signal ng video).

Hakbang 5: OUTPUT - HDMI Controller Bahagi 2

OUTPUT - HDMI Controller Bahagi 2
OUTPUT - HDMI Controller Bahagi 2

Sapat na teorya, hinahayaan na makarating sa aming proyekto. Habang sa VGA Controller nakawala kami gamit ang isang 148.5 MHz na orasan, narito kailangan naming magbigay ng 10 beses na dalas dahil nais naming magpadala ng 8 bits para sa bawat kulay at gamitin ang 8b / 10b encoding na isinalin sa 10 bits per pixel at 10 * 148.5MHz = 1485MHz Iyon ay isang malaking dalas na hindi maaaring makuha sa Zybo Board. Sa kabutihang palad nakuha namin ang ilang mga trick up ang aming manggas. Maaari naming pamahalaan ang 5 * 148.5MHz = 742.5MHz at gagamit kami ng isang OSERDES (serializer) IP upang maipadala ang data kapwa sa tumataas at bumabagsak na gilid ng 742.5Mhz na orasan, kaya talagang makukuha namin ang data sa 1485MHz. Bibigyan kami ng Vivado ng ilang mga babala sa tiyempo at maaari kang laging pumunta para sa isang mas mababang resolusyon na may isang mas maliit na orasan, ngunit dahil gumagana ito, hindi namin talaga ito alintana sa ngayon (ang mga babala ay nauugnay sa ang katunayan na ang mga buffer ng orasan ay hindi opisyal mas mataas ang suporta ng mga frequency kaysa sa 464MHz).

Kaya ang kailangan nating gawin ay i-encode ang data mula sa aming output ng VGA Controller sa 8b / 10b format at pagkatapos ay i-serialize ito tulad ng nabanggit sa itaas. Kakailanganin din naming magdagdag ng isa pang MMCM sa proyekto upang makabuo ng 742.5MHz na orasan para sa serialization.

Inilakip ko sa ibaba ang mga vhdl file para sa encoder at serializer. Dapat mo munang i-encode ang mga RGB channel at pagkatapos ay i-serialise ang mga ito.

Halimbawa para sa pulang channel:

TMDS_encoder_RED: TMDS_encoder

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

Serialiser_RED: Serialiser10_1

mapa ng port (clk148, clk742, naka-encode_red_10bits, i-reset, red_serial_1bit);

Ang "c" input sa TMDS_encoder ay "00" para sa pula at berde at "vsync & hsync" para sa asul (bahagi ito ng pagtutukoy ng DVI

Hakbang 6: Pagpapakita ng Mga Larawan Mula sa RAM

Nagpapakita ng Mga Larawan Mula sa RAM
Nagpapakita ng Mga Larawan Mula sa RAM

Ang layunin ng control ng HDMI ay upang ipakita ang naprosesong mga imahe. Ngayon, sa pagpapatupad ng controller at handa nang pumunta dapat nating isipin ang tungkol sa pagpapakain sa controller na ito ng data. Dahil sa maraming proseso ng pagpapahusay ng imahe ay magaganap sa PS (Processing System = ARM Processor) at ang mga imahe na nagresulta ay manatili sa DDR RAM. Kaya kailangan namin ng isang paraan upang makuha ang data mula sa RAM papunta sa HDMI controller.

Upang magawa ito kakailanganin mo ang 3 mga IP:

1) VDMA (Video Direct Memory Access)

2) VTC (Video timing Controller)

3) Mag-stream sa Video Out (tatawagin namin itong S2VO mula ngayon)

Magbibigay talaga ang S2VO ng isang signal na RGB 24BIT sa output at kinakailangang signal ng HSYNC at VSYNC. Kaya't maiiwan natin ang bahaging iyon ng HDMI controller.

Dapat mong idagdag ang mga IP na ito sa iyong disenyo, i-configure ang mga ito at gawin ang wastong mga koneksyon.

Sa wakas dapat kang makakuha ng isang bagay na kahawig ng eskematiko sa itaas.

Hakbang 7: OUTPUT - SDK END

OUTPUT - SDK END
OUTPUT - SDK END

Sa lahat ng pag-set up ng hardware at handa nang pumunta kailangan na nating itayo ang software sa PS. I-export namin ang hardware at ang bitstream at ilulunsad ang SDK.

1) File -> Export -> Export Hardware -> Suriin ang Isama ang Bitstream at Pindutin ang OK

2) File -> Ilunsad ang SDK

Sa SDK lumikha ng isang bagong proyekto sa aplikasyon.

3) File -> Bago -> Application Project

4) Pumili ng isang pangalan para sa iyong proyekto at pindutin ang Susunod

5) Piliin ang template na "Hello World" at pindutin ang Tapusin

Ang aplikasyon sa SDK ay kailangang i-program ang VDMA. Mayroong ilang mga karaniwang pag-andar na ginamit upang makamit ito (pupunta ako sa mga detalye kapag mayroon akong oras).

Upang masubukan ang aming disenyo gagamitin namin ang tampok na SDK Restore (Xilinx Tools -> Dump / Restore) upang maglagay ng isang imahe sa memorya ng DDR RAM at ipakita ito gamit ang aming HDMI Controller. Maaari mong mai-load ang imahe kahit saan mo gusto (maliban sa ilang maliit na mga pinaghihigpitan na lugar sa simula ng memorya). Para sa aming halimbawa pinili namin ang address 16777216 at ang laki ng file 8294400 = 1920 * 1080 * 4 (4 channel = RGB + alpha).

Gumagana siya !

Itutuloy

Inirerekumendang: