Daftar Isi:

WIDI - HDMI Nirkabel Menggunakan Zybo (Zynq Development Board): 9 Langkah (dengan Gambar)
WIDI - HDMI Nirkabel Menggunakan Zybo (Zynq Development Board): 9 Langkah (dengan Gambar)

Video: WIDI - HDMI Nirkabel Menggunakan Zybo (Zynq Development Board): 9 Langkah (dengan Gambar)

Video: WIDI - HDMI Nirkabel Menggunakan Zybo (Zynq Development Board): 9 Langkah (dengan Gambar)
Video: Zybo Z7 Введение 2024, Juli
Anonim
WIDI - HDMI Nirkabel Menggunakan Zybo (Zynq Development Board)
WIDI - HDMI Nirkabel Menggunakan Zybo (Zynq Development Board)
WIDI - HDMI Nirkabel Menggunakan Zybo (Zynq Development Board)
WIDI - HDMI Nirkabel Menggunakan Zybo (Zynq Development Board)

Pernahkah Anda berharap dapat menghubungkan TV Anda ke PC atau laptop sebagai monitor eksternal, tetapi tidak ingin memiliki semua kabel yang mengganggu itu? Jika demikian, tutorial ini hanya untuk Anda! Meskipun ada beberapa produk yang mencapai tujuan ini, proyek DIY jauh lebih memuaskan dan berpotensi lebih murah.

Konsep ini berbeda dari produk seperti chromecast, karena dimaksudkan untuk menggantikan kabel HDMI yang terhubung ke monitor alih-alih menjadi perangkat streaming.

Proyek kami dibuat sebagai tugas akhir untuk mata kuliah Sistem Operasi Waktu Nyata di Universitas Politeknik Negeri California, San Luis Obispo.

Tujuan dari proyek ini adalah untuk memanfaatkan dua papan Digilent Zybo untuk bertindak sebagai antarmuka komunikasi nirkabel antara perangkat pemancar HDMI (PC, blu-ray, dll) ke perangkat penerima HDMI (Desktop Monitor, Proyektor, TV, dll).

Satu Digilent Zybo akan terhubung melalui HDMI ke perangkat pengirim, dan yang lainnya akan terhubung melalui HDMI ke perangkat penerima.

Komunikasi nirkabel akan dilakukan dengan menggunakan jaringan area lokal nirkabel yang didedikasikan untuk pemancar dan penerima, tanpa dirutekan melalui router rumah atau perangkat sejenis lainnya. Modul nirkabel yang digunakan untuk proyek ini adalah nanorouter tplink wr802n, salah satunya beroperasi sebagai titik akses untuk membangun jaringan dan yang lainnya untuk beroperasi sebagai klien untuk terhubung ke jaringan. Setiap nanorouter akan terhubung melalui kabel ethernet ke salah satu papan Zybo. Saat terhubung ke router ini, perangkat akan berkomunikasi melalui TCP seolah-olah mereka terhubung dengan kabel ethernet tunggal (artinya satu-satunya konfigurasi yang diperlukan untuk membuat koneksi adalah alamat IP klien).

Sementara tujuan dari proyek ini adalah untuk memfasilitasi streaming video 1080x720 @ 60Hz, ini tidak dapat dicapai karena keterbatasan bandwidth dalam jaringan nirkabel dan kurangnya kompresi video waktu nyata untuk mengurangi data yang diperlukan untuk dikirim. Alih-alih, proyek ini berfungsi sebagai kerangka kerja untuk pengembangan di masa mendatang untuk mencapai tujuan ini, karena proyek ini sangat membatasi batasan kecepatan bingkai untuk mengalirkan data HDMI dengan benar sebagaimana dimaksud.

Persyaratan Proyek:

2x Digilent Zybo Development Boards (harus memiliki setidaknya satu port HDMI)

2x kabel HDMI

2x kabel microusb (untuk menghubungkan Zybo ke PC untuk pengembangan)

2x tplink wr802n nanorouter (termasuk adtl. 2x microusb dan adaptor daya stopkontak)

2x kabel ethernet

***Catatan: Tutorial ini mengasumsikan keakraban dengan rangkaian desain Vivado dan pengalaman membuat proyek baru dan desain blok.***

Langkah 1: Konfigurasikan Logika yang Dapat Diprogram Zynq untuk Pemancar

Konfigurasikan Logika yang Dapat Diprogram Zynq untuk Pemancar
Konfigurasikan Logika yang Dapat Diprogram Zynq untuk Pemancar
Konfigurasikan Logika yang Dapat Diprogram Zynq untuk Pemancar
Konfigurasikan Logika yang Dapat Diprogram Zynq untuk Pemancar
Konfigurasikan Logika yang Dapat Diprogram Zynq untuk Pemancar
Konfigurasikan Logika yang Dapat Diprogram Zynq untuk Pemancar

Pendekatan kami untuk mengembangkan logika pemancar yang dapat diprogram adalah dengan melakukan pass-through HDMI-ke-HDmi dari PC ke monitor menggunakan dua blok Video Direct Memory Access (VDMA), satu untuk menulis dan satu untuk membaca.

Keduanya dipilih untuk mode 3 frame-buffer yang berjalan bebas (0-1-2). Karena inti video dioptimalkan untuk 60 frame per detik, ini berarti bahwa VDMA akan menulis atau membaca ke frame baru setiap 16,67 ms dalam urutan ini: 0, 1, 2, 0, 1, 2, 0, 1, 2. Lokasi memori DDR untuk setiap frame berbeda untuk kedua VDMA karena tidak lagi disinkronkan satu sama lain. Sebagai gantinya, timer perangkat keras (TTC1), dikonfigurasi untuk 60 Hz, digunakan untuk menyinkronkan pergerakan data antara dua lokasi memori.

Gambar di atas menunjukkan 3 bingkai, dimensinya dan jumlah memori yang dibutuhkan masing-masing (di sebelah kanan bingkai). Jika kita menetapkan VDMA tulis ke lokasi memori ini, maka kita dapat menetapkan lokasi memori VDMA baca di luar set ini, katakanlah dimulai dengan 0x0B000000. Setiap frame terdiri dari 1280*720 piksel dan setiap piksel terdiri dari 8 bit Merah, Hijau dan Biru dengan total 24 bit. Ini berarti bingkai terdiri dari 1280*720*3 byte (2,76 MB).

Di dalam IRQ pengatur waktu, yang dijelaskan dalam pengaturan driver VDMA, akan menangani penyalinan data antara dua lokasi memori VMDA. VDMA menyediakan pointer ke frame saat ini yang sedang ditulis atau dibaca. Bingkai diwakili oleh kode abu-abu tertentu, yang diubah dalam perangkat lunak. Definisi kode abu-abu untuk konfigurasi buffer-bingkai 3 dapat ditemukan di Panduan Produk AXI VDMA di lampiran C.

Ini memungkinkan kita untuk menyalin konten yang sedang ditulis ke memori tanpa membaca dari bingkai yang sedang ditulis.

***Perhatikan bahwa VDMA yang dibaca tidak digunakan saat mengirim data melalui jaringan nirkabel. Satu-satunya tujuan adalah untuk memverifikasi operasi yang tepat dari menyalin memori dari VMDA tulis. VMDA baca harus dinonaktifkan.***

Berikut langkah-langkah membuat Blok Desain Pemancar:

  1. Saat membuat proyek baru, ada baiknya untuk menetapkan chip atau papan ke proyek tersebut. Tautan ini menjelaskan cara menambahkan file papan baru ke direktori Vivado dan mengaitkan papan yang benar dengan proyek Anda. Ini akan berguna saat menambahkan blok Sistem Pemrosesan dan transisi dari perangkat keras ke perangkat lunak (sisi SDK).
  2. Tambahkan blok berikut:

    • dvi2rgb
    • Video masuk ke aliran Axi4
    • Pengontrol Waktu
    • axi4-stream ke vid out
    • rgb2dvi
    • AXI VDMA x2
    • AXI GPIO x2
    • Penyihir Jam
    • Konstan
    • Sistem Pemrosesan Zynq
  3. Saat menambahkan Sistem Pemrosesan, klik "Jalankan Otomatisasi Blok" dari bilah berwarna hijau atas dan pastikan opsi "Terapkan Papan Preset" dipilih. Biarkan yang lainnya default.
  4. Gambar dari setiap jendela konfigurasi blok dapat ditemukan pada gambar di atas. Jika Anda tidak melihat gambar untuk jendela tertentu, biarkan saja sebagai default.
  5. Mulai Mengonfigurasi sistem Pemrosesan Zynq:

    • Dalam Konfigurasi PS-PL AXI Non Secure Aktifkan GP Master AXI, aktifkan Antarmuka M AXI GP0
    • Dalam Konfigurasi PS-PL HP Slave AXI Interface, aktifkan HP0 dan HP1
    • Dalam Konfigurasi MIO Pastikan ENET0 diaktifkan di bawah I/O Peripherals, lalu Application Processor Unit, aktifkan Timer0
    • Dalam Clock Configuration PL Fabric Clocks, aktifkan FCLK_CLK0 dan atur ke 100 MHz.
    • Klik Oke
  6. Sebelum mengklik "Jalankan Otomatisasi Koneksi", pastikan untuk menghubungkan blok video seperti yang terlihat pada gambar desain blok TX di atas. Anda ingin mengganti nama konstanta menjadi VDD dan mengatur nilainya menjadi 1. Hubungkan blok video yang sesuai.
  7. Jadikan jam HDMI TMDS dan pin data menjadi eksternal pada blok rgb2dvi dan dvi2rgb
  8. Buat port input dan output untuk hot plug detect signal (HPD) dan hubungkan bersama-sama, ini didefinisikan dalam file kendala
  9. Jam piksel dipulihkan dari TMDS_Clk_p, yang dibuat dalam file kendala. Ini akan menjadi 74,25 MHz sesuai dengan resolusi 720p. Penting untuk menghubungkan jam piksel (dari blok dvi2rgb) ke pin berikut:

    • vid_io_in_clk (vid ke blok aliran sumbu)
    • vid_io_out_clk (aliran sumbu ke blok vid out)
    • clk (Pengontrol Waktu)
    • PixelClk (rgb2dvi)
  10. ***Catatan: Saat ini, untuk mengaktifkan pemulihan jam piksel, konektor HDMI rx dan tx harus dicolokkan ke sumber/sink yang aktif. Salah satu cara untuk mengatasinya adalah dengan memisahkan blok video rx dan tx ke dalam domain jam yang berbeda (dengan kata lain, buat jam 74,25 MHz baru untuk dimasukkan ke blok tx).***
  11. Selanjutnya atur jam wizard sehingga Anda memiliki input 100 MHz (sumber buffer global) dan 3 jam output @ 50 MHz (jam AXI-Lite), 150 MHz (jam AXI4-Stream), 200 MHz (pin RefClk dvi2rgb).
  12. Hubungkan pin sistem pemrosesan FCLK_CLK0 ke input wizard jam
  13. Pada titik ini klik "Jalankan Otomatisasi Koneksi" dari bilah hijau di bagian atas jendela desain. Sebaiknya lakukan ini untuk satu blok pada satu waktu dan ikuti gambar desain blok TX di atas.
  14. Alat akan mencoba menambahkan AXI Interconnect, yang bertindak sebagai interkoneksi master/slave untuk blok yang menggunakan bus AXI-Lite (VDMA dan GPIO).
  15. Ini juga akan menambahkan AXI SmartConnect, yang bertindak sebagai interkoneksi master/slave untuk antarmuka prosesor AXI4-Stream dan High Performance yang digunakan oleh VDMA (Stream to Memory Map dan sebaliknya).
  16. Alat ini juga akan menambahkan Reset Sistem Prosesor. Pastikan ini hanya terhubung ke VDMA, GPIO, dan blok terkait prosesor. Jangan sambungkan ke blok video apa pun (mis. dvi2rgb, pengontrol waktu, vid ke streaming, dll.)
  17. Setelah otomatisasi koneksi selesai, verifikasi bahwa koneksi cocok dengan gambar desain blok TX. Anda akan melihat blok Sistem ILA tambahan yang belum disebutkan. Ini hanya untuk debugging dan tidak diperlukan untuk saat ini. Ini menggunakan Reset Prosesor 150M, jadi itu juga tidak diperlukan. Di mana pun Anda melihat "bug" hijau kecil di bus, itu karena ILA dan dapat diabaikan.
  18. Langkah terakhir adalah klik kanan pada desain blok di pohon sumber proyek dan pilih "Buat Pembungkus HDL." Jika Anda berencana menambahkan logika ke pembungkus, itu akan ditimpa setiap kali ini dipilih.
  19. Lihat bagian Pengaturan Driver VDMA untuk detail di sisi SDK.

Jam dan Reset

Saya telah menemukan bahwa aspek terpenting dari setiap proyek logika yang dapat diprogram adalah pertimbangan yang cermat terhadap domain jam dan sinyal reset. Jika itu dikonfigurasi dengan benar, Anda memiliki peluang bagus untuk membuat desain Anda berfungsi.

Jam Pixel dan Waktu Terkunci

Untuk memverifikasi bahwa sinyal tertentu aktif, adalah ide yang baik untuk mengikat sinyal ini ke LED (jam, reset, kunci dll). Dua sinyal yang menurut saya berguna untuk dilacak pada papan pemancar adalah jam piksel dan sinyal "terkunci" pada blok AXI4-Stream to video out, yang memberi tahu Anda bahwa pengaturan waktu video telah disinkronkan dengan pengontrol waktu dan sumber video. data. Saya telah menambahkan beberapa logika ke pembungkus blok desain yang melacak jam piksel menggunakan sinyal PixelClkLocked pada blok dvi2rgb sebagai reset. Saya telah melampirkan file sebagai hdmi_wrapper.v di sini. File kendala juga dilampirkan di sini.

Langkah 2: Konfigurasikan Logika yang Dapat Diprogram Zynq untuk Penerima

Konfigurasikan Logika yang Dapat Diprogram Zynq untuk Penerima
Konfigurasikan Logika yang Dapat Diprogram Zynq untuk Penerima
Konfigurasikan Logika yang Dapat Diprogram Zynq untuk Penerima
Konfigurasikan Logika yang Dapat Diprogram Zynq untuk Penerima
Konfigurasikan Logika yang Dapat Diprogram Zynq untuk Penerima
Konfigurasikan Logika yang Dapat Diprogram Zynq untuk Penerima

Blok Programmable Logic untuk receiver lebih sederhana. Perbedaan utama, selain blok input HDMI yang hilang adalah tidak adanya jam piksel yang dipulihkan. Untuk alasan itu kita harus membuat sendiri dari wizard jam. Desain ini harus dilakukan dalam proyek terpisah dari pemancar. Untuk tujuan kami, proyek penerima mengikuti papan Zybo 7Z-20 sementara Pemancar mengikuti papan Z7-10. FPGA di papan berbeda jadi … hati-hati.

Berikut adalah langkah-langkah untuk membuat Blok Desain Penerima:

  1. Tambahkan blok ip berikut ke desain Anda:

    • Pengontrol Waktu
    • AXI4-Streaming ke Video Out
    • RGB ke DVI
    • AXI VDMA
    • AXI GPIO
    • Sistem Pemrosesan
    • Penyihir Jam
    • Konstan (VDD disetel ke 1)
  2. Ikuti pola yang sama untuk mengonfigurasi blok ini sebagai Pemancar. Gambar untuk perbedaan penting dalam konfigurasi telah disertakan di sini. Yang lain tetap sama dengan Pemancar.
  3. Konfigurasikan VDMA untuk desain ini sebagai saluran baca saja. Nonaktifkan saluran tulis.
  4. Wizard jam harus dikonfigurasi untuk output berikut:

    • clk_out1: 75 MHz (jam piksel)
    • clk_out2: 150 MHz (jam streaming)
    • clk_out3: 50 MHz (jam axi-lite)
  5. Hubungkan blok video seperti yang ditunjukkan pada gambar desain blok RX.
  6. Kemudian jalankan otomatisasi koneksi, yang akan menambahkan blok AXI Interconnect, AXI SmartConnect dan System Reset dan mencoba membuat koneksi yang sesuai. Pergi perlahan di sini untuk memastikan itu tidak melakukan koneksi yang tidak diinginkan.
  7. Jadikan jam HDMI TMDS dan pin data eksternal pada blok rgb2dvi
  8. Tidak perlu sinyal colokan panas pada desain ini.

Langkah 3: Siapkan Driver VDMA

Siapkan Driver VDMA
Siapkan Driver VDMA

Penyetelan untuk blok berbeda yang dikonfigurasi melalui antarmuka AXI-Lite paling baik dilakukan dengan menggunakan proyek demo yang disertakan dengan BSP sebagai referensi. Setelah mengekspor perangkat keras desain dan meluncurkan SDK dari Vivado, Anda perlu menambahkan paket dukungan papan baru dan menyertakan pustaka lwip202 di jendela pengaturan BSP. Buka file file system.mss dari BSP dan Anda akan melihat driver periferal hadir dari desain blok Anda. Opsi "Impor Contoh" memungkinkan Anda mengimpor proyek demo yang menggunakan periferal ini dan dengan demikian menunjukkan kepada Anda cara mengonfigurasinya dalam perangkat lunak menggunakan driver Xilinx yang tersedia (lihat gambar terlampir).

Ini adalah metode yang digunakan untuk mengkonfigurasi VDMA, Timer & Interrupt, dan GPIO. Kode sumber untuk mengirim dan menerima telah disertakan di sini. Perbedaannya hampir secara eksklusif di main.c.

***CATATAN: Karena sistem tidak berfungsi penuh pada saat penulisan tutorial ini, kode sumber di bagian ini tidak menyertakan kode jaringan nirkabel. Beberapa bug perlu diatasi sebagai akibat dari penggabungan proyek transmisi/penerimaan inti video dengan proyek transmisi/penerimaan jaringan. Oleh karena itu tutorial ini memperlakukan mereka secara terpisah untuk saat ini.***

Fungsi Penangan Interupsi TX (IRQHandler)

Fungsi ini membaca kode abu-abu yang disediakan oleh VDMA baca dan tulis melalui blok GPIO. Kode abu-abu dikonversi ke desimal dan digunakan untuk memilih lokasi memori basis bingkai dari bingkai saat ini. Bingkai yang disalin adalah bingkai sebelumnya ke bingkai yang sedang ditulis oleh VDMA (misalnya jika VDMA menulis ke bingkai 2, kami menyalin bingkai 1; jika menulis ke bingkai 0, kami membungkus dan membaca dari bingkai 2).

Fungsi ini hanya menangkap setiap frame ke-6 untuk mengurangi kecepatan frame menjadi 10 Hz, bukan 60 Hz. Batas atas jaringan adalah 300 Mbps. Pada 10 frame per detik diperlukan bandwidth 221,2 Mbps.

Mengomentari/membatalkan komentar dua baris dalam fungsi ini akan memungkinkan pengguna untuk mengubah ke mode passthru HDMI untuk tujuan debugging/pengujian (kode dikomentari untuk menunjukkan baris yang sesuai). Saat ini menyalin frame ke lokasi memori yang digunakan oleh kode ethernet.

Fungsi Penangan Interupsi RX (IRQHandler)

Fungsi ini sangat mirip dengan fungsi TX, tetapi menyalin dari 2 buffer FIFO yang digunakan oleh ethernet untuk menulis data yang masuk. Kode ethernet menunjukkan frame mana yang sedang ditulis dari FIFO, data disalin dari frame yang berlawanan. Data disalin ke bingkai tepat di belakang bingkai yang sedang dibaca oleh VDMA untuk menghindari robek.

Langkah 4: Siapkan Jaringan Nanorouter

Siapkan Jaringan Nanorouter
Siapkan Jaringan Nanorouter

Untuk membuat jaringan menggunakan TPlink nanorouters, nyalakan masing-masing dan sambungkan ke SSID wifi default untuk perangkat. Info lebih lanjut tentang pengaturan konfigurasi untuk perangkat khusus ini dapat ditemukan melalui panduan pengguna perangkat.

Atur salah satu perangkat sebagai titik akses, ini akan bertindak sebagai koneksi utama untuk jaringan. Pastikan untuk memberi nama jaringan dan catat namanya, dan nonaktifkan DHCP (kami tidak ingin router mengonfigurasi alamat IP secara dinamis, kami ingin papan pengirim dan penerima Zybo mengatur sendiri alamat IP mereka sehingga konsisten). Setelah mengonfigurasi, pastikan perangkat melakukan boot ulang dan membuat jaringan ini.

Atur perangkat lain sebagai klien, dan pastikan perangkat terhubung ke SSID jaringan yang Anda atur dengan nanorouter pertama. Sekali lagi, pastikan DHCP dinonaktifkan untuk klien.

Setelah klien selesai dan di-boot ulang, klien harus terhubung ke nanorouter titik akses (jika tidak, kemungkinan ada masalah dalam konfigurasi salah satu perangkat Anda). Anda akan melihat bahwa lampu LED pada klien akan menyala setelah terhubung ke titik akses.

LED nanorouter titik akses kemungkinan akan terus berkedip pada titik ini, tidak apa-apa! Lampu berkedip berarti tidak terhubung ke perangkat lain dari port ethernetnya, dan setelah terhubung ke Zybo yang dikonfigurasi, LED akan tetap menyala menandakan koneksi jaringan berhasil.

Sekarang setelah kami memiliki pengaturan nanorouter, kami memiliki jaringan nirkabel yang memungkinkan kami untuk berkomunikasi melaluinya. Catatan penting adalah bahwa metode konfigurasi kami untuk nanorouter (sebagai titik akses dan klien) memungkinkan kami untuk berkomunikasi dari papan Zybo pengirim ke papan Zybo penerima seolah-olah keduanya terhubung dengan satu kabel ethernet. Hal ini membuat pengaturan jaringan kami menjadi lebih mudah, karena alternatifnya kemungkinan akan menggabungkan konfigurasi papan Zybo untuk terhubung ke server secara eksplisit bersama dengan koneksi yang dimaksud.

Setelah kedua perangkat diatur, nanorouter dikonfigurasi dan siap diimplementasikan ke jaringan WIDI Anda. Tidak ada pasangan khusus antara nanorouter dan papan Zybo, karena titik akses atau klien akan bekerja baik untuk perangkat pengirim atau penerima.

Langkah 5: Siapkan Sistem Pemrosesan Zynq untuk Transmisi Data Melalui Ethernet

Atur Sistem Pemrosesan Zynq untuk Transmisi Data Melalui Ethernet
Atur Sistem Pemrosesan Zynq untuk Transmisi Data Melalui Ethernet
Atur Sistem Pemrosesan Zynq untuk Transmisi Data Melalui Ethernet
Atur Sistem Pemrosesan Zynq untuk Transmisi Data Melalui Ethernet

Untuk mengirimkan data HDMI dari satu papan Zybo ke papan lainnya, kita harus memasukkan protokol Ethernet dengan driver VDMA kita. Tujuan kami di sini adalah untuk mengalirkan frame video individu melalui periferal Ethernet dalam sistem pemrosesan, pada kecepatan yang ditetapkan yang konsisten dengan bandwidth jaringan kami. Untuk proyek kami, kami menggunakan TCP yang disediakan oleh API LwIP bare-metal. Karena kedua anggota proyek relatif tidak berpengalaman dengan utilitas jaringan, pilihan ini dibuat tanpa sepenuhnya mengakui implikasi dan kendala yang terlibat dengan TCP. Masalah utama dengan implementasi ini adalah bandwidth yang terbatas dan fakta bahwa itu benar-benar tidak dirancang untuk tujuan mengukus volume data yang tinggi. Solusi alternatif untuk menggantikan TCP dan meningkatkan tbe dalam proyek ini akan dibahas nanti.

Deskripsi singkat tentang TCP dengan LwIP: Data dikirim melalui jaringan dalam paket berukuran tcp_mss (ukuran segmen maksimum TCP), yang umumnya 1460 byte. Memanggil tcp_write akan mengambil beberapa data yang direferensikan oleh pointer dan mengkonfigurasi pbufs (paket buffer) untuk menyimpan data dan menyediakan struktur untuk operasi TCP. Jumlah maksimum data yang dapat diantrekan pada satu waktu ditetapkan sebagai tcp_snd_buf (ruang buffer pengirim TCP). Karena parameter ini adalah angka 16 bit, kami dibatasi pada ukuran buffer pengiriman 59695 byte (ada beberapa padding yang diperlukan dalam buffer pengiriman). Setelah data dalam antrian, tcp_output dipanggil untuk mulai mentransmisikan data. Sebelum mengirim segmen data berikutnya, sangat penting bahwa semua paket sebelumnya telah berhasil ditransmisikan. Proses ini dilakukan dengan menggunakan fungsi recv_callback, karena ini adalah fungsi yang dipanggil ketika pengakuan dilihat dari penerima.

Memanfaatkan contoh proyek di Vivado SDK sangat membantu untuk mempelajari cara kerja LwIP TCP, dan merupakan titik awal yang baik untuk memulai proyek baru.

Prosedur perangkat pemancar WiDi adalah sebagai berikut:

  1. Inisialisasi jaringan TCP menggunakan panggilan fungsi driver LWIP bare-metal.
  2. Tentukan fungsi panggilan balik yang diperlukan untuk operasi jaringan.
  3. Hubungkan ke penerima WiDi dengan menghubungkan ke alamat IP dan portnya (konfigurasi kami: IP Penerima adalah 192.168.0.9, sambungkan ke port 7).
  4. Ketika timer driver VDMA berakhir, masukkan TX ISR.
  5. Tentukan buffer bingkai saat ini untuk diakses berdasarkan kode abu-abu VDMA
  6. Antrian segmen data pertama dalam buffer pengiriman TCP
  7. Keluarkan data, dan perbarui variabel lokal untuk melacak berapa banyak data yang telah dikirim dari frame saat ini.
  8. Setelah mencapai panggilan balik yang diterima (panggilan fungsi dilakukan setelah pemancar mendapat pengakuan pengambilan data), antrekan segmen data berikutnya.
  9. Ulangi langkah 7 & 8 hingga seluruh frame terkirim.
  10. Kembali ke keadaan idle untuk menunggu interupsi timer berikutnya untuk menunjukkan bahwa frame baru telah siap (Kembali ke langkah 4).

Pastikan untuk mengatur pengaturan paket dukungan papan LwIP seperti yang ditunjukkan pada gambar di atas. Semua nilai adalah default kecuali untuk tcp_snd_buf, tcp_pueue_ooseq, mem_size, memp_n_tcp_seg. Perhatikan juga bahwa debug mendetail dapat dicapai dengan mengubah parameter BSP untuk grup debug_options.

Langkah 6: Siapkan Sistem Pemrosesan Zynq untuk Penerimaan Data Melalui Ethernet

Papan pengembangan Zybo yang akan bertindak sebagai penerima nirkabel akan beroperasi serupa dengan perangkat transmisi. Pengaturan paket dukungan papan untuk LwIP akan sama dengan yang ada di langkah sebelumnya.

Perangkat akan mengambil paket yang berisi segmen frame video dari nanorouter, dan akan menyalin data frame video ke dalam ruang buffer triple frame untuk VDMA penerima. Untuk menghindari penimpaan data apa pun, buffer data ganda (kita akan menyebutnya sebagai buffer jaringan) digunakan saat mengumpulkan data dari nanorouter, sehingga lalu lintas jaringan dapat melanjutkan streaming saat bingkai video penuh sebelumnya sedang disalin ke dalam penyangga VDMA.

Prosedur untuk perangkat penerima WiDi memerlukan dua tugas, salah satunya menerima data ethernet, dan yang lainnya menyalin frame video dari buffer jaringan ke buffer triple frame VDMA.

Tugas penerimaan Ethernet:

  1. Inisialisasi jaringan TCP menggunakan panggilan fungsi driver LWIP bare-metal (pengaturan dengan alamat IP yang akan dihubungkan oleh pemancar, 192.168.0.9 di milik kita)
  2. Tentukan fungsi panggilan balik yang diperlukan untuk operasi jaringan.
  3. Setelah menerima paket ethernet, salin paket data ke buffer jaringan saat ini, tingkatkan akumulasi data saat ini.
  4. Jika paket memenuhi buffer frame jaringan, lanjutkan ke langkah 5 & 6. Jika tidak, ulangi kembali ke langkah 3 untuk tugas ini.
  5. memberi sinyal bahwa tugas buffer tiga bingkai VDMA harus disalin dari buffer jaringan yang baru selesai.
  6. Beralih ke buffer jaringan lain dan lanjutkan pengumpulan data melalui ethernet.
  7. Diam sampai paket ethernet baru diterima (langkah 3).

Salin buffer jaringan ke buffer tiga bingkai VDMA:

  1. Ketika timer driver VDMA berakhir, masukkan RX ISR.
  2. Tentukan buffer bingkai saat ini untuk diakses berdasarkan kode abu-abu VDMA.
  3. Tentukan buffer jaringan mana yang akan disalin ke buffer VDMA, dan salin data itu

Langkah 7: Hubungkan Papan Zybo Anda ke Sumber HDMI dan Sink HDMI

Hubungkan Papan Zybo Anda ke Sumber HDMI dan Sink HDMI
Hubungkan Papan Zybo Anda ke Sumber HDMI dan Sink HDMI

Sekarang sambungkan kabel HDMI untuk penerima dan pemancar, program FPGA dan jalankan sistem pemrosesan. Frame rate kemungkinan akan sangat lambat, karena overhead yang sangat besar dalam operasi LwIP dan bandwidth yang terbatas. Jika ada masalah, sambungkan melalui UART dan coba identifikasi peringatan atau kesalahan apa pun.

Langkah 8: Ide Alternatif untuk Peningkatan

Ide Alternatif untuk Peningkatan
Ide Alternatif untuk Peningkatan

Masalah besar untuk proyek ini adalah jumlah data yang diperlukan untuk mengirim melalui wifi. Ini diharapkan, namun kami meremehkan dampaknya dan menghasilkan lebih banyak gambar di layar daripada umpan video. Ada beberapa cara untuk meningkatkan proyek ini:

  • Kompresi video waktu nyata. Mengompresi video feed frame demi frame akan sangat mengurangi jumlah data yang diperlukan untuk dikirim melalui jaringan. Idealnya ini akan dilakukan di perangkat keras (yang bukan tugas yang mudah), atau bisa dilakukan dalam perangkat lunak dengan menggunakan inti ARM lain untuk menjalankan algoritma kompresi (ini akan memerlukan beberapa analisis lebih lanjut untuk memastikan waktunya berhasil). Ada beberapa komponen kompresi video waktu nyata open source yang kami temukan di web, tetapi sebagian besar adalah IP.
  • Menerapkan aliran Ethernet di perangkat keras, bukan perangkat lunak. Ada satu ton overhead karena kurangnya ruang yang tersedia untuk mengantri data keluar di pemancar, karena keterbatasan ukuran segmen. Proses yang jauh lebih efisien adalah dengan menggunakan AXI Ethernet IP dengan buffer FIFO atau DMA untuk memasukkan data ke dalamnya. Ini akan mengurangi bagasi ekstra dari LwIP TCP dan memungkinkan lebih banyak aliran data.

Langkah 9: Aksesibilitas

Produk yang dihasilkan dari proyek WiDi ini harus berupa sepasang perangkat yang terintegrasi penuh dan ringkas yang dapat disambungkan pengguna ke sumber HDMI apa pun dan kemudian menenggelamkan umpan video ke layar dengan kemampuan HDMI secara nirkabel. Perangkat akan menampilkan Zynq-7000 SoC yang ditemukan di papan referensi Zybo dan menggabungkan perangkat keras jaringan yang ditemukan di router nano TP-Link. Idealnya, pengguna akan dapat mengontrol modul transmisi dari lokasi terpisah dalam sistem operasi target, dengan sedikit kebutuhan akan kemampuan teknis yang signifikan.

Keamanan dan Konektivitas

Perangkat juga harus menyertakan Transport Layer Security (TLS) dan memiliki kemampuan koneksi otomatis terbatas, keduanya untuk tujuan privasi. Ini adalah niat dari para desainer untuk membuat koneksi dengan tampilan melalui antarmuka nirkabel tindakan yang disengaja atas nama pengguna untuk menghindari kesalahan penyiaran materi sensitif.

Status saat ini

Sampai saat ini, keadaan proyek masih sangat banyak pekerjaan yang sedang berjalan. Agar pengguna titik akhir saat ini mendapat manfaat dari tutorial ini, dia harus memiliki pemahaman teknis yang kuat tentang desain sistem tertanam dan harus memiliki beberapa keakraban dengan perangkat keras yang dapat diprogram dan perangkat lunak tertanam yang bekerja bersama.

Data yang dikirim melalui jaringan tidak dienkripsi pada saat ini dan dianggap sebagai transmisi mentah paket TCP/IP.

Proyek inti video berhasil diuji untuk mengirim dan menerima. Di sisi lain, koneksi nirkabel antara dua papan zybo dibuat dan data frame uji berhasil dikirim. Namun, masih diperlukan untuk menggabungkan kode jaringan ke setiap proyek inti video dan menguji transmisi bingkai video yang sebenarnya.

Direkomendasikan: