Mundarija:
- 1 -qadam: materiallar
- 2 -qadam: OUTPUT - VGA tekshiruvi 1 -qism
- 3 -qadam: OUTPUT - VGA tekshiruvi 2 -qism
- 4 -qadam: OUTPUT - HDMI tekshirgichi 1 -qism
- 5 -qadam: OUTPUT - HDMI tekshiruvi 2 -qism
- 6 -qadam: RAMdan rasmlarni ko'rsatish
- 7 -qadam: Chiqish - SDK tugatish
Video: Zynq tasvirni yaxshilash tizimi: 7 qadam
2024 Muallif: John Day | [email protected]. Oxirgi o'zgartirilgan: 2024-01-30 13:27
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
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
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
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
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
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
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
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:
Ovoz sifatini yaxshilash uchun tashqi dinamikni qo'shing: 5 qadam
Ovoz sifatini yaxshilash uchun tashqi karnay qo'shing: bu kichkina soat radiosining ovoz sifati dahshatli edi! Radio haqida hamma narsa ajoyib, foydalanish qulayligi, telefonni zaryadlash, displey va boshqalar. Davosi - tashqi dinamikdan foydalanish va qanchalik katta bo'lsa, shuncha yaxshi
Sunrise Budilnik (ertalab uyg'onishni yaxshilash): 13 qadam
Sunrise Budilnik (Ertalab uyg'onishni yaxshilash): O'zingizning shaxsiy quyosh chiqishingizni rejalashtiring, ertalab uyg'onishni yaxshilang So'nggi tasodifiy ixtiro, o'zingizning quyosh chiqishingizni rejalashtiring! . Moviy chiroq
Qattiq disklar xavfsizligini Arduino va barmoq izlari sensori yordamida yaxshilash: 6 qadam
Qattiq disklar xavfsizligini Arduino va barmoq izlari sensori yordamida yaxshilang: Ushbu maqolada biz barmoq izlari sensori va Arduino yordamida qattiq diskda saqlangan raqamli ma'lumotlar xavfsizligini qanday yaxshilashni ko'rsatmoqchimiz. Maqolaning oxirida siz: barmoq izlari sensoridan foydalanishni o'rganasiz
10 Vatt chidamlilik lazer modulining quvvatini yaxshilash: 6 qadam
10 vatt chidamlilik lazer modulining quvvatini yaxshilash: men 10 vattli lazer to'plamini sotib oldim. Men lazer to'plamini yig'dim va yo'riqnomaga binoan ulandim, lazer voltini va tokini yaxshi lazer quvvatiga ega bo'ladigan va lazer diodini xavfsiz saqlaydigan qilib sozlaganimda, men 3.7A@5VI dan ortiq ololmadim
Magnit maydonlarni yaxshilash uchun o'z ferritini qiling: 9 qadam
Magnit maydonlarini yaxshilash uchun o'z ferritini yarating: 09/05/2018 yangilang: men buni yana qildim, zavqlaning! 03/07/2015 yangilash: Men to'g'ri echimni topdim - oxirgi qadamni tekshiring! Hammasi qanday boshlandi, siz hayron bo'lishingiz mumkin, shuning uchun men sizga xabar beraman;) Siz mening oddiy indüksiyon isitgichi uchun ko'rsatmalarni ko'rgandirsiz va