Sadržaj:
- Korak 1: Materijali
- Korak 2: IZLAZ - VGA kontroler, dio 1
- Korak 3: IZLAZ - VGA kontroler, dio 2
- Korak 4: IZLAZ - HDMI kontroler, dio 1
- Korak 5: IZLAZ - HDMI kontroler, dio 2
- Korak 6: Prikaz slika iz RAM -a
- 7. korak: OUTPUT - SDK END
Video: Zynq sustav za poboljšanje slike: 7 koraka
2024 Autor: John Day | [email protected]. Zadnja promjena: 2024-01-30 09:37
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
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
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
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
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
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
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
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:
Dodajte vanjski zvučnik za poboljšanje kvalitete zvuka: 5 koraka
Dodajte vanjski zvučnik za poboljšanje kvalitete zvuka: Kvaliteta zvuka s ovog lijepog radijskog sata bila je užasna! Sve ostalo u vezi radija je odlično, lakoća upotrebe, punjenje telefona, zaslon itd. Lijek je korištenje vanjskog zvučnika i što veće, to bolje
Poboljšanje pretvarača na temelju Esp8266 s zadivljujućim Blynk korisničkim sučeljem s regulatorom povratnih informacija: 6 koraka
Pretvarač temeljen na Esp8266 s nevjerojatnim korisničkim sučeljem Blynk s regulatorom povratnih informacija: U ovom projektu pokazat ću vam učinkovit i uobičajen način povećanja istosmjernih napona. Pokazat ću vam koliko lako može biti izgraditi pretvarač pojačanja uz pomoć Nodemcua. Izgradimo ga. Također uključuje zaslonski voltmetar i povratne informacije
Sustav prepoznavanja i gašenja požara temeljen na obradi slike: 3 koraka
Sustav za prepoznavanje i gašenje požara temeljen na obradi slike: Pozdrav prijatelji, ovo je sustav za detekciju i gašenje požara temeljen na obradi slike pomoću Arduina
Obrada slike s Raspberry Pi: Instaliranje OpenCV -a i odvajanje boja slike: 4 koraka
Obrada slike s Raspberry Pi: Instaliranje OpenCV -a i odvajanje boja u boji: Ovaj je post prvi od nekoliko vodiča za obradu slika koji slijede. Pomnije promatramo piksele koji čine sliku, učimo kako instalirati OpenCV na Raspberry Pi, a također pišemo i testne skripte za snimanje slike, a također i c
Sustav razvrstavanja boja: Arduino sustav s dva pojasa: 8 koraka
Sustav razvrstavanja boja: Sustav na bazi Arduina s dva remena: Prijevoz i/ili pakiranje proizvoda i predmeta na industrijskom području obavlja se pomoću linija izrađenih pomoću transportnih traka. Ti pojasevi pomažu premještanju predmeta s jedne točke na drugu specifičnom brzinom. Neki zadaci obrade ili identifikacije mogu biti