Mengapa FPGA sering digunakan untuk proyek video HDMI?


24

Jika Anda melihat melalui proyek-proyek HDMI di situs seperti hackaday , Anda akan menemukan bahwa hampir semuanya melibatkan FPGA. Saya rasa saya belum pernah melihat proyek DIY dengan output HDMI yang belum menggunakan FPGA.

Tapi kenapa? Sejauh yang saya tahu, FPGA mahal, sekitar $ 70- $ 100. Bandingkan dengan Raspberry Pi seharga $ 35, yang dapat melakukan hal-hal yang jauh lebih rumit, dan menghasilkan HDMI. Mengapa ARM tidak digunakan? Atau mikrokontroler yang lebih murah?

Dalam hal memutakhirkan video pada sistem game lama, logikanya seharusnya tidak lebih rumit yang bisa ditangani oleh mikrokontroler yang murah , tetapi saya tetap melihat HDMI sebagai rintangan yang tidak mungkin hanya ditangani oleh FPGA.


Anda dapat menemukan G PUS murah juga (seperti pada RPi). Tangkapannya adalah mereka tidak akan melakukan hal-hal yang melanggar lisensi HDMI atau ilegal di beberapa negara (DMCA). Apa yang sebagian besar proyek yang Anda tautkan lakukan. Anda dapat membeli GPU inti IP dan memodifikasinya untuk melakukan hal-hal seperti itu ... Tetapi siapa yang akan melakukannya untuk Anda? FPGA adalah orang miskin (atau bajak laut) hebat.
Fizz

Jawaban:


66

Pada dasarnya, tidak ada mikrokontroler, bahkan pi raspberry, cukup cepat. Raspberry pi memiliki GPU onboard yang menghasilkan output HDMI. Dan selain itu, kemampuan I / O raspberry pi sangat terbatas - antarmuka bandwidth tertinggi selain dari HDMI adalah USB. Banyak proyek konversi HDMI melibatkan pengambilan aliran video lain dalam format aneh dan mengolahnya menjadi sesuatu yang dapat dikirim ke HDTV standar melalui HDMI. Ini memerlukan beberapa logika penghubung khusus untuk membaca dalam sinyal video, logika pemrosesan sinyal untuk memformat ulangnya, logika penyandian HDMI TMDS, dan kemudian serializers kecepatan tinggi untuk benar-benar menggerakkan port HDMI.

Bekerja dengan streaming, video terkompresi, definisi tinggi membutuhkan pemrosesan sejumlah besar data, sesuatu yang tidak layak pada CPU tujuan umum. Sinyal video 1080p pada 30 frame per detik memiliki sekitar 62 juta piksel per detik. Pi raspberry beroperasi pada 700 MHz, jadi Anda memiliki, oh, 11 instruksi per piksel. Dan itu 11 instruksi untuk membaca dalam format video aneh secara real time, skala ulang, dll, dll. Tidak mungkin. Periode.

Pada FPGA, dimungkinkan untuk menghasilkan pipa pemrosesan panjang yang dapat memproses satu atau lebih piksel per siklus clock dan melakukannya dengan cara yang sangat deterministik (tidak ada interupsi atau pengalihan tugas!) Sehingga data piksel siap untuk dikirim melalui HDMI tepat pada waktu yang tepat. Jika Anda telah bekerja secara luas dengan CPU serba guna yang menjalankan segala jenis sistem operasi, Anda akan tahu bahwa mendapatkan ketepatan waktu pada tingkat milidetik lebih atau kurang bisa dilakukan, tetapi pada tingkat mikrodetik cukup banyak yang mustahil. Untuk HDMI, Anda membutuhkan ketelitian skala nanosecond. Tidak dapat dilakukan pada CPU tujuan umum. Juga, lihat proyek audio / video HDMI untuk neo geo. Yang ini tidak hanya harus mengubah ukuran video, tetapi juga harus mengubah ukuran audio dan memasukkannya ke dalam aliran video HDMI.

Dan ini masih belum mempertimbangkan logika khusus yang diperlukan untuk membaca dalam format data input apa pun yang Anda miliki. Anda akan memerlukan perangkat keras khusus untuk menafsirkan ini. Perangkat lunak tidak cukup cepat atau cukup deterministik. Anda mungkin dapat, misalnya, memformat ulangnya menjadi semacam aliran berbasis USB, tetapi ini tetap memerlukan logika digital khusus, jadi Anda mungkin juga cukup output HDMI secara langsung.

Untuk mengimplementasikan semua ini, logika digital adalah satu-satunya solusi yang layak. Dan jika Anda melakukan logika digital, FPGA adalah satu-satunya solusi yang layak, karena terlalu cepat dan terlalu kompleks untuk 7400 logika diskrit dan ASIC, yah, beberapa urutan besarnya lebih mahal.

Komponen lain yang diperlukan adalah serialis kecepatan tinggi yang sebenarnya dan driver diferensial untuk menghasilkan aliran data serial paralel yang dikirim turun kabel. Tidak mungkin untuk melakukan bit-bang data serial dengan urutan gigabit per detik dari CPU tujuan umum, ini membutuhkan perangkat keras khusus. Raspberry pi memiliki GPU onboard yang melakukan ini, tetapi terbatas dalam hal apa yang mampu GPU, belum lagi apa yang didokumentasikan. Sebagian besar FPGA mengandung setidaknya driver diferensial yang diperlukan dan sandal jepit DDR yang cukup untuk mendukung video resolusi rendah dan ada beberapa FPGA yang juga mengandung serializer yang diperlukan (yaitu blok Xilinx OSERDES) untuk menghasilkan aliran HD penuh. Jangan lupa bahwa aliran serial bukan 'baseband' seperti port serial normal di mana data aktual dikirim secara verbatim dengan beberapa informasi pembingkaian, tetapi data tersebut benar-benar dikodekan dengan TMDS (transisi-diminimalkan diferensial sinyal) untuk memberikan sinyal karakteristik listrik tertentu. Sedikit logika diperlukan untuk mengimplementasikan ini di samping serializers kecepatan tinggi yang sebenarnya. Semua ini relatif sederhana untuk dilakukan dalam logika digital murni (baik, pengkodean pula - serialzers bisa dibilang analog, atau setidaknya sinyal campuran) pada ASIC atau FPGA.

Ini sebenarnya adalah bagian yang sangat penting dari keseluruhan proses desain sistem digital / tertanam untuk mengetahui bagian mana dari sistem yang dapat diimplementasikan dalam perangkat lunak dan mana yang memerlukan perangkat keras, baik dalam bentuk chip khusus yang tidak tersedia, FPGA, custom ASIC, IP keras atau lunak (HDL, netlist, GDSII), dll. Dalam hal ini jelas: pembuatan sinyal video memerlukan perangkat keras khusus, baik itu GPU yang dipasangkan dengan CPU tujuan umum, FPGA dengan hard integral atau inti CPU lunak atau dipasangkan dengan CPU eksternal, atau sesuatu yang lebih khusus.

Sunting: Saya baru menyadari bahwa situs fpga4fun dan proyek video neo geo keduanya berjalan pada 640x480 alih-alih full HD. Namun, ini tidak benar-benar membuat ini sementara operasi lebih sederhana. Clock pixel minimum adalah 25 MHz, dengan clock bit 250 MHz. Ini berarti bahwa FPGA sebenarnya tidak memerlukan serializers untuk mengirimkan HDMI, hanya sandal jepit DDR. Ini masih tidak mengurangi masalah membaca data video. Jika Anda ingin melakukan itu pada raspberry pi tanpa bantuan perangkat keras, Anda harus membaca dari GPIO secara terus-menerus pada 25 MHz. Yang satu dibaca setiap 175 instruksi. Memasuki bidang kemungkinan, tetapi satu-satunya cara Anda membuat pekerjaan itu adalah pada bare metal (tidak ada Linux) dengan perakitan kode tangan.


2
Sekarang saya menyebutkan 7400 logika ... Saya ingin tahu apakah mungkin untuk menghasilkan sinyal HDMI dengan logika diskrit. Situs fpga4fun memiliki contoh video 640x480 dengan jam HDMI 25 MHz untuk bit rate 250 Mbit / detik atau DDR 125 MHz. Itu tidak terlalu tinggi sehingga bisa dilakukan dengan chip logika diskrit. Bisa jadi proyek yang menarik untuk seseorang.
alex.forencich

11 instruksi per piksel - bagaimana Anda menghitung angka itu? Apakah Anda mengasumsikan satu instruksi per clock tick?
gronostaj

700 MHz / 62 Mpps = 11.3. Asumsi Ballpark 1 CPU per siklus clock untuk CPU single core.
alex.forencich

Dan asumsi lain yang saya kira tidak saya sebutkan adalah bahwa sinyal video input akan sedikit terbentur ke pin GPIO tanpa bantuan perangkat keras, jadi instruksi untuk itu harus disisipkan entah bagaimana dengan waktu yang tepat.
alex.forencich

15
TL; DR: Harus dilakukan di perangkat keras. Perangkat lunak terlalu lambat.
JS.
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.