Sadržaj:

Zynq sustav za poboljšanje slike: 7 koraka
Zynq sustav za poboljšanje slike: 7 koraka

Video: Zynq sustav za poboljšanje slike: 7 koraka

Video: Zynq sustav za poboljšanje slike: 7 koraka
Video: Начало работы с Zynq 2024, Srpanj
Anonim
Zynq sustav za poboljšanje slike
Zynq sustav za poboljšanje slike
Zynq sustav za poboljšanje slike
Zynq sustav za poboljšanje slike

Kao što ste vjerojatno mogli zaključiti iz naslova, cilj ovog projekta je napraviti sustav za poboljšanje slike pomoću ZYNQ ApSOC -a. Točnije, želimo izgraditi sustav koji može ukloniti maglu sa slika ili video zapisa. Ovaj sustav će u lošim uvjetima uzeti vizualne podatke kao ulaz, obraditi ih pomoću tehnika poboljšanja slike i zatim ispisati rezultat.

Projekt je izrađen i testiran na Digilent Zybo ploči, ali bi trebali raditi i drugi ZYNQ uređaji.

Ovaj ćemo projekt podijeliti na 3 dijela:

1) INPUT = Unos slike putem Etherneta s računala/kamere

2) PROCES = Obradite sliku

3) OUTPUT = Izlažite sliku putem HDMI sučelja

Na vrlo kontraintuitivan način počet ćemo s izlaznim dijelom projekta (to će nam usput dati bolje mogućnosti otklanjanja pogrešaka), nastaviti s unosom i završiti s dijelom za obradu.

Korak 1: Materijali

Materijali
Materijali

Za dovršetak ovog projekta trebat će vam:

HARDVER

- svaka ZYNQ ploča s HDMI -om i Ethernetom trebala bi raditi / Ja koristim Digilent Zybo

- USB A do micro B USB kabel

- HDMI kabel

- Ethernet kabel

- Zaslon s HDMI ulazom

SOFTVER

- Xilinx Vivado

- Xilinx SDK

Korak 2: IZLAZ - VGA kontroler, dio 1

IZLAZ - VGA kontroler 1. dio
IZLAZ - VGA kontroler 1. dio

Vizualne podatke ispisat ćemo pomoću HDMI priključka na ploči. HDMI port je spojen na PL (programabilnu logiku = FPGA) stranu ZYNQ -a i za to ćemo morati dizajnirati kontroler u VHDL -u. Ako ste ikada dizajnirali VGA kontroler, bit će vam vrlo sličan. Vremena za HDMI i VGA su zapravo ista, zapravo se možete nadograditi na postojeći VGA kontroler kako biste dobili HDMI kontroler.

Za bolje razumijevanje onoga što se zapravo događa prvo ćemo dizajnirati VGA kontroler

Želimo prikazivati u rezoluciji 1920x1080.

VGA kontroler odgovoran je za prijenos piksela podataka (u RGB formatu) uzastopno, piksel po piksel na zaslon. Izvan stvarnog područja prikaza 1920x1080 postoje i neka "granična" područja, naime: prednji trijem, stražnji trijem i uvlačenje. Veličina ovih područja u pikselima standardna je i specifična za svaku rezoluciju. Ta se područja NE pojavljuju na ekranu, ali su obavezna i boja piksela u ovom području mora biti crna. Valjano bi pitanje bilo zašto su potrebna ta dodatna područja. Ovo pitanje prkosi svrsi ovog uputstva, ali ako vas zanima, potaknuo bih vas na daljnje istraživanje na internetu.

Ovo je dobar video koji objašnjava VGA sučelje

U našem slučaju želimo prikazati u rezoluciji 1920*1080, a ovo su vremena:

Horizontalno područje prikaza = 1920 piksela

Vodoravni prednji trijem = 88 piksela

Vodoravni stražnji trijem = 148 piksela

Vodoravno povlačenje = 44 piksela

Okomito područje prikaza = 1080 piksela

Vertikalni prednji trijem = 4 piksela

Okomiti stražnji trijem = 36 piksela

Okomito povlačenje = 5 piksela

(Ovdje možete pronaći termine za druge rezolucije

Dakle, naša stvarna rezolucija bit će 2200 x 1125. Želimo 60 fps (sličica u sekundi) pa će naš sat piksela biti 60*2200*1125 = 148,5 MHz. Na Zybo ploči predviđen je sat od 125 Mhz. Koristit ćemo MMCM IP za generiranje takta piksela od 148,5 MHz koji nam je potreban.

Korak 3: IZLAZ - VGA kontroler, dio 2

IZLAZ - VGA kontroler 2. dio
IZLAZ - VGA kontroler 2. dio

S teorijskom podlogom iz prethodnog koraka trebali biste moći dizajnirati vlastiti VGA kontroler. Dostavit ću vam projekt Vivado koji to čini, ali savjetujem vam da to barem pokušate napraviti sami.

Većina VGA portova ne daje vam 8 bita po kanalu u boji po pikselu (pogledajte gornju sliku) pa ćete morati prilagoditi dizajn broju pinova po boji koju ploča pruža (to ipak nije problem za HDMI).

Dizajn će cijeli zaslon obojati plavom bojom, osim gornjeg lijevog piksela koji će biti crven. Valja napomenuti da ovaj projekt koristi ograničenja za ZYBO odbor. Dakle, ako želite pokrenuti ovaj projekt na drugoj ploči, trebali biste ažurirati datoteku ograničenja i prilagoditi broj pinova po boji.

Pogledajte sliku br. 2. Zapamtite da, iako naš VGA kontroler emitira 5/6 bita po boji, ti se bitovi pretvaraju u jedan analogni signal za svaki kanal u boji (crveni, zeleni i plavi) prije prolaska kroz kabel.

Korak 4: IZLAZ - HDMI kontroler, dio 1

IZLAZ - HDMI kontroler 1. dio
IZLAZ - HDMI kontroler 1. dio

Sada kada znamo kako VGA kontroler radi i imamo radni dizajn, možemo nastaviti s HDMI kontrolerom. HDMI kontroler će zapravo koristiti sav kôd koji smo razvili u VGA kontroleru. HDMI i VGA koriste isto vrijeme i iste signale. Razlika se pojavljuje na izlaznim pinovima.

Dok VGA koristi jednu žicu za svaku boju i prenosi analogni signal preko nje, HDMI prenosi podatke digitalno 1 bit za svaku boju i koristi diferencijalnu signalizaciju. Diferencijalna signalizacija znači da za svaki bit HDMI ima 2 pina s jednim suprotnim od drugog. Dakle, ako želimo prenijeti signal '1', prenijeli bismo '1' na žicu, a '1' negirali na drugoj žici. Time se osigurava integritet signala i više o tome možete pročitati ovdje https://goo.gl/6CPCzB. Imamo jedan od ovih kanala za svaku boju, CRVENU, ZELENU i PLAVU i jedan za sat. Zbog specifičnosti diferencijalne signalizacije signali koje šaljemo putem hdmija moraju biti istosmjerno uravnoteženi, što znači da broj 1 i 0 mora biti približno jednak u određenom vremenskom okviru. Da bismo to postigli, koristit ćemo kodiranje 8b/10b. Možete saznati mnogo o tome kako radi diferencijalna signalizacija i kodiranje 8b/10b iz DVI specifikacije ovdje https://goo.gl/hhh8Ge (DVI i HDMI koriste iste video signale).

Korak 5: IZLAZ - HDMI kontroler, dio 2

IZLAZ - HDMI kontroler 2. dio
IZLAZ - HDMI kontroler 2. dio

Dosta teorije, idemo na naš projekt. Dok smo u VGA kontroleru uspjeli sa taktom od 148,5 MHz, ovdje ćemo morati osigurati 10 puta veću frekvenciju jer želimo prenijeti 8 bitova za svaku boju i koristeći kodiranje 8b/10b koje prevodi 10 bita po pikselu i 10 *148,5 MHz = 1485 MHz. To je velika učestalost koja se ne može dobiti na Zybo ploči. Srećom, dobili smo nekoliko trikova u rukavu. Možemo upravljati 5*148,5MHz = 742,5MHz i koristit ćemo OSERDES (serializer) IP za prijenos podataka i na rastućoj i na padajućoj strani takta 742,5Mhz, tako da ćemo zapravo dobiti podatke prenesene na 1485MHz. Vivado će nam dati neka upozorenja o vremenu i uvijek biste mogli otići na nižu rezoluciju s manjim satom, ali budući da radi, zasad nam to ne smeta (upozorenja su povezana s činjenicom da međuspremnici sata nisu službeno podržavaju frekvencije veće od 464MHz).

Dakle, ono što moramo učiniti je kodirati podatke iz izlaza našeg VGA kontrolera u formatu 8b/10b, a zatim ih serijalizirati kao što je gore spomenuto. Morat ćemo također dodati još jedan MMCM u projekt za generiranje takta od 742,5MHz za serializaciju.

Priložio sam ispod vhdl datoteke za koder i serijalizator. Najprije morate kodirati RGB kanale, a zatim ih serijalizirati.

Primjer za crveni kanal:

TMDS_encoder_RED: TMDS_enkoder

karta porta (clk148, red_channel_8bits, c_red, video_on, encoded_red_10bits);

Serialiser_RED: Serialiser10_1

karta porta (clk148, clk742, encoded_red_10bits, reset, red_serial_1bit);

"C" ulaz u TMDS_encoder je "00" za crvenu i zelenu boju i "vsync & hsync" za plavu (ovo je dio DVI specifikacije

Korak 6: Prikaz slika iz RAM -a

Prikaz slika iz RAM -a
Prikaz slika iz RAM -a

Svrha HDMI kontrolera je prikaz obrađenih slika. Sada, kada je kontroler implementiran i spreman za rad, trebali bismo razmisliti o napajanju ovog kontrolera podacima. S obzirom na to da će se mnogo procesa poboljšanja slike odvijati u PS -u (Processing System = ARM Processor), a dobivene slike će se nalaziti u DDR RAM -u. Dakle, trebamo način da podatke iz RAM -a prebacimo na HDMI kontroler.

Da biste to postigli, potrebna su vam 3 IP -a:

1) VDMA (videoizravni pristup memoriji)

2) VTC (video timer kontroler)

3) Stream to Video Out (od sada ćemo ga zvati S2VO)

S2VO će zapravo dati RGB 24BIT signal na izlaz i potrebne HSYNC i VSYNC signale. Tako da taj dio HDMI kontrolera možemo izostaviti.

Te biste IP adrese trebali dodati svom dizajnu, konfigurirati ih i uspostaviti odgovarajuće veze.

Konačno, trebali biste dobiti nešto slično gornjoj shemi.

7. korak: OUTPUT - SDK END

IZLAZ - KRAJ SDK -a
IZLAZ - KRAJ SDK -a

Sa svim hardverom postavljenim i spremnim za rad, sada moramo izgraditi softver u PS -u. Izvozit ćemo hardver i bitstream i pokrenuti SDK.

1) Datoteka -> Izvoz -> Izvoz hardvera -> Provjerite Uključi Bitstream i pritisnite OK

2) Datoteka -> Pokreni SDK

U SDK -u izradite novi projekt aplikacije.

3) Datoteka -> Novo -> Aplikacijski projekt

4) Odaberite naziv za svoj projekt i pritisnite Dalje

5) Odaberite predložak "Hello World" i pritisnite Finish

Aplikacija u SDK -u morat će programirati VDMA. Postoje neke standardne funkcije koje se koriste da bi se to postiglo (ići ću u detalje kad budem imao vremena).

Kako bismo testirali naš dizajn, upotrijebit ćemo funkciju SDK Restore (Xilinx Tools -> Dump/Restore) da stavimo sliku u DDR RAM memoriju i prikažemo je pomoću našeg HDMI kontrolera. Sliku možete učitati gdje god želite (osim nekih malih ograničenih područja na početku memorije). Za naš primjer odabrali smo adresu 16777216 i veličinu datoteke 8294400 = 1920*1080*4 (4 kanala = RGB + alfa).

Radi !

Nastavit će se

Preporučeni: