Satura rādītājs:

Zynq attēlu uzlabošanas sistēma: 7 soļi
Zynq attēlu uzlabošanas sistēma: 7 soļi

Video: Zynq attēlu uzlabošanas sistēma: 7 soļi

Video: Zynq attēlu uzlabošanas sistēma: 7 soļi
Video: FPGA图像处理,ZYNQ图像处理,ov5640,AXI总线,VDMA_HP,RGB2YCBCR 2024, Novembris
Anonim
Zynq attēlu uzlabošanas sistēma
Zynq attēlu uzlabošanas sistēma
Zynq attēlu uzlabošanas sistēma
Zynq attēlu uzlabošanas sistēma

Kā jūs droši vien varētu saprast no nosaukuma, šī projekta mērķis ir izveidot attēlu uzlabošanas sistēmu, izmantojot ZYNQ ApSOC. Precīzāk, mēs vēlamies izveidot sistēmu, kas var iztīrīt miglu no attēliem vai video. Šī sistēma sliktos apstākļos izmantos vizuālos datus kā ievadi, apstrādās tos, izmantojot attēla uzlabošanas paņēmienus, un pēc tam izvadīs rezultātu.

Projekts tika veidots un pārbaudīts Digilent Zybo Board, bet arī citām ZYNQ ierīcēm vajadzētu darboties.

Mēs sadalīsim šo projektu 3 daļās:

1) INPUT = Ievadiet attēlu, izmantojot Ethernet no datora/kameras

2) PROCESS = Apstrādājiet attēlu

3) OUTPUT = izvadiet attēlu, izmantojot HDMI saskarni

Ļoti pretintuitīvā veidā mēs sāksim ar projekta izvades daļu (tas mums dos labākas atkļūdošanas iespējas), turpinām ievadi un beidzam ar apstrādes daļu.

1. solis: materiāli

Materiāli
Materiāli

Lai pabeigtu šo projektu, jums būs nepieciešams:

Aparatūra

- jebkurai ZYNQ platei ar HDMI un Ethernet vajadzētu darboties / es izmantoju Digilent Zybo

- USB A līdz mikro B USB kabelis

- HDMI kabelis

- Ethernet kabelis

- Displejs ar HDMI ieeju

PROGRAMMATŪRA

- Xilinx Vivado

- Xilinx SDK

2. darbība: Izeja - VGA kontrolieris 1. daļa

Izeja - VGA kontrolieris 1. daļa
Izeja - VGA kontrolieris 1. daļa

Mēs izdosim savus vizuālos datus, izmantojot uz tāfeles esošo HDMI portu. HDMI ports ir pievienots ZYNQ PL (programmējamā loģika = FPGA) pusei, un mums tam būs jāizstrādā VHDL kontrolieris. Ja esat kādreiz izstrādājis VGA kontrolieri, jūs atradīsit šo ļoti līdzīgu. HDMI un VGA laiki faktiski ir vienādi, patiesībā jūs varat izmantot esošu VGA kontrolieri, lai iegūtu HDMI kontrolieri.

Lai labāk izprastu, kas patiesībā notiek, vispirms izstrādāsim VGA kontrolieri

Mēs vēlamies parādīt ar izšķirtspēju 1920x1080.

VGA kontrolleris ir atbildīgs par pikseļu datu (RGB formātā) pārraidi ekrānā, pikseļu pa pikseļiem. Ārpus faktiskās displeja zonas 1920x1080 ir arī dažas "pierobežas" zonas, proti: priekšējā lieveņa, aizmugurējā veranda un retrace. Šo apgabalu izmēri pikseļos ir standarta un raksturīgi katrai izšķirtspējai. Šie laukumi ekrānā NAV redzami, taču tie ir obligāti, un pikseļu krāsai šajā apgabalā jābūt melnai. Pamatots jautājums būtu, kāpēc šīs papildu jomas ir vajadzīgas. Šis jautājums neatbilst šīs pamācības mērķim, bet, ja jūs interesē, es iesaku jums veikt turpmākus pētījumus tiešsaistē.

Šis ir labs video, kas izskaidro VGA saskarni

Mūsu gadījumā mēs vēlamies parādīt ar izšķirtspēju 1920*1080, un šie ir laiki:

Horizontālais displeja apgabals = 1920 pikseļi

Horizontālā fasādes lievenis = 88 pikseļi

Horizontālā aizmugurējā veranda = 148 pikseļi

Horizontālā retrace = 44 pikseļi

Vertikālais displeja apgabals = 1080 pikseļi

Vertikālā priekšējā lieveņa = 4 pikseļi

Vertikālā aizmugurējā veranda = 36 pikseļi

Vertikālā retrace = 5 pikseļi

(Šeit jūs varat atrast citu rezolūciju laiku

Tātad mūsu faktiskā izšķirtspēja būs 2200 x 1125. Mēs vēlamies 60 kadrus sekundē (kadri sekundē), tāpēc mūsu pikseļu pulkstenis būs 60*2200*1125 = 148,5 MHz. Zybo panelī ir pieejams 125 Mhz pulkstenis. Mēs izmantosim MMCM IP, lai ģenerētu nepieciešamo 148,5 MHz pikseļu pulksteni.

3. darbība: Izeja - VGA kontrolieris, 2. daļa

Izeja - VGA kontrolleris 2. daļa
Izeja - VGA kontrolleris 2. daļa

Ņemot vērā iepriekšējā posma teorētisko pieredzi, jums vajadzētu būt iespējai izveidot savu VGA kontrolieri. Es jums sniegšu Vivado projektu, kas to dara, bet es iesaku jums vismaz vispirms mēģināt to izdarīt pats.

Lielākā daļa VGA portu nesniedz jums 8 bitus vienā krāsu kanālā uz vienu pikseļu (skatiet attēlu iepriekš), tāpēc jums būs jāpielāgo dizains atbilstoši tapu skaitam vienā krāsā, ko nodrošina plāksne (tomēr tā nav problēma HDMI).

Dizains nokrāsos visu ekrānu zilā krāsā, izņemot augšējo kreiso pikseļu, kas būs sarkans. Jāatzīmē, ka šajā projektā tiek izmantoti ZYBO valdes ierobežojumi. Tātad, ja vēlaties palaist šo projektu citā padomē, jums jāatjaunina ierobežojumu fails un jāpielāgo piespraužu skaits katrai krāsai.

Apskatiet attēlu nr. 2. Atcerieties, ka, lai gan mūsu VGA kontrolleris izvada 5/6 bitus vienā krāsā, šie biti tiek pārveidoti par vienu analogo signālu katram krāsu kanālam (sarkans, zaļš un zils) pirms kabeļa iziešanas.

4. solis: Izeja - HDMI kontrolieris 1. daļa

Izeja - HDMI kontrolieris 1. daļa
Izeja - HDMI kontrolieris 1. daļa

Tagad, kad mēs zinām, kā darbojas VGA kontrolieris un mums ir darba dizains, mēs varam turpināt ar HDMI kontrolieri. HDMI kontrolieris faktiski izmantos visu kodu, ko izstrādājām VGA kontrollerī. HDMI un VGA izmanto tos pašus laikus un tos pašus signālus. Atšķirība parādās uz izejas tapām.

Kamēr VGA katrai krāsai izmanto vienu vadu un pārraida tai analogo signālu, HDMI pārraida datus digitāli 1 bitu katrai krāsai vienlaikus un izmanto diferenciālu signalizāciju. Diferenciālā signalizācija nozīmē, ka katram bitam HDMI ir 2 tapas ar vienu pretēji otrai. Tātad, ja mēs gribētu pārraidīt signālu “1”, mēs pārraidītu “1” uz vadu un “1” - noraidītu otrā vadā. Tas nodrošina signāla integritāti, un vairāk par to varat izlasīt šeit https://goo.gl/6CPCzB. Mums ir viens no šiem kanāliem katrai krāsai, SARKANA, ZAĻA un ZILA, un viens pulkstenim. Diferenciālās signalizācijas īpatnību dēļ signāliem, kurus mēs sūtām caur hdmi, jābūt līdzsvarotiem līdzstrāvā, kas nozīmē, ka 1 un 0 skaitam noteiktā laika periodā jābūt aptuveni vienādam. Lai to paveiktu, mēs izmantosim 8b/10b kodējumu. Jūs varat uzzināt daudz par to, kā darbojas diferenciālā signalizācija un kodēšana 8b/10b no DVI specifikācijas šeit https://goo.gl/hhh8Ge (DVI un HDMI izmanto tos pašus video signālus).

5. darbība: Izeja - HDMI kontrolieris, 2. daļa

Izeja - HDMI kontrolieris, 2. daļa
Izeja - HDMI kontrolieris, 2. daļa

Pietiek teorijas, ķeramies pie mūsu projekta. Kamēr VGA kontrollerī mēs saņēmām 148,5 MHz pulksteni, šeit mums būs jānodrošina 10 reizes lielāka frekvence, jo mēs vēlamies pārraidīt 8 bitus katrai krāsai un izmantojot 8b/10b kodējumu, kas nozīmē 10 bitus uz pikseļu un 10 *148,5 MHz = 1485 MHz. Tā ir milzīga frekvence, ko nevar iegūt Zybo Board. Par laimi piedurknē dabūjām dažus trikus. Mēs varam pārvaldīt 5*148,5MHz = 742,5MHz, un mēs izmantosim OSERDES (serializer) IP, lai pārsūtītu datus gan uz 742,5Mhz pulksteņa augšupejošo, gan krītošo malu, tāpēc mēs faktiski saņemsim datus, kas tiek pārraidīti ar 1485MHz. Vivado sniegs mums dažus brīdinājumus par laiku, un jūs vienmēr varētu izvēlēties zemāku izšķirtspēju ar mazāku pulksteni, taču, tā kā tas darbojas, mēs to īsti pagaidām neiebilstam (brīdinājumi ir saistīti ar faktu, ka pulksteņa buferi oficiāli nav atbalsta frekvences, kas ir augstākas par 464 MHz).

Tātad mums ir jākodē dati no mūsu VGA kontrollera izejas 8b/10b formātā un pēc tam jāserializē, kā minēts iepriekš. Mums būs jāpievieno projektam vēl viens MMCM, lai ģenerētu 742.5MHz pulksteni sērijveidā.

Tālāk es pievienoju kodētāja un sērijveida ierīces vhdl failus. Vispirms jums ir jākodē RGB kanāli un pēc tam jāserializē.

Sarkanā kanāla piemērs:

TMDS_encoder_RED: TMDS_encoder

ostas karte (clk148, red_channel_8bits, c_red, video_on, encoded_red_10bits);

Serialiser_RED: Serialiser10_1

ostas karte (clk148, clk742, encoded_red_10bits, reset, red_serial_1bit);

TMDS_encoder "c" ievade ir "00" sarkanai un zaļai un "vsync & hsync" zilai (tā ir daļa no DVI specifikācijas

6. darbība: attēlu parādīšana no RAM

Attēlu parādīšana no RAM
Attēlu parādīšana no RAM

HDMI kontroliera mērķis ir parādīt apstrādātos attēlus. Tagad, kad kontrolieris ir ieviests un gatavs darbam, mums vajadzētu padomāt par šī kontroliera barošanu ar datiem. Ņemot vērā, ka liela daļa attēla uzlabošanas procesa notiks PS (Processing System = ARM Processor) un iegūtie attēli atradīsies DDR RAM. Tāpēc mums ir nepieciešams veids, kā iegūt datus no RAM uz HDMI kontrolieri.

Lai to izdarītu, jums būs nepieciešami 3 IP:

1) VDMA (video tiešā atmiņas piekļuve)

2) VTC (video laika kontrolieris)

3) Straumējiet uz video izeju (turpmāk mēs to sauksim par S2VO)

S2VO faktiski nodrošinās RGB 24BIT signālu izejai un nepieciešamos HSYNC un VSYNC signālus. Tātad mēs varam atstāt šo HDMI kontroliera daļu ārā.

Jums vajadzētu pievienot šos IP savam dizainam, konfigurēt tos un izveidot pareizos savienojumus.

Visbeidzot, jums vajadzētu iegūt kaut ko līdzīgu iepriekš redzamajai shēmai.

7. darbība: IZEJA - SDK END

Izeja - SDK END
Izeja - SDK END

Kad visa aparatūra ir iestatīta un gatava darbam, mums tagad ir jāveido programmatūra PS. Mēs eksportēsim aparatūru un bitu plūsmu un palaidīsim SDK.

1) Fails -> Eksportēt -> Eksportēt aparatūru -> Pārbaudiet Iekļaut bitu plūsmu un nospiediet Labi

2) Fails -> Palaidiet SDK

SDK izveidojiet jaunu lietojumprogrammu.

3) Fails -> Jauns -> Lietojumprogrammas projekts

4) Izvēlieties sava projekta nosaukumu un nospiediet Tālāk

5) Atlasiet veidni "Hello World" un nospiediet Finish

SDK lietojumprogrammai būs jāprogrammē VDMA. Lai to paveiktu, tiek izmantotas dažas standarta funkcijas (kad būs laiks, es iedziļināšos detaļās).

Lai pārbaudītu mūsu dizainu, mēs izmantosim SDK atjaunošanas (Xilinx Tools -> Dump/Restore) funkciju, lai ievietotu attēlu DDR RAM atmiņā un parādītu to, izmantojot mūsu HDMI kontrolieri. Jūs varat ielādēt attēlu jebkurā vietā (izņemot dažas nelielas ierobežotas zonas atmiņas sākumā). Mūsu piemērā mēs izvēlējāmies adresi 16777216 un faila lielumu 8294400 = 1920*1080*4 (4 kanāli = RGB + alfa).

Tas strādā !

Turpinājums sekos

Ieteicams: