Isi kandungan:

Sistem Peningkatan Imej Zynq: 7 Langkah
Sistem Peningkatan Imej Zynq: 7 Langkah

Video: Sistem Peningkatan Imej Zynq: 7 Langkah

Video: Sistem Peningkatan Imej Zynq: 7 Langkah
Video: Setup a Zynq Processing System in Vivado IP Integrator - Zynq Training 2024, November
Anonim
Sistem Peningkatan Imej Zynq
Sistem Peningkatan Imej Zynq
Sistem Peningkatan Imej Zynq
Sistem Peningkatan Imej Zynq

Seperti yang mungkin anda ketahui dari tajuknya, tujuan projek ini adalah membuat Sistem Peningkatan Imej menggunakan ZYNQ ApSOC. Lebih khusus lagi, kami ingin membina sistem yang dapat menghilangkan kabut dari gambar atau video. Sistem ini akan menggunakan data visual dalam keadaan buruk sebagai input, memprosesnya menggunakan teknik peningkatan gambar dan kemudian mengeluarkan hasilnya.

Projek ini dibina dan diuji di Digilent Zybo Board tetapi peranti ZYNQ lain juga harus berfungsi.

Kami akan membahagikan projek ini dalam 3 bahagian:

1) INPUT = Gambar Input melalui Ethernet dari Komputer / Kamera

2) PROSES = Memproses Gambar

3) OUTPUT = Keluarkan Gambar melalui antara muka HDMI

Dengan cara yang sangat berlawanan, kita akan memulakan dengan bahagian output projek (ini akan memberi kita kemungkinan penyahpepijatan yang lebih baik) teruskan dengan input dan selesaikan dengan bahagian pemprosesan.

Langkah 1: Bahan

Bahan
Bahan

Untuk menyelesaikan projek ini, anda memerlukan:

PERKAKASAN

- mana-mana Papan ZYNQ dengan HDMI dan Ethernet harus berfungsi / Saya menggunakan Digilent Zybo

- Kabel USB A ke mikro B

- Kabel HDMI

- Kabel Ethernet

- Paparan dengan input HDMI

PERISIAN

- Xilinx Vivado

- Xilinx SDK

Langkah 2: OUTPUT - Pengawal VGA Bahagian 1

OUTPUT - Pengawal VGA Bahagian 1
OUTPUT - Pengawal VGA Bahagian 1

Kami akan mengeluarkan data visual kami menggunakan port HDMI yang terdapat di papan tulis. Port HDMI disambungkan ke sebelah sisi PL (Logic yang Dapat Diprogramkan = FPGA) ZYNQ dan kami perlu merancang pengawal di VHDL untuknya. Sekiranya anda pernah merancang pengawal VGA, anda akan mendapati ini sangat serupa. Masa untuk HDMI dan VGA sebenarnya sama, sebenarnya anda boleh menggunakan pengawal VGA yang ada untuk mendapatkan pengawal HDMI.

Untuk pemahaman yang lebih baik mengenai apa yang sebenarnya berlaku, pertama-tama kita akan merancang pengawal VGA

Kami mahu memaparkan pada resolusi 1920x1080.

Pengawal VGA bertanggungjawab untuk mengirimkan data piksel (dalam format RGB) secara berurutan, piksel demi piksel ke paparan. Di luar kawasan paparan sebenar 1920x1080 terdapat juga beberapa kawasan "sempadan", iaitu: beranda depan, beranda belakang dan mengundur. Ukuran dalam piksel kawasan ini adalah standard dan khusus untuk setiap resolusi. Kawasan ini TIDAK benar-benar muncul di skrin tetapi wajib dan warna piksel di kawasan ini mestilah hitam. Soalan yang sah ialah mengapa kawasan tambahan ini diperlukan. Soalan ini bertentangan dengan tujuan ini, tetapi jika anda ingin tahu, saya akan mendorong anda untuk membuat kajian lebih lanjut dalam talian.

Ini adalah video yang baik yang menerangkan antara muka VGA

Sekiranya kami mahu paparan pada resolusi 1920 * 1080, dan ini adalah masanya:

Kawasan Paparan Mendatar = 1920 piksel

Serambi Fron Mendatar = 88 piksel

Serambi Belakang Mendatar = 148 piksel

Latar Belakang Mendatar = 44 piksel

Kawasan Paparan Vertikal = 1080 piksel

Serambi Depan Vertikal = 4 piksel

Serambi Belakang Vertikal = 36 piksel

Retrace Vertikal = 5 piksel

(Di sini anda dapat mencari masa untuk penyelesaian lain

Jadi resolusi sebenar kami adalah 2200 x 1125. Kami mahukan 60 fps (bingkai sesaat) jadi jam piksel kami akan menjadi 60 * 2200 * 1125 = 148.5 MHz. Di Papan Zybo disediakan jam 125 Mhz. Kami akan menggunakan IP MMCM untuk menghasilkan Jam Pixel 148.5 MHz yang kami perlukan.

Langkah 3: OUTPUT - Pengawal VGA Bahagian 2

OUTPUT - Pengawal VGA Bahagian 2
OUTPUT - Pengawal VGA Bahagian 2

Dengan latar belakang teori dari langkah sebelumnya, anda seharusnya dapat merancang pengawal VGA anda sendiri. Saya akan memberikan anda projek Vivado yang melakukannya tetapi saya menasihati anda sekurang-kurangnya mencuba membuatnya sendiri terlebih dahulu.

Sebilangan besar port VGA tidak memberi anda 8 bit per saluran warna per piksel (lihat gambar di atas) jadi anda perlu menyesuaikan reka bentuk dengan jumlah pin per warna yang disediakan oleh Papan (ini bukan masalah untuk HDMI).

Reka bentuk akan melukis seluruh skrin biru, kecuali piksel kiri atas yang akan berwarna merah. Perlu diingatkan bahawa projek ini menggunakan kekangan untuk ZYBO Board. Oleh itu, jika anda ingin menjalankan projek ini di Papan yang lain, anda harus mengemas kini fail kekangan dan menyesuaikan bilangan pin setiap warna.

Lihat gambar nr. 2. Ingat bahawa sementara Pengawal VGA kami mengeluarkan 5/6 bit per warna, bit tersebut akan ditukar menjadi satu isyarat analog untuk setiap saluran warna (Merah, Hijau dan Biru) sebelum melalui kabel.

Langkah 4: OUTPUT - Pengawal HDMI Bahagian 1

OUTPUT - Pengawal HDMI Bahagian 1
OUTPUT - Pengawal HDMI Bahagian 1

Setelah kita mengetahui bagaimana pengawal VGA berfungsi dan kita mempunyai reka bentuk yang berfungsi, kita dapat meneruskan pengawal HDMI. Pengawal HDMI sebenarnya akan menggunakan semua kod yang kami kembangkan dalam pengawal VGA. HDMI dan VGA menggunakan pemasa yang sama dan isyarat yang sama. Perbezaannya muncul pada pin ouput.

Walaupun VGA menggunakan satu wayar untuk setiap warna dan mengirimkan isyarat analog di seberang, HDMI menghantar data secara digital 1 bit pada satu masa untuk setiap warna dan menggunakan isyarat pembezaan. Isyarat pembezaan bermaksud bahawa untuk setiap bit HDMI mempunyai 2 pin dengan satu yang berlawanan dengan yang lain. Oleh itu, jika kita ingin menghantar isyarat '1', kita akan menghantar '1' pada wayar dan '1' ditolak pada wayar yang lain. Ini memastikan integriti isyarat dan anda boleh membaca lebih lanjut mengenainya di sini https://goo.gl/6CPCzB. Kami mempunyai salah satu saluran ini untuk setiap warna, MERAH, HIJAU dan BIRU dan satu untuk jam. Oleh kerana spesifik pembezaan isyarat, isyarat yang kita hantar melalui HDMI mestilah seimbang DC yang bermaksud bahawa bilangan 1 dan 0 mesti kira-kira sama dalam jangka masa tertentu. Untuk mencapai ini, kami akan menggunakan pengekodan 8b / 10b. Anda boleh belajar banyak mengenai bagaimana isyarat berbeza dan pengekodan 8b / 10b berfungsi dari spesifikasi DVI di sini https://goo.gl/hhh8Ge (DVI dan HDMI menggunakan isyarat video yang sama).

Langkah 5: OUTPUT - Pengawal HDMI Bahagian 2

OUTPUT - Pengawal HDMI Bahagian 2
OUTPUT - Pengawal HDMI Bahagian 2

Cukup teori, mari masuk ke projek kami. Semasa di Pengawal VGA, kita berjaya mendapatkan jam 148.5 MHz, di sini kita harus memberikan frekuensi 10 kali ganda kerana kita ingin menghantar 8 bit untuk setiap warna dan menggunakan pengekodan 8b / 10b yang diterjemahkan menjadi 10 bit per piksel dan 10 * 148.5MHz = 1485MHz. Itu adalah frekuensi yang besar yang tidak dapat diperoleh di Papan Zybo. Nasib baik kami mendapat beberapa helah. Kita dapat mengurus 5 * 148.5MHz = 742.5MHz dan kita akan menggunakan IP OSERDES (serializer) untuk menghantar data pada sisi naik dan turun jam 742.5Mhz, jadi kita akan benar-benar mendapatkan data yang dihantar pada 1485MHz. Vivado akan memberi kami beberapa amaran masa dan anda selalu boleh mendapatkan resolusi yang lebih rendah dengan jam yang lebih kecil, tetapi kerana ia berfungsi, kami tidak keberatan buat masa ini (amaran berkaitan dengan fakta bahawa penyangga jam tidak secara rasmi frekuensi sokongan lebih tinggi daripada 464MHz).

Jadi apa yang perlu kita lakukan adalah menyandikan data dari output Pengawal VGA kami dalam format 8b / 10b dan kemudian menyusunnya seperti yang disebutkan di atas. Kita juga perlu menambahkan MMCM lain ke projek untuk menghasilkan jam 742.5MHz untuk bersiri.

Saya melampirkan di bawah fail vhdl untuk encoder dan serializer. Anda mesti mengekod saluran RGB terlebih dahulu dan kemudian menyusunnya.

Contoh untuk saluran merah:

TMDS_encoder_RED: TMDS_encoder

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

Serialiser_RED: Serialiser10_1

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

Input "c" ke TMDS_encoder adalah "00" untuk merah dan hijau dan "vsync & hsync" untuk biru (ini adalah sebahagian daripada spesifikasi DVI

Langkah 6: Memaparkan Imej Dari RAM

Memaparkan Imej Dari RAM
Memaparkan Imej Dari RAM

Tujuan pengawal HDMI adalah untuk memaparkan gambar yang diproses. Sekarang, dengan pengawal yang dilaksanakan dan siap digunakan, kita harus memikirkan untuk memberi makan pengawal ini dengan data. Memandangkan banyak proses peningkatan gambar akan berlaku di PS (Processing System = ARM Processor) dan gambar yang dihasilkan akan berada di DDR RAM. Oleh itu, kita memerlukan kaedah untuk mendapatkan data dari RAM ke pengawal HDMI.

Untuk mencapai ini, anda memerlukan 3 IP:

1) VDMA (Akses Memori Langsung Video)

2) VTC (Pengawal masa video)

3) Streaming ke Video Out (kami akan memanggilnya S2VO mulai sekarang)

S2VO sebenarnya akan memberikan isyarat RGB 24BIT ke output dan isyarat HSYNC dan VSYNC yang diperlukan. Oleh itu, kita boleh membiarkan bahagian pengawal HDMI itu keluar.

Anda harus menambahkan IP ini ke reka bentuk anda, mengkonfigurasinya dan membuat sambungan yang betul.

Akhirnya anda harus mendapatkan sesuatu yang menyerupai skema di atas.

Langkah 7: OUTPUT - SDK TAMAT

OUTPUT - TAMAT SDK
OUTPUT - TAMAT SDK

Dengan semua perkakasan yang telah siap dan siap untuk digunakan, kita sekarang mesti membina perisian di PS. Kami akan mengeksport perkakasan dan aliran bit dan melancarkan SDK.

1) Fail -> Eksport -> Eksport Perkakasan -> Periksa Sertakan Bitstream dan Tekan OK

2) Fail -> Lancarkan SDK

Di SDK buat projek aplikasi baru.

3) Fail -> Baru -> Projek Aplikasi

4) Pilih nama untuk projek anda dan tekan Next

5) Pilih templat "Hello World" dan tekan Selesai

Aplikasi dalam SDK perlu memprogram VDMA. Terdapat beberapa fungsi standard yang digunakan untuk menyelesaikannya (saya akan melihat secara terperinci apabila saya mempunyai masa).

Untuk menguji reka bentuk kami, kami akan menggunakan ciri Pemulihan SDK (Alat Xilinx -> Dump / Restore) untuk memasukkan gambar ke dalam memori DDR RAM dan memaparkannya menggunakan Pengawal HDMI kami. Anda boleh memuatkan gambar di mana sahaja yang anda mahukan (kecuali beberapa kawasan kecil yang terhad di awal memori). Sebagai contoh kami memilih alamat 16777216 dan ukuran fail 8294400 = 1920 * 1080 * 4 (4 saluran = RGB + alpha).

Ianya berfungsi !

Akan bersambung

Disyorkan: