Sisukord:

Zynqi pildiparandussüsteem: 7 sammu
Zynqi pildiparandussüsteem: 7 sammu

Video: Zynqi pildiparandussüsteem: 7 sammu

Video: Zynqi pildiparandussüsteem: 7 sammu
Video: Бертрис Смолл. Непокорная 7 2024, November
Anonim
Zynqi pildiparandussüsteem
Zynqi pildiparandussüsteem
Zynqi pildiparandussüsteem
Zynqi pildiparandussüsteem

Nagu pealkirjast ilmselt aru saate, on selle projekti eesmärk luua ZYNQ ApSOC abil kujutise täiustamise süsteem. Täpsemalt soovime ehitada süsteemi, mis suudaks piltide või videote udu puhastada. See süsteem võtab halbades tingimustes sisendiks visuaalseid andmeid, töötleb neid pildi parandamise tehnikate abil ja väljastab seejärel tulemuse.

Projekt koostati ja testiti Digilent Zybo Boardil, kuid ka teised ZYNQ seadmed peaksid töötama.

Jagame selle projekti kolmeks osaks:

1) INPUT = sisendkujutis Etherneti kaudu arvutist/kaamerast

2) PROCESS = töötle pilti

3) OUTPUT = Väljundi pilt HDMI -liidese kaudu

Alustame väga intuitiivsel moel projekti väljundosaga (see annab meile paremad silumisvõimalused), jätkame sisendiga ja lõpetame töötlemise osaga.

Samm: materjalid

Materjalid
Materjalid

Selle projekti lõpuleviimiseks vajate:

RIISTVARA

- kõik HDMI ja Ethernetiga ZYNQ -plaadid peaksid töötama / ma kasutan Digilent Zyboyt

- USB A kuni mikro B USB -kaabel

- HDMI kaabel

- Etherneti kaabel

- HDMI -sisendiga ekraan

TARKVARA

- Xilinx Vivado

- Xilinxi SDK

2. samm: VÄLJUND - VGA -kontroller 1. osa

VÄLJUND - VGA kontroller 1. osa
VÄLJUND - VGA kontroller 1. osa

Väljastame oma visuaalsed andmed, kasutades tahvlil olevat HDMI -porti. HDMI -port on ühendatud ZYNQ PL (programmeeritav loogika = FPGA) küljega ja peame selle jaoks projekteerima VHDL -vormingus kontrolleri. Kui olete kunagi projekteerinud VGA -kontrolleri, leiate selle väga sarnase. HDMI ja VGA ajad on tegelikult samad, tegelikult saate HDMI -kontrolleri saamiseks tugineda olemasolevale VGA -kontrollerile.

Tegelikult toimuva paremaks mõistmiseks kavandame kõigepealt VGA -kontrolleri

Tahame kuvada eraldusvõimega 1920x1080.

VGA -kontroller vastutab pikslite andmete (RGB -vormingus) järjestikuse edastamise eest pikslite kaupa ekraanile. Väljaspool tegelikku kuvamisala 1920x1080 on ka mõningaid "piirialade" alasid, nimelt: eesmine veranda, tagumine veranda ja taganemine. Nende alade suurus pikslites on standardne ja iga eraldusvõime jaoks spetsiifiline. Neid alasid EI kuvata tegelikult ekraanil, kuid need on kohustuslikud ja selle piirkonna pikslite värv peab olema must. Õige küsimus oleks, miks neid lisavaldkondi vaja on. See küsimus on vastuolus selle juhendatava eesmärgiga, kuid kui olete uudishimulik, soovitan teil veebis täiendavaid uuringuid teha.

See on hea video, mis selgitab VGA liidest

Meie puhul tahame kuvada eraldusvõimega 1920*1080 ja need on ajad:

Horisontaalne kuvamisala = 1920 pikslit

Horisontaalne esikülg = 88 pikslit

Horisontaalne tagumine veranda = 148 pikslit

Horisontaalne retrace = 44 pikslit

Vertikaalne kuvaala = 1080 pikslit

Vertikaalne eesmine veranda = 4 pikslit

Vertikaalne tagumine veranda = 36 pikslit

Vertikaalne tagasitõmbamine = 5 pikslit

(Siit leiate teiste resolutsioonide ajad

Seega on meie tegelik eraldusvõime 2200 x 1125. Me tahame 60 kaadrit sekundis (kaadrit sekundis), nii et meie pikslikell on 60*2200*1125 = 148,5 MHz. Zybo pardal on 125 Mhz kell. Kasutame vajaliku 148,5 MHz pikslikella genereerimiseks MMCM IP -d.

3. samm: VÄLJUND - VGA -kontroller 2. osa

VÄLJUND - VGA kontroller 2. osa
VÄLJUND - VGA kontroller 2. osa

Eelmise sammu teoreetilise taustaga peaksite saama kujundada oma VGA -kontrolleri. Pakun teile Vivado projekti, mis seda teeb, kuid soovitan teil vähemalt kõigepealt proovida seda ise teha.

Enamik VGA -porte ei anna teile 8 bitti värvikanali kohta piksli kohta (vt ülalolevat pilti), nii et peate kohandama disaini vastavalt tihvtide arvule värvi kohta (see ei ole HDMI jaoks probleem).

Disain värvib kogu ekraani siniseks, välja arvatud ülemine vasak piksel, mis on punane. Tuleb märkida, et see projekt kasutab ZYBO juhatuse piiranguid. Seega, kui soovite seda projekti mõnes teises tahvlis käivitada, peaksite piirangute faili värskendama ja nööpnõelte arvu värvi kohta kohandama.

Heitke pilk joonisele nr. 2. Pidage meeles, et kuigi meie VGA -kontroller väljastab 5/6 bitti värvi kohta, teisendatakse need bitid enne kaabli läbimist iga värvikanali (punane, roheline ja sinine) jaoks üheks analoogsignaaliks.

4. samm: VÄLJUND - HDMI -kontroller 1. osa

VÄLJUND - HDMI -kontroller, 1. osa
VÄLJUND - HDMI -kontroller, 1. osa

Nüüd, kui me teame, kuidas VGA -kontroller töötab ja meil on töökorras disain, saame jätkata HDMI -kontrolleriga. HDMI -kontroller kasutab tegelikult kogu koodi, mille oleme välja töötanud VGA -kontrolleris. HDMI ja VGA kasutavad samu ajastusi ja samu signaale. Erinevus ilmneb väljalasketihvtidel.

Kui VGA kasutab iga värvi jaoks ühte traati ja edastab selle kaudu analoogsignaali, siis HDMI edastab andmeid digitaalselt 1 bitti korraga iga värvi kohta ja kasutab diferentsiaalsignaali. Diferentsiaalne signaalimine tähendab, et iga bitti jaoks on HDMI -l 2 tihvti, millest üks on vastupidine. Nii et kui me tahaksime edastada signaali "1", siis edastaksime juhtmel "1" ja teisel juhtmel "1" negatiivselt. See tagab signaali terviklikkuse ja saate selle kohta rohkem lugeda siit https://goo.gl/6CPCzB. Meil on üks neist kanalitest iga värvi jaoks, PUNANE, ROHELINE ja SININE ning üks kella jaoks. Diferentsiaalse signaalimise eripära tõttu peavad hdmi kaudu saadetavad signaalid olema alalisvoolu tasakaalustatud, mis tähendab, et 1 ja 0 arv peavad teatud ajavahemiku jooksul olema ligikaudu võrdsed. Selle saavutamiseks kasutame 8b/10b kodeeringut. Siit https://goo.gl/hhh8Ge (DVI ja HDMI kasutavad samu videosignaale) saate palju teada, kuidas diferentsiaalne signaalimine ja 8b/10b kodeerimine töötab.

Samm 5: VÄLJUND - HDMI -kontroller, 2. osa

VÄLJUND - HDMI -kontroller, 2. osa
VÄLJUND - HDMI -kontroller, 2. osa

Aitab teooriast, lähme meie projekti juurde. Kui VGA -kontrolleris pääsesime 148,5 MHz kellaga, siis siin peame andma 10 -kordse sageduse, sest tahame edastada iga värvi jaoks 8 bitti ja kasutada 8b/10b kodeeringut, mis tähendab 10 bitti piksli kohta ja 10 *148,5 MHz = 1485 MHz. See on tohutu sagedus, mida Zybo pardal ei saa. Õnneks saime paar nippi varrukast üles. Saame hallata 5*148,5MHz = 742,5MHz ja kasutame OSERDES (serializer) IP -d andmete edastamiseks nii 742,5Mhz kella tõusvas kui ka langevas servas, nii et tegelikult saame andmeid edastada sagedusel 1485MHz. Vivado annab meile mõningaid ajahoiatusi ja võite alati väiksema kellaga valida madalama eraldusvõime, kuid kuna see töötab, pole meil praegu selle vastu midagi (hoiatused on seotud asjaoluga, et kella puhvrid ei ole ametlikult toetada kõrgemaid sagedusi kui 464 MHz).

Niisiis, mida me peame tegema, on kodeerida meie VGA kontrolleri väljundi andmed 8b/10b formaadis ja seejärel seeriaviisiliselt muuta, nagu eespool mainitud. Samuti peame projektile lisama veel ühe MMCM -i, et genereerida 742.5MHz kell serialiseerimiseks.

Lisasin allpool kodeerija ja jadaja vhdl -failid. Kõigepealt peate RGB kanalid kodeerima ja seejärel järjestama.

Näide punase kanali kohta:

TMDS_encoder_RED: TMDS_encoder

pordikaart (clk148, red_channel_8bits, c_red, video_on, encoded_red_10bits);

Serialiser_RED: Serialiser10_1

pordikaart (clk148, clk742, kodeeritud_punased_10 bitti, lähtestamine, red_serial_1bit);

TMDS_encoderi sisend "c" on punane ja roheline "00" ja sinine "vsync & hsync" (see on osa DVI spetsifikatsioonist

Samm: piltide kuvamine RAM -ist

Piltide kuvamine RAM -ist
Piltide kuvamine RAM -ist

HDMI -kontrolleri eesmärk on kuvada töödeldud pilte. Nüüd, kui kontroller on rakendatud ja töövalmis, peaksime mõtlema selle kontrolleri andmisele. Arvestades, et suur osa pildi täiustamise protsessist toimub PS -is (Processing System = ARM Processor) ja saadud pildid asuvad DDR RAM -is. Seega vajame võimalust saada andmed RAM -ist HDMI -kontrollerile.

Selle saavutamiseks vajate 3 IP -d:

1) VDMA (video otse mälu juurdepääs)

2) VTC (video ajastamise kontroller)

3) Voogesitage videoväljundisse (edaspidi nimetame seda S2VO -ks)

S2VO annab tegelikult väljundile RGB 24BIT signaali ning vajalikud HSYNC ja VSYNC signaalid. Seega võime selle osa HDMI -kontrollerist välja jätta.

Peaksite need IP -d oma disainile lisama, konfigureerima ja looma õiged ühendused.

Lõpuks peaksite saama midagi, mis sarnaneb ülaltoodud skeemiga.

Samm 7: VÄLJUND - SDK LÕPP

VÄLJUND - SDK LÕPP
VÄLJUND - SDK LÕPP

Kui kogu riistvara on valmis ja töövalmis, peame nüüd tarkvara PS -i ehitama. Ekspordime riistvara ja bitivoo ning käivitame SDK.

1) Fail -> Eksport -> Riistvara eksport -> Kontrollige Kaasa Bitstream ja vajutage OK

2) Fail -> Käivita SDK

Looge SDK -s uus rakendusprojekt.

3) Fail -> Uus -> Rakendusprojekt

4) Valige oma projektile nimi ja vajutage nuppu Edasi

5) Valige mall "Tere maailm" ja vajutage Lõpeta

SDK -s olev rakendus peab programmeerima VDMA. Selle saavutamiseks kasutatakse mõningaid standardfunktsioone (kui aega saan, lähen üksikasjadesse).

Meie disaini testimiseks kasutame funktsiooni SDK Restore (Xilinx Tools -> Dump/Restore), et panna pilt DDR RAM -i mällu ja kuvada see meie HDMI -kontrolleri abil. Saate pildi laadida kuhu iganes soovite (välja arvatud mõned väikesed piiratud alad mälu alguses). Meie näite jaoks valisime aadressi 16777216 ja faili suuruse 8294400 = 1920*1080*4 (4 kanalit = RGB + alfa).

See töötab !

Jätkub

Soovitan: