Mundarija:

Zynq tasvirni yaxshilash tizimi: 7 qadam
Zynq tasvirni yaxshilash tizimi: 7 qadam

Video: Zynq tasvirni yaxshilash tizimi: 7 qadam

Video: Zynq tasvirni yaxshilash tizimi: 7 qadam
Video: Начало работы с Zynq 2024, Iyul
Anonim
Zynq tasvirni yaxshilash tizimi
Zynq tasvirni yaxshilash tizimi
Zynq tasvirni yaxshilash tizimi
Zynq tasvirni yaxshilash tizimi

Siz sarlavhadan tushunganingizdek, ushbu loyihaning maqsadi ZYNQ ApSOC yordamida tasvirni yaxshilash tizimini yaratishdir. Aniqroq aytganda, biz tasvirni yoki videodan tumanni tozalaydigan tizim yaratmoqchimiz. Bu tizim yomon sharoitda vizual ma'lumotlarni kirish sifatida qabul qiladi, tasvirni takomillashtirish texnikasi yordamida qayta ishlaydi va natijani chiqaradi.

Loyiha Digilent Zybo doskasida qurilgan va sinovdan o'tgan, lekin boshqa ZYNQ qurilmalari ham ishlashi kerak.

Biz ushbu loyihani 3 qismga ajratamiz:

1) INPUT = Rasmni chekilgan tarmoq orqali kompyuter/kameradan kiritish

2) PROCESS = Tasvirni qayta ishlash

3) OUTPUT = Rasmni HDMI interfeysi orqali chiqarish

Qarama -qarshi tarzda, biz loyihaning chiqish qismidan boshlaymiz (bu bizni disk raskadrovka qilish imkoniyatini beradi) kirishni davom ettiramiz va ishlov berish qismini tugatamiz.

1 -qadam: materiallar

Materiallar
Materiallar

Ushbu loyihani bajarish uchun sizga kerak bo'ladi:

QURILMA

- HDMI va chekilgan har qanday ZYNQ taxtasi ishlashi kerak / men Digilent Zybo -dan foydalanayapman

- USB A - micro B USB kabeli

- HDMI kabeli

- Ethernet kabeli

- HDMI kirish bilan ekran

Dasturiy ta'minot

- Xilinx Vivado

- Xilinx SDK

2 -qadam: OUTPUT - VGA tekshiruvi 1 -qism

Chiqish - VGA boshqaruvchisi 1 -qism
Chiqish - VGA boshqaruvchisi 1 -qism

Biz vizual ma'lumotlarni bortdagi HDMI port yordamida chiqaramiz. HDMI porti ZYNQ ning PL (Programmable Logic = FPGA) tomoniga ulangan va buning uchun biz VHDL -da boshqaruvchini loyihalashimiz kerak bo'ladi. Agar siz hech qachon VGA boshqaruvchisini yaratgan bo'lsangiz, uni juda o'xshash topasiz. HDMI va VGA vaqtlari aslida bir xil, aslida siz HDMI kontrollerini olish uchun mavjud VGA boshqaruvchisiga asoslanishingiz mumkin.

Aslida nima bo'layotganini yaxshiroq tushunish uchun biz birinchi navbatda VGA boshqaruvchisini ishlab chiqamiz

Biz 1920x1080 piksellar sonida ko'rsatmoqchimiz.

VGA boshqaruvchisi pikselli ma'lumotlarni (RGB formatida) ketma -ket, pikselli pikselli displeyga uzatish uchun javobgardir. Haqiqiy ko'rish maydonining 1920x1080 o'lchamlari tashqarisida "chegara" joylari ham bor, ya'ni: oldingi ayvon, orqa ayvon va orqaga qaytish. Bu joylarning piksel o'lchamlari standart va har bir piksellar soniga xosdir. Bu joylar aslida ekranda ko'rinmaydi, lekin ular majburiy va bu sohadagi piksellarning rangi qora bo'lishi kerak. Bu qo'shimcha joylar nima uchun kerak degan savol tug'iladi. Bu savol bu ko'rsatmaning maqsadiga ziddir, lekin agar siz qiziqmoqchi bo'lsangiz, men sizni Internetda qo'shimcha tadqiqotlar o'tkazishga undayman.

Bu VGA interfeysini tushuntiradigan yaxshi video

Bizning holatda biz 1920*1080 piksellar sonida ko'rsatishni xohlaymiz va bu vaqtlar:

Gorizontal ekran maydoni = 1920 piksel

Gorizontal old sundurma = 88 piksel

Gorizontal orqa ayvon = 148 piksel

Gorizontal qaytarish = 44 piksel

Vertikal ko'rsatish maydoni = 1080 piksel

Vertikal old sundurma = 4 piksel

Vertikal orqa ayvon = 36 piksel

Vertikal qaytarish = 5 piksel

(Bu erda siz boshqa qarorlar uchun vaqtni topishingiz mumkin

Shunday qilib, bizning aniq o'lchamimiz 2200 x 1125 bo'ladi. Biz 60 kadr / sek (sekundiga kadr) ni xohlaymiz, shuning uchun bizning piksel soatimiz 60*2200*1125 = 148,5 MGts bo'ladi. Zybo platasida 125 MGts chastotali soat o'rnatilgan. Bizga kerak bo'lgan 148,5 MGts pikselli soatni yaratish uchun MMCM IP -dan foydalanamiz.

3 -qadam: OUTPUT - VGA tekshiruvi 2 -qism

Chiqish - VGA boshqaruvchisi 2 -qism
Chiqish - VGA boshqaruvchisi 2 -qism

Oldingi bosqichning nazariy ma'lumotiga asoslanib, siz o'zingizning VGA boshqaruvchisini loyihalashingiz kerak. Men sizga Vivado loyihasini taqdim etaman, lekin buni sizga hech bo'lmaganda birinchi bo'lib o'zingiz qilishga harakat qilishni maslahat beraman.

Ko'pgina VGA portlari har bir pikselli kanal uchun 8 bitni bermaydi (yuqoridagi rasmga qarang), shuning uchun siz dizaynni har bir rangdagi pinlar soniga moslashtirishingiz kerak bo'ladi (bu HDMI uchun muammo emas).

Dizayn butun ekranni ko'k rangga bo'yaydi, faqat yuqori chap piksel qizil bo'ladi. Shuni ta'kidlash kerakki, ushbu loyiha ZYBO kengashi uchun cheklovlardan foydalanadi. Shunday qilib, agar siz ushbu loyihani boshqa kengashda ishlatmoqchi bo'lsangiz, cheklovlar faylini yangilang va har bir rang uchun pinlar sonini moslashtiring.

Nr raqamiga qarang. 2. Shuni esda tutingki, bizning VGA kontrollerimiz har bir rang uchun 5/6 bitni chiqarsa ham, bu bitlar kabel orqali o'tishdan oldin har bir rangli kanal uchun (qizil, yashil va ko'k) bitta analog signalga aylanadi.

4 -qadam: OUTPUT - HDMI tekshirgichi 1 -qism

Chiqish - HDMI tekshiruvi 1 -qism
Chiqish - HDMI tekshiruvi 1 -qism

Endi biz VGA tekshirgichining qanday ishlashini bilamiz va bizda HDMI -kontroller bilan ishlashni davom ettiradigan ishchi dizayn mavjud. HDMI tekshiruvi aslida VGA tekshirgichida biz ishlab chiqqan barcha kodlardan foydalanadi. HDMI va VGA bir xil vaqt va signallardan foydalanadi. Farqi chiqish pinlarida ko'rinadi.

VGA har bir rang uchun bitta sim ishlatsa va u orqali analog signal uzatsa, HDMI har bir rang uchun bir vaqtning o'zida raqamli ma'lumotlarni uzatadi va differentsial signalizatsiyadan foydalanadi. Differentsial signalizatsiya shuni anglatadiki, har bir bit uchun HDMI bir -biriga qarama -qarshi bo'lgan 2 pinga ega. Shunday qilib, agar biz '1' signalini uzatmoqchi bo'lsak, biz simga '1' va boshqa simga inkor qilingan '1' uzatamiz. Bu signal yaxlitligini ta'minlaydi va siz bu haqda ko'proq o'qishingiz mumkin https://goo.gl/6CPCzB. Bizda har bir rang uchun, QIZIL, Yashil va KO'Z uchun bitta va soat uchun bitta kanal mavjud. Diferensial signalizatsiyaning o'ziga xos xususiyati tufayli biz hdmi orqali yuboradigan signallar muvozanatli bo'lishi kerak, ya'ni 1 va 0 raqamlari ma'lum vaqt oralig'ida teng bo'lishi kerak. Buni amalga oshirish uchun biz 8b/10b kodlashdan foydalanamiz. Siz DVI spetsifikatsiyasidan differentsial signalizatsiya va 8b/10b kodlash qanday ishlashi haqida ko'p narsalarni bilib olishingiz mumkin https://goo.gl/hhh8Ge (DVI va HDMI bir xil video signallarini ishlatadi).

5 -qadam: OUTPUT - HDMI tekshiruvi 2 -qism

Chiqish - HDMI tekshiruvi 2 -qism
Chiqish - HDMI tekshiruvi 2 -qism

Etarli nazariya, bizning loyihamizga o'taylik. VGA boshqaruvchisida biz 148,5 MGts chastotali soatni yo'qotdik, bu erda biz bu chastotani 10 barobar ko'paytirishimiz kerak, chunki biz har bir rang uchun 8 bitni uzatishni xohlaymiz va piksel va 10 bitga 10 bitga tarjima qilingan 8b/10b kodlashdan foydalanamiz. *148,5 MGts = 1485 MGts. Bu juda katta chastota, uni Zybo doskasida olish mumkin emas. Yaxshiyamki, bizda bir nechta fokuslar bor. Biz 5*148,5 MGts = 742,5 MGts ni boshqarishimiz mumkin va biz 742,5 MGts chastotali soatning ko'tarilishida ham, tushishida ham ma'lumotlarni uzatish uchun OSERDES (ketma -ketlashtiruvchi) IPdan foydalanamiz, shuning uchun biz 1485 MGts chastotali ma'lumotlarni uzatamiz. Vivado bizga vaqt haqida ba'zi ogohlantirishlarni beradi va siz har doim kichikroq soat bilan pastroq piksellar sonini tanlashingiz mumkin edi, lekin u ishlayotgani uchun hozircha bunga ahamiyat bermaymiz (ogohlantirishlar soat buferlari rasman ishlamasligi bilan bog'liq) 464 MGts dan yuqori chastotalarni qo'llab -quvvatlash).

Shunday qilib, biz VGA Controller -dan ma'lumotlarni 8b/10b formatida kodlashimiz va keyin yuqorida aytib o'tilganidek ketma -ketlashtirishimiz kerak. Bundan tashqari, ketma -ketlashtirish uchun 742,5 MGts soatni yaratish uchun loyihaga boshqa MMCM qo'shishimiz kerak bo'ladi.

Men vhdl fayllarini kodlovchi va serializator uchun quyida biriktirdim. Avval siz RGB kanallarini kodlashingiz va keyin ularni ketma -ket joylashtirishingiz kerak.

Qizil kanalga misol:

TMDS_encoder_RED: TMDS_encoder

port xaritasi (clk148, red_channel_8bits, c_red, video_on, encoded_red_10bits);

Serialiser_RED: Serialiser10_1

port xaritasi (clk148, clk742, encoded_red_10bits, reset, red_serial_1bit);

TMDS_encoder -ga "c" kiritish qizil va yashil rang uchun "00", ko'k uchun "vsync & hsync" (bu DVI spetsifikatsiyasining bir qismi

6 -qadam: RAMdan rasmlarni ko'rsatish

RAMdan rasmlarni ko'rsatish
RAMdan rasmlarni ko'rsatish

HDMI tekshirgichining maqsadi ishlov berilgan tasvirlarni ko'rsatishdir. Endi, boshqaruvchi ishga tushirilgach va ishga tayyor bo'lgach, biz bu tekshirgichni ma'lumotlar bilan ta'minlash haqida o'ylashimiz kerak. Rasmni yaxshilash jarayonining ko'p qismi PSda (ishlov berish tizimi = ARM protsessori) amalga oshishini hisobga olsak, olingan tasvirlar DDR operativ xotirasida saqlanadi. Shunday qilib, biz ma'lumotlarni RAMdan HDMI tekshirgichiga olish usulini tanlashimiz kerak.

Buni amalga oshirish uchun sizga 3 ta IP kerak bo'ladi:

1) VDMA (Video xotiraga to'g'ridan -to'g'ri kirish)

2) VTC (Video vaqtini boshqaruvchi)

3) Video chiqish uchun oqim (bundan buyon biz uni S2VO deb ataymiz)

S2VO aslida chiqishga RGB 24BIT signalini va kerakli HSYNC va VSYNC signallarini beradi. Shunday qilib, biz HDMI tekshirgichining bu qismini tashlab qo'yishimiz mumkin.

Siz ushbu IP -larni dizayningizga qo'shishingiz, ularni sozlashingiz va to'g'ri ulanishingiz kerak.

Nihoyat, siz yuqoridagi sxemaga o'xshash narsani olishingiz kerak.

7 -qadam: Chiqish - SDK tugatish

Chiqish - SDK tugashi
Chiqish - SDK tugashi

O'rnatilgan va ishga tayyor bo'lgan barcha jihozlar bilan biz hozirda dasturiy ta'minotni PSda yaratishimiz kerak. Biz uskunani va bitstreamni eksport qilamiz va SDK -ni ishga tushiramiz.

1) Fayl -> Eksport -> Uskuna eksporti -> Bitstream qo'shilishini tekshiring va OK tugmasini bosing

2) Fayl -> SDK -ni ishga tushiring

SDK -da yangi dastur loyihasini yarating.

3) Fayl -> Yangi -> Ilova loyihasi

4) Loyihangiz uchun nom tanlang va Keyingiga bosing

5) "Salom dunyo" shablonini tanlang va Finish tugmasini bosing

SDK -dagi dastur VDMA -ni dasturlashi kerak bo'ladi. Buni amalga oshirish uchun ba'zi standart funktsiyalar ishlatiladi (vaqt bor bo'lganda men batafsil ma'lumot beraman).

Dizaynimizni sinab ko'rish uchun biz SDK -ni tiklash (Xilinx Tools -> Dump/Restore) funktsiyasidan foydalanamiz, tasvirni DDR RAM xotirasiga joylash va uni HDMI Controller yordamida ko'rsatish. Siz rasmni xohlagan joyingizga yuklashingiz mumkin (xotira boshidagi kichik cheklangan joylardan tashqari). Bizning misolimiz uchun biz 16777216 manzilini va fayl hajmini 8294400 = 1920*1080*4 (4 kanal = RGB + alfa) tanladik.

Ishlamoqda !

Davomi bor

Tavsiya: