Mündəricat:

Zynq Image Enhancement System: 7 Addım
Zynq Image Enhancement System: 7 Addım

Video: Zynq Image Enhancement System: 7 Addım

Video: Zynq Image Enhancement System: 7 Addım
Video: Image Processing on Zynq (FPGAs) : Part 3 Design of MAC 2024, Noyabr
Anonim
Zynq Şəkil Təkmilləşdirmə Sistemi
Zynq Şəkil Təkmilləşdirmə Sistemi
Zynq Şəkil Təkmilləşdirmə Sistemi
Zynq Şəkil Təkmilləşdirmə Sistemi

Yəqin ki, başlıqdan başa düşə biləcəyiniz kimi, bu layihənin məqsədi ZYNQ ApSOC -dan istifadə edərək Şəkil Təkmilləşdirmə Sistemi hazırlamaqdır. Daha dəqiq desək, şəkilləri və ya videodan dumanı təmizləyən bir sistem qurmaq istəyirik. Bu sistem yoxsul şəraitdə vizual məlumatları giriş olaraq qəbul edəcək, şəkil təkmilləşdirmə üsullarından istifadə edərək emal edəcək və sonra nəticəni çıxaracaq.

Layihə Digilent Zybo Board -da quruldu və sınaqdan keçirildi, lakin digər ZYNQ cihazları da işləməlidir.

Bu layihəni 3 hissəyə ayıracağıq:

1) GİRİŞ = Kompüterdən/Kameradan Ethernet vasitəsilə Şəkil daxil edin

2) PROSES = Şəkli emal edin

3) ÇIXIŞ = Bir HDMI interfeysi vasitəsilə Şəkli Çıxar

Çox ziddiyyətli bir şəkildə, layihənin çıxış hissəsindən başlayacağıq (bu bizə yol boyunca daha yaxşı ayıklama imkanları verəcək) girişlə davam edin və emal hissəsi ilə bitirin.

Addım 1: Materiallar

Materiallar
Materiallar

Bu layihəni başa çatdırmaq üçün sizə lazım olacaq:

DONANIM

- HDMI və Ethernet olan hər hansı bir ZYNQ Board işləməlidir / Digilent Zybo istifadə edirəm

- USB A - mikro B USB kabeli

- HDMI kabeli

- Ethernet kabeli

- HDMI girişli ekran

PROQRAM TƏMİNATI

- Xilinx Vivado

- Xilinx SDK

Addım 2: Çıxış - VGA Controller Part 1

Çıxış - VGA Nəzarətçisi 1 -ci hissə
Çıxış - VGA Nəzarətçisi 1 -ci hissə

Lövhədə olan HDMI portundan istifadə edərək vizual məlumatlarımızı çıxaracağıq. HDMI portu ZYNQ -nin PL (Programlanabilir Logic = FPGA) tərəfinə bağlıdır və bunun üçün VHDL -də bir nəzarətçi dizayn etməliyik. VGA idarəedicisini hazırlamısınızsa, buna bənzər bir şey tapa bilərsiniz. HDMI və VGA vaxtları əslində eynidir, əslində bir HDMI nəzarətçi əldə etmək üçün mövcud bir VGA nəzarətçisinə qura bilərsiniz.

Əslində baş verənləri daha yaxşı başa düşmək üçün əvvəlcə bir VGA idarəedici quracağıq

1920x1080 ölçüsündə göstərmək istəyirik.

VGA nəzarətçisi, piksel məlumatlarını (RGB formatında) ardıcıl olaraq piksel ilə pikselin ekrana ötürülməsindən məsuldur. 1920x1080 -in həqiqi ekran sahəsinin xaricində bəzi "sərhəd" sahələri də var: ön eyvan, arxa eyvan və geri çəkmə. Bu sahələrin piksel ölçüsü standartdır və hər bir qətnaməyə xasdır. Bu sahələr əslində ekranda görünmür, lakin məcburidir və bu sahədəki piksellərin rəngi qara olmalıdır. Doğru bir sual, bu əlavə sahələrin nəyə görə lazım olmasıdır. Bu sual bu təlimatın məqsədinə ziddir, amma maraqlanırsınızsa, sizi onlayn olaraq daha çox araşdırma aparmağa təşviq edərdim.

Bu VGA interfeysini izah edən yaxşı bir videodur

Bizim vəziyyətimizdə 1920*1080 qətnamədə göstərmək istəyirik və bu zamanlamalardır:

Yatay Görüntü Sahəsi = 1920 piksel

Yatay Ön Sundurma = 88 piksel

Yatay Arxa Sundurma = 148 piksel

Horizontal Retrace = 44 piksel

Şaquli Görüntü Sahəsi = 1080 piksel

Şaquli Ön Sundurma = 4 piksel

Şaquli Arxa Sundurma = 36 piksel

Şaquli geri çəkmə = 5 piksel

(Burada digər qətnamələr üçün vaxtları tapa bilərsiniz

Əsl qətnaməmiz 2200 x 1125 olacaq. 60 fps (saniyədə kadr) istəyirik, buna görə piksel saatımız 60*2200*1125 = 148.5 MHz olacaq. Zybo lövhəsində 125 MHz tezliyi var. Ehtiyacımız olan 148.5 MHz pikselli saat yaratmaq üçün MMCM IP istifadə edəcəyik.

Addım 3: Çıxış - VGA Controller Part 2

Çıxış - VGA Nəzarətçisi 2 -ci hissə
Çıxış - VGA Nəzarətçisi 2 -ci hissə

Əvvəlki addımdakı nəzəri məlumatlarla öz VGA nəzarətçinizi dizayn edə bilməlisiniz. Sizə bunu edən bir Vivado layihəsi təqdim edəcəyəm, amma heç olmasa əvvəlcə bunu özünüz etməyi məsləhət görürəm.

Əksər VGA portları piksel başına rəng kanalı başına 8 bit vermir (yuxarıdakı şəklə baxın), buna görə də dizaynı lövhənin verdiyi rəng başına pin sayına uyğunlaşdırmalısınız (bu HDMI üçün problem deyil).

Dizayn, sol üst pikseldən başqa, bütün ekranı mavi rəngə boyayacaq. Qeyd etmək lazımdır ki, bu layihə ZYBO İdarə Heyəti üçün məhdudiyyətlərdən istifadə edir. Bu layihəni başqa bir lövhədə idarə etmək istəyirsinizsə, məhdudiyyətlər faylını yeniləməli və rəng başına pin sayını uyğunlaşdırmalısınız.

Nr rəqəminə baxın. 2. Unutmayın ki, VGA Controllerimiz rəng başına 5/6 bit çıxardığı halda, bu bitlər kabeldən keçməzdən əvvəl hər rəng kanalı (Qırmızı, Yaşıl və Mavi) üçün bir analoq siqnala çevrilir.

Addım 4: Çıxış - HDMI Nəzarətçisi 1 -ci hissə

Çıxış - HDMI Nəzarətçisi 1 -ci hissə
Çıxış - HDMI Nəzarətçisi 1 -ci hissə

İndi VGA nəzarətçisinin necə işlədiyini bilirik və HDMI nəzarətçi ilə davam edə biləcəyimiz işlək bir dizaynımız var. HDMI nəzarətçisi əslində VGA nəzarətçisində hazırladığımız bütün kodları istifadə edəcək. HDMI və VGA eyni vaxtları və eyni siqnalları istifadə edir. Çıxış pinlərində fərq görünür.

VGA hər rəng üçün bir tel istifadə edərək analoq siqnal ötürürsə, HDMI hər rəng üçün bir anda rəqəmsal olaraq 1 bit ötürür və diferensial siqnaldan istifadə edir. Diferensial siqnal, hər bit üçün HDMI -nın bir -birinin əksinə olan 2 pinin olması deməkdir. Beləliklə, '1' siqnalını ötürmək istəsək, teldə '1' və digər teldə '1' rədd edilir. Bu siqnal bütövlüyünü təmin edir və bu barədə daha çox oxuya bilərsiniz https://goo.gl/6CPCzB. Hər bir rəng üçün bu kanallardan birimiz var, QIRMIZI, YAŞIL və MAVİ və bir saat üçün. Diferensial siqnalizasiya xüsusiyyətlərindən ötəri hdmi vasitəsi ilə göndərdiyimiz siqnallar DC balanslaşdırılmış olmalıdır ki, bu da 1 və 0 rəqəmlərinin müəyyən bir zaman aralığında təxminən bərabər olması deməkdir. Bunu etmək üçün 8b/10b kodlaşdırma istifadə edəcəyik. DVI spesifikasiyasından diferensial siqnalizasiya və 8b/10b kodlaşdırmanın necə işlədiyini burada öyrənə bilərsiniz https://goo.gl/hhh8Ge (DVI və HDMI eyni video siqnallarını istifadə edir).

Addım 5: Çıxış - HDMI Nəzarətçisi 2 -ci hissə

Çıxış - HDMI Nəzarətçisi 2 -ci hissə
Çıxış - HDMI Nəzarətçisi 2 -ci hissə

Kifayət qədər nəzəriyyə, layihəmizə keçək. VGA Controller -də 148.5 MHz tezliyi ilə qaçdığımız halda, burada hər rəng üçün 8 bit ötürmək istədiyimiz üçün və piksel başına 10 bitə çevrilən 8b/10b kodlaşdırmasını istifadə etdiyimiz üçün bu tezliyi 10 dəfə təmin etməliyik. *148.5 MHz = 1485 MHz. Bu, Zybo lövhəsində əldə edilə bilməyən böyük bir tezlikdir. Xoşbəxtlikdən əlimizdən bir neçə fənd aldıq. 5*148.5MHz = 742.5MHz idarə edə bilərik və 742.5Mhz saatın həm yüksələn, həm də enən kənarında məlumat ötürmək üçün OSERDES (serializer) IP istifadə edəcəyik, buna görə də məlumatları 1485MHz -də ötürəcəyik. Vivado bizə bəzi vaxt xəbərdarlıqları verəcək və hər zaman daha kiçik bir saatla daha aşağı bir qətnamə əldə edə bilərsiniz, amma işlədiyi üçün indiyə qədər buna əhəmiyyət vermirik (xəbərdarlıqlar saat tamponlarının rəsmi olaraq işləməməsi ilə əlaqədardır) 464MHz -dən yüksək olan dəstəkləmə tezlikləri).

Beləliklə, etməli olduğumuz şey, VGA Controller çıxışımızdakı məlumatları 8b/10b formatında kodlaşdırmaq və sonra yuxarıda qeyd edildiyi kimi seriallaşdırmaqdır. Seriyalaşdırma üçün 742.5MHz saat yaratmaq üçün layihəyə başqa bir MMCM əlavə etməliyik.

Aşağıda kodlayıcı və serializator üçün vhdl fayllarını əlavə etdim. Əvvəlcə RGB kanallarını kodlamalı və sonra seriallaşdırmalısınız.

Qırmızı kanal üçün nümunə:

TMDS_encoder_RED: TMDS_encoder

liman xəritəsi (clk148, red_channel_8bits, c_red, video_on, encoded_red_10bits);

Serialiser_RED: Serialiser10_1

liman xəritəsi (clk148, clk742, encoded_red_10bits, sıfırlama, red_serial_1bit);

TMDS_encoder -ə "c" girişi qırmızı və yaşıl üçün "00", mavi üçün "vsync & hsync" dir (bu https://goo.gl/hhh8Ge DVI spesifikasiyasının bir hissəsidir).

Addım 6: Şəkilləri RAM -dan göstərin

RAM -dan görüntülərin göstərilməsi
RAM -dan görüntülərin göstərilməsi

HDMI nəzarətçisinin məqsədi işlənmiş şəkilləri göstərməkdir. İndi nəzarətçi tətbiq olunduqda və işə hazır olduqda, bu nəzarətçini məlumatlarla təmin etməyi düşünməliyik. Bir çox görüntü inkişaf etdirmə prosesinin PS -də (İşləmə Sistemi = ARM Prosessoru) baş verəcəyini və nəticədə meydana gələn görüntülərin DDR RAM -da yerləşəcəyini nəzərə alsaq. RAM -dan HDMI nəzarətçisinə məlumat əldə etmək üçün bir yol lazımdır.

Bunu etmək üçün 3 IP -ə ehtiyacınız olacaq:

1) VDMA (Video Birbaşa Yaddaşa Giriş)

2) VTC (Video vaxt nəzarətçisi)

3) Video Çıxışına axın (bundan sonra S2VO adlandıracağıq)

S2VO əslində çıxışa RGB 24BIT siqnalı və lazım olan HSYNC və VSYNC siqnalları verəcək. Beləliklə, HDMI nəzarətçisinin həmin hissəsini kənarda qoya bilərik.

Bu IP -ləri dizaynınıza əlavə etməli, konfiqurasiya etməli və düzgün əlaqələr qurmalısınız.

Nəhayət, yuxarıdakı sxemə bənzər bir şey almalısınız.

Addım 7: Çıxış - SDK SONU

Çıxış - SDK SONU
Çıxış - SDK SONU

Quraşdırılmış və getməyə hazır olan bütün qurğularla birlikdə proqramı PS -də qurmalıyıq. Donanımı və bit axını ixrac edəcəyik və SDK -nı işə salacağıq.

1) Fayl -> İxrac et -> Avadanlıq İxrac et -> Bitstream Daxil Edin və OK düyməsini basın

2) Fayl -> SDK -nı işə salın

SDK -da yeni bir tətbiq layihəsi yaradın.

3) Fayl -> Yeni -> Tətbiq Layihəsi

4) Layihəniz üçün bir ad seçin və Next düyməsini basın

5) "Hello World" şablonunu seçin və Finish düyməsini basın

SDK -dakı tətbiqin VDMA proqramlaşdırması lazımdır. Bunu yerinə yetirmək üçün istifadə olunan bəzi standart funksiyalar var (vaxtım olanda ətraflı məlumat verəcəyəm).

Dizaynımızı yoxlamaq üçün SDK Geri Yükləmə (Xilinx Alətləri -> Dump/Restore) xüsusiyyətindən istifadə edərək DDR RAM yaddaşına bir şəkil qoyub HDMI Nəzarətçimizdən istifadə edərək göstərə bilərik. Görüntünü istədiyiniz yerə yükləyə bilərsiniz (yaddaşın əvvəlində bəzi məhdud məhdud sahələr istisna olmaqla). Nümunəmiz üçün 16777216 ünvanını və fayl ölçüsünü 8294400 = 1920*1080*4 (4 kanal = RGB + alfa) seçdik.

İşləyir!

Ardı var

Tövsiyə: