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
- Korak 7: OUTPUT - SDK END
Video: Zynq sistem za poboljšanje slike: 7 koraka
2024 Autor: John Day | [email protected]. Zadnja izmjena: 2024-01-30 08:08
Kao što ste vjerojatno mogli zaključiti iz naslova, cilj ovog projekta je napraviti sistem za poboljšanje slike pomoću ZYNQ ApSOC -a. Preciznije, želimo izgraditi sistem koji može ukloniti maglu sa slika ili video zapisa. Ovaj sistem će u lošim uslovima uzeti vizuelne podatke kao ulaz, obraditi ih koristeći tehnike poboljšanja slike, a zatim ispisati rezultat.
Projekt je izgrađen i testiran na Digilent Zybo ploči, ali bi trebali raditi i drugi ZYNQ uređaji.
Ovaj projekt ćemo podijeliti na 3 dijela:
1) INPUT = Unos slike preko Etherneta sa računara/kamere
2) PROCES = Obradite sliku
3) OUTPUT = Izlažite sliku putem HDMI interfejsa
Na vrlo kontraintuitivan način počet ćemo s izlaznim dijelom projekta (to će nam usput dati bolje mogućnosti otklanjanja grešaka), nastaviti s unosom i završiti s dijelom za obradu.
Korak 1: Materijali
Za završetak ovog projekta trebat će vam:
HARDVER
- svaka ZYNQ ploča s HDMI -om i Ethernet -om bi trebala raditi / koristim Digilent Zybo
- USB A do micro B USB kabel
- HDMI kabl
- Ethernet kabel
- Ekran sa HDMI ulazom
SOFTVER
- Xilinx Vivado
- Xilinx SDK
Korak 2: IZLAZ - VGA kontroler, dio 1
Vizualne podatke ispisat ćemo pomoću HDMI priključka koji se nalazi 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, u stvari možete nadograditi postojeći VGA kontroler da 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 je odgovoran za slanje podataka o pikselima (u RGB formatu) sekvencijalno, piksel po piksel na ekran. Izvan stvarne površine ekrana od 1920x1080 postoje i neka "granična" područja, naime: prednji trijem, zadnji trijem i uvlačenje. Veličina ovih područja u pikselima je standardna i specifična za svaku rezoluciju. Ova područja se NE pojavljuju na ekranu, ali su obavezna i boja piksela u ovoj oblasti mora biti crna. Valjano pitanje bi bilo zašto su potrebna ta dodatna područja. Ovo pitanje prkosi svrsi ovog uputstva, ali ako vas zanima, ohrabrio bih vas da dodatno istražite 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
Horizontalni prednji trijem = 88 piksela
Horizontalni zadnji trem = 148 piksela
Horizontalno povlačenje = 44 piksela
Okomito područje prikaza = 1080 piksela
Vertikalni prednji trijem = 4 piksela
Vertikalni zadnji trem = 36 piksela
Vertikalno povlačenje = 5 piksela
(Ovdje možete pronaći termine za druge rezolucije
Dakle, naša stvarna rezolucija će biti 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 je predviđen 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 radi, ali savjetujem vam da barem pokušate sami to 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 (ovo ipak nije problem za HDMI).
Design će obojati cijeli ekran plavo, osim gornjeg lijevog piksela koji će biti crven. Treba 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 po 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. Ovo 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 jedinica 1 i 0 moraju biti približno jednaki u određenom vremenskom periodu. Da bismo to postigli, koristit ćemo kodiranje 8b/10b. Možete saznati mnogo o tome kako funkcionira 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.5MHz = 1485MHz. To je ogromna frekvencija 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 ivici takta 742.5Mhz, tako da ćemo podatke zapravo prenositi na 1485MHz. Vivado će nam dati neka upozorenja o vremenu i uvijek biste mogli ić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 trebamo učiniti je kodirati podatke iz izlaza našeg VGA kontrolera u 8b/10b formatu, 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 serializer. Najprije morate kodirati RGB kanale, a zatim ih serijski serizirati.
Primjer za crveni kanal:
TMDS_encoder_RED: TMDS_encoder
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 (sistem za obradu = ARM procesor), a dobivene slike će se nalaziti u DDR RAM -u. Dakle, potreban nam je način da podatke iz RAM -a prebacimo na HDMI kontroler.
Da biste to postigli, potrebna su vam 3 IP -a:
1) VDMA (Video Direct Memory Memory)
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 možemo izostaviti taj dio HDMI kontrolera.
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.
Korak 7: 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 -> Izvezi hardver -> Provjeri Uključi bitstream i pritisnite OK
2) Datoteka -> Pokreni SDK
U SDK -u kreirajte 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 !
Nastavlja se
Preporučuje se:
Dodajte vanjski zvučnik za poboljšanje kvalitete zvuka: 5 koraka
Dodajte vanjski zvučnik za poboljšanje kvalitete zvuka: Kvaliteta zvuka ovog lijepog radijskog sata bila je užasna! Sve ostalo u vezi radija je odlično, lakoća upotrebe, punjenje telefona, ekran itd. Lijek je korištenje vanjskog zvučnika i što veće to bolje
Sistem za prepoznavanje i gašenje požara na bazi obrade slike: 3 koraka
Sistem za prepoznavanje i gašenje požara na bazi obrade slike: Pozdrav prijatelji, ovo je sistem za detekciju i gašenje požara zasnovan na obradi slike koristeći Arduino
Obrada slike s Raspberry Pi: Instaliranje OpenCV -a i Razdvajanje boja slike: 4 koraka
Obrada slike pomoću Raspberry Pi -a: Instaliranje OpenCV -a i odvajanje boja slike: Ovaj je post prvi od nekoliko vodiča za obradu slika koji slijede. Pažljivije ćemo pogledati piksele koji čine sliku, naučiti kako instalirati OpenCV na Raspberry Pi, a takođe ćemo napisati i testne skripte za snimanje slike, a takođe i
Poboljšanje Arduino LED kocke raspoloženja (jednostavno) (uključen video): 4 koraka
Poboljšanje Arduino LED kocke za raspoloženje (jednostavno) (uključen video zapis): Nakon što sam vidio projekat LED kocke za raspoloženje koji je kreirao 'Earl, odlučio sam napraviti poboljšanu verziju LED kocke za raspoloženje. Moja verzija bit će složenija od izvorne, jer će biti nešto veća od izvorne, imati još dvije boje
Popravljanje i poboljšanje noćnog svjetla: 5 koraka (sa slikama)
Popravljanje i poboljšanje noćnog svjetla: Zdravo svima, Danas na klupi za iscjeljenje imamo ovu malu noćnu lampu koja pripada mojoj kćeri. Više ne radi pa ćemo ga pokušati popraviti i poboljšati jer ima strašno treperenje. Ovaj popravak bavi se mrežnim naponom. Ako se nepravilno rukuje