İçindekiler:
- Adım 1: Malzemeler
- 2. Adım: ÇIKIŞ - VGA Denetleyici Bölüm 1
- 3. Adım: ÇIKIŞ - VGA Denetleyici Bölüm 2
- Adım 4: ÇIKIŞ - HDMI Denetleyici Bölüm 1
- Adım 5: ÇIKIŞ - HDMI Denetleyici Bölüm 2
- Adım 6: RAM'den Görüntüleri Görüntüleme
- Adım 7: ÇIKTI - SDK SONU
Video: Zynq Görüntü Geliştirme Sistemi: 7 Adım
2024 Yazar: John Day | [email protected]. Son düzenleme: 2024-01-30 13:20
Adından da anlaşılacağı gibi, bu projenin amacı ZYNQ ApSOC kullanarak bir Görüntü İyileştirme Sistemi yapmaktır. Daha spesifik olarak, görüntülerden veya videolardan sisi temizleyebilecek bir sistem kurmak istiyoruz. Bu sistem, kötü koşullarda görsel verileri girdi olarak alacak, görüntü iyileştirme tekniklerini kullanarak işleyecek ve ardından sonucu çıkaracaktır.
Proje Digilent Zybo Board üzerinde inşa edilmiş ve test edilmiştir ancak diğer ZYNQ cihazları da çalışmalıdır.
Bu projeyi 3 bölüme ayıracağız:
1) GİRİŞ = Bilgisayardan/Kameradan Ethernet üzerinden Giriş Görüntüsü
2) SÜREÇ = Görüntüyü İşleyin
3) ÇIKIŞ = Görüntünün bir HDMI arabirimi aracılığıyla çıkışı
Sezgilere aykırı bir şekilde, projenin çıktı kısmıyla başlayacağız (bu bize yol boyunca daha iyi hata ayıklama olanakları sağlayacaktır) girdi ile devam edecek ve işleme kısmı ile bitireceğiz.
Adım 1: Malzemeler
Bu projeyi tamamlamak için ihtiyacınız olacak:
DONANIM
- HDMI ve Ethernet'li herhangi bir ZYNQ Kartı çalışmalı / Digilent Zybo kullanıyorum
- USB A'dan mikro B'ye USB kablosu
- HDMI kablosu
- Ethernet kablosu
- HDMI girişli ekran
YAZILIM
- Xilinx Vivado
-Xilinx SDK'sı
2. Adım: ÇIKIŞ - VGA Denetleyici Bölüm 1
Kartta bulunan HDMI bağlantı noktasını kullanarak görsel verilerimizi çıkaracağız. HDMI bağlantı noktası, ZYNQ'nun PL (Programlanabilir Mantık = FPGA) tarafına bağlıdır ve bunun için VHDL'de bir denetleyici tasarlamamız gerekecek. Daha önce bir VGA denetleyici tasarladıysanız, buna çok benzer bulacaksınız. HDMI ve VGA zamanlamaları aslında aynıdır, aslında bir HDMI denetleyicisi elde etmek için mevcut bir VGA denetleyicisi üzerine inşa edebilirsiniz.
Gerçekte ne olduğunu daha iyi anlamak için önce bir VGA denetleyici tasarlayacağız.
1920x1080 çözünürlükte görüntülemek istiyoruz.
VGA denetleyicisi, piksel verilerini (RGB formatında) sırayla, piksel piksel ekrana iletmekten sorumludur. 1920x1080'lik gerçek görüntü alanının dışında ayrıca bazı "sınır" alanları vardır, yani: ön sundurma, arka sundurma ve geri izleme. Bu alanların piksel cinsinden boyutu standarttır ve her çözünürlüğe özeldir. Bu alanlar aslında ekranda GÖRÜNMEMEKTEDİR ancak zorunludur ve bu alandaki piksellerin rengi siyah olmalıdır. Geçerli bir soru, bu ekstra alanlara neden ihtiyaç duyulduğu olacaktır. Bu soru, bu talimatın amacına meydan okuyor, ancak merak ediyorsanız, çevrimiçi olarak daha fazla araştırma yapmanızı tavsiye ederim.
Bu, VGA arayüzünü açıklayan iyi bir videodur
Bizim durumumuzda 1920*1080 çözünürlükte görüntüleme yapmak istiyoruz ve bunlar zamanlamalar:
Yatay Görüntüleme Alanı = 1920 piksel
Yatay Ön Sundurma = 88 piksel
Yatay Arka Sundurma = 148 piksel
Yatay Geri İzleme =44 piksel
Dikey Görüntüleme Alanı = 1080 piksel
Dikey Ön Sundurma = 4 piksel
Dikey Arka Sundurma = 36 piksel
Dikey Geri İzleme = 5 piksel
(Burada diğer çözünürlükler için zamanlamaları bulabilirsiniz
Yani gerçek çözünürlüğümüz 2200 x 1125 olacaktır. 60 fps (kare/saniye) istiyoruz, yani piksel saatimiz 60*2200*1125 = 148,5 MHz olacaktır. Zybo Board'da 125 Mhz'lik bir saat sağlanır. İhtiyacımız olan 148,5 MHz Piksel Saatini oluşturmak için bir MMCM IP kullanacağız.
3. Adım: ÇIKIŞ - VGA Denetleyici Bölüm 2
Önceki adımın teorik arka planı ile kendi VGA denetleyicinizi tasarlayabilmelisiniz. Size bunu yapan bir Vivado projesi sunacağım ama en azından önce kendi başınıza yapmaya çalışmanızı tavsiye ederim.
Çoğu VGA bağlantı noktası, piksel başına renk kanalı başına 8 bit vermez (yukarıdaki resme bakın), bu nedenle tasarımı, Kartın sağladığı renk başına pin sayısına uyarlamanız gerekir (bu, HDMI için bir sorun değildir).
Tasarım, kırmızı olacak olan sol üst piksel dışında tüm ekranı maviye boyayacaktır. Bu projenin ZYBO Kurulu için kısıtlamaları kullandığına dikkat edilmelidir. Dolayısıyla, bu projeyi başka bir Panoda çalıştırmak istiyorsanız, kısıtlamalar dosyasını güncellemeli ve renk başına pin sayısını uyarlamalısınız.
Şekil no'ya bir göz atın. 2. VGA Kontrolörümüz renk başına 5/6 bit çıktı verirken, kablodan geçmeden önce bu bitlerin her bir renk kanalı (Kırmızı, Yeşil ve Mavi) için bir analog sinyale dönüştürüldüğünü unutmayın.
Adım 4: ÇIKIŞ - HDMI Denetleyici Bölüm 1
Artık VGA denetleyicisinin nasıl çalıştığını bildiğimize ve çalışan bir tasarımımız olduğuna göre HDMI denetleyicisi ile devam edebiliriz. HDMI denetleyicisi aslında VGA denetleyicisinde geliştirdiğimiz tüm kodu kullanacaktır. HDMI ve VGA aynı zamanlamaları ve aynı sinyalleri kullanır. Fark, çıkış pinlerinde görünür.
VGA, her renk için bir kablo kullanarak ve bunun üzerinden bir analog sinyal gönderirken, HDMI, verileri her renk için bir seferde 1 bit dijital olarak iletir ve diferansiyel sinyalleme kullanır. Diferansiyel sinyal, her bit için HDMI'nın biri diğerinin zıttı olan 2 pime sahip olduğu anlamına gelir. Yani bir '1' sinyali iletmek istiyorsak, bir kabloda '1' iletiriz ve diğer kabloda '1' olumsuzlanır. Bu, sinyal bütünlüğünü sağlar ve bununla ilgili daha fazla bilgiyi buradan https://goo.gl/6CPCzB okuyabilirsiniz. Her renk için bu kanallardan biri, KIRMIZI, YEŞİL ve MAVİ ve saat için bir tane var. Diferansiyel sinyallemenin özellikleri nedeniyle, hdmi aracılığıyla gönderdiğimiz sinyaller DC dengeli olmalıdır, bu da 1'lerin ve 0'ların sayısının belirli bir zaman aralığında kabaca eşit olması gerektiği anlamına gelir. Bunu başarmak için 8b/10b kodlamasını kullanacağız. https://goo.gl/hhh8Ge adresindeki DVI spesifikasyonundan diferansiyel sinyalleme ve 8b/10b kodlamanın nasıl çalıştığı hakkında çok şey öğrenebilirsiniz (DVI ve HDMI aynı video sinyallerini kullanır).
Adım 5: ÇIKIŞ - HDMI Denetleyici Bölüm 2
Yeter teori, gelelim projemize. VGA Denetleyicide 148,5 MHz'lik bir saat ile kurtulduk, burada her renk için 8 bit iletmek istediğimiz ve piksel başına 10 bit ve 10 bit anlamına gelen 8b/10b kodlamasını kullanmak istediğimiz için bu frekansın 10 katını sağlamamız gerekecek. *148.5MHz = 1485MHz. Bu, Zybo Board'da elde edilemeyecek kadar büyük bir frekanstır. Neyse ki elimizde birkaç numara var. 5*148.5MHz = 742.5MHz'i yönetebiliriz ve verileri 742.5Mhz saatin hem yükselen hem de düşen kenarında iletmek için bir OSERDES (serileştirici) IP kullanacağız, bu yüzden aslında 1485MHz'de iletilen verileri alacağız. Vivado bize bazı zamanlama uyarıları verecek ve her zaman daha küçük bir saatle daha düşük bir çözünürlüğe gidebilirsiniz, ancak çalıştığı için şimdilik bunu gerçekten umursamıyoruz (uyarılar, saat arabelleklerinin resmi olarak olmadığı gerçeğiyle ilgilidir. 464MHz'den daha yüksek frekansları destekler).
O halde yapmamız gereken VGA Controller çıkışımızdan gelen verileri 8b/10b formatında kodlamak ve daha sonra yukarıda bahsedildiği gibi seri hale getirmektir. Serileştirme için 742.5MHz saati oluşturmak için projeye başka bir MMCM eklememiz gerekecek.
Kodlayıcı ve serileştirici için vhdl dosyalarını aşağıya ekledim. Önce RGB kanallarını kodlamanız ve ardından bunları seri hale getirmeniz gerekir.
Kırmızı kanal için örnek:
TMDS_encoder_RED: TMDS_encoder
port haritası(clk148, red_channel_8bits, c_red, video_on, encoded_red_10bits);
Serileştirici_RED: Serileştirici10_1
port haritası(clk148, clk742, encoding_red_10bits, reset, red_serial_1bit);
TMDS_encoder'ın "c" girişi kırmızı ve yeşil için "00" ve mavi için "vsync & hsync"'dir (bu, https://goo.gl/hhh8Ge DVI spesifikasyonunun bir parçasıdır).
Adım 6: RAM'den Görüntüleri Görüntüleme
HDMI denetleyicisinin amacı, işlenmiş görüntüleri görüntülemektir. Şimdi, denetleyici uygulanmış ve kullanıma hazır olduğunda, bu denetleyiciyi verilerle beslemeyi düşünmeliyiz. Pek çok görüntü geliştirme işleminin PS'de (İşleme Sistemi = ARM İşlemci) gerçekleşeceği ve elde edilen görüntülerin DDR RAM'de bulunacağı göz önüne alındığında. Bu yüzden verileri RAM'den HDMI denetleyicisine almanın bir yoluna ihtiyacımız var.
Bunu başarmak için 3 IP'ye ihtiyacınız olacak:
1) VDMA (Video Doğrudan Bellek Erişimi)
2) VTC (Video zamanlama Denetleyicisi)
3) Video Çıkışına Akış (bundan sonra S2VO olarak adlandıracağız)
S2VO aslında çıkışa bir RGB 24BIT sinyali ve gerekli HSYNC ve VSYNC sinyalleri sağlayacaktır. Böylece HDMI denetleyicisinin o kısmını dışarıda bırakabiliriz.
Bu IP'leri tasarımınıza eklemeli, yapılandırmalı ve uygun bağlantıları yapmalısınız.
Sonunda yukarıdaki şemaya benzeyen bir şey almalısınız.
Adım 7: ÇIKTI - SDK SONU
Tüm donanımlar kurulmuş ve kullanıma hazır durumdayken, şimdi yazılımı PS'de oluşturmalıyız. Donanımı ve veri akışını dışa aktaracağız ve SDK'yı başlatacağız.
1) Dosya -> Dışa Aktar -> Donanımı Dışa Aktar -> Bit Akışını Dahil Et seçeneğini işaretleyin ve Tamam'a basın
2) Dosya -> SDK'yı Başlat
SDK'da yeni bir uygulama projesi oluşturun.
3) Dosya -> Yeni -> Uygulama Projesi
4) Projeniz için bir isim seçin ve İleri'ye basın
5) "Merhaba Dünya" şablonunu seçin ve Bitir'e basın
SDK'daki uygulamanın VDMA'yı programlaması gerekecektir. Bunu başarmak için kullanılan bazı standart işlevler vardır (zamanım olduğunda ayrıntılara gireceğim).
Tasarımımızı test etmek için SDK Geri Yükleme (Xilinx Tools -> Dump/Restore) özelliğini kullanarak DDR RAM belleğe bir resim koyacağız ve bunu HDMI Kontrolörümüzü kullanarak görüntüleyeceğiz. Görüntüyü istediğiniz yere yükleyebilirsiniz (belleğin başındaki bazı küçük kısıtlı alanlar hariç). Örneğimiz için 16777216 adresini ve 8294400 = 1920*1080*4 dosya boyutunu (4 kanal = RGB + alfa) seçtik.
İşe yarıyor !
Devam edecek
Önerilen:
Görüntü İşleme Tabanlı Yangın Tanıma ve Söndürme Sistemi: 3 Adım
Görüntü İşleme Tabanlı Yangın Tanıma ve Söndürme Sistemi : Merhaba arkadaşlar Arduino kullanan görüntü işleme tabanlı yangın algılama ve söndürme sistemidir
Raspberry Pi ile Görüntü İşleme: OpenCV Kurulumu ve Görüntü Renk Ayrımı: 4 Adım
Raspberry Pi ile Görüntü İşleme: OpenCV Kurulumu ve Görüntü Renk Ayrımı: Bu gönderi, takip edilecek birkaç görüntü işleme eğitiminden ilkidir. Bir görüntüyü oluşturan piksellere daha yakından bakıyoruz, Raspberry Pi'ye OpenCV yüklemeyi öğreniyoruz ve ayrıca bir görüntü yakalamak için test komut dosyaları yazıyoruz ve ayrıca c
PIC Mikrodenetleyici Geliştirme Kartı Sistemi: 3 Adım
PIC Mikrodenetleyici Geliştirme Kartı Sistemi: Bu proje, çok çeşitli PIC tabanlı elektronik projelere uyacak şekilde esnek olan bir PIC geliştirme aracının tasarımı ve kullanımı içindir. Geliştirme araçlarının kullanımıyla mikrodenetleyici projeleri geliştirmek genellikle daha kolaydır; kullanıcı tabanlı izin veren
WIDI - Zybo Kullanan Kablosuz HDMI (Zynq Geliştirme Kartı): 9 Adım (Resimlerle)
WIDI - Zybo (Zynq Geliştirme Kartı) Kullanan Kablosuz HDMI: Hiç TV'nizi bir PC veya dizüstü bilgisayara harici bir monitör olarak bağlayabilmeyi dilediniz, ancak tüm bu sinir bozucu kablolara sahip olmak istemediniz mi? Eğer öyleyse, bu eğitim tam size göre! Bu hedefe ulaşan bazı ürünler olsa da, bir
Getto Programlanabilir Mantık (CPLD) Geliştirme Sistemi: 13 Adım
Getto Programlanabilir Mantık (CPLD) Geliştirme Sistemi: Son birkaç aydır AVR işlemcileri için Getto Geliştirme Sisteminden keyif alıyorum. Aslında, bu neredeyse sıfır dolarlık araç o kadar büyüleyici ve kullanışlı olduğunu kanıtladı ki, konsepti F'ye genişletmenin mümkün olup olmadığını merak ettim