Beberapa latar belakang cepat:
Ambilight adalah sistem pada beberapa TV Philips yang menganalisis informasi warna pada layar dan kemudian menetapkan beberapa LED di bagian belakang layar untuk memproyeksikan warna layar ke dinding. Ini adalah efek yang sangat bagus. Ada klon dari sistem ini di luar sana sekarang yang menggunakan PC untuk memproses video dan mengontrol LED. Saya menemukan ini sedikit berlebihan - menggunakan seluruh mesin untuk menari beberapa LED ...
Saya ingin memodifikasi NeTV kelinci untuk memproses yang tidak terenkripsiUmpan video HDMI dan kendalikan beberapa LED. Saya tahu NeTV telah dirancang untuk tujuan lain, tetapi saya merasa itu dapat dimodifikasi untuk mencapai tujuan saya. Saya tidak peduli dengan subsistem Linux yang mendasarinya, spoofing I2C, overlay video, dll. Pada titik ini, saya tidak peduli dengan bekerja dengan aliran terenkripsi HDCP.
Diagram Blok FPGA
Ini adalah diagram blok dari salah satu slide presentasi kelinci.
The sisa set slide di sini .
Slide ini tampaknya menyiratkan bahwa piksel video sebenarnya didekodekan (tidak harus didekripsi ) .
Akhirnya ... beberapa pemikiran dan pertanyaan saya:
Apakah ini dapat dilakukan pada perangkat keras yang saya inginkan? Jika "ya", lanjutkan! Jika "tidak", katakan padaku apa lagi yang aku butuhkan!
Apakah saya dapat memproses informasi video tanpa memori eksternal? Tidak ada memori yang dapat diakses FPGA secara langsung, sejauh yang saya tahu. Ini mungkin tergantung pada algoritma apa yang saya gunakan untuk memproses data video - untuk menggunakan RAM FPGA Block sesedikit mungkin, saya kira saya ingin menggunakan semacam 'penjumlahan berulang' dari piksel yang masuk, daripada menyimpan keseluruhan bingkai data gambar dan kemudian rata-rata warnanya. Adakah petunjuk terkait penerapan algoritma ini? Bagaimana memulainya dengan ini adalah rintangan terbesar saya.
Saya telah menyelidiki kode sumber tentang di mana saya harus 'memanfaatkan' data video.
Ini terlihat seperti tempat yang tepat:
Saya tahu, gambar ini panjang - itu yang terbaik yang bisa saya lakukan sambil membuatnya jelas untuk dibaca. Salahkan alat Xilinx untuk itu!
Ini tampaknya mengambil data TMDS dan output 8-bit untuk setiap warna.Saya harus memiliki semacam mesin negara untuk driver LED - setiap siklus jam, ia mendapat info pixel dari modul apa pun yang saya buat untuk memproses data video.
Maaf jika ini bertele-tele atau panjang - saya mencoba untuk lebih teliti ... Saya hanya butuh bantuan untuk menyelesaikan masalah ini. Ini adalah upaya pertama saya di proyek FPGA - beberapa mungkin mengatakan itu terlalu sulit untuk pemula tapi saya katakan ... harus mulai di suatu tempat :) Terima kasih telah membaca.
Jawaban:
Saya mendasarkan jawaban saya sepenuhnya pada kode dan dokumentasi modul dvi_decoder , dan menganggapnya benar-benar berfungsi seperti yang diiklankan. File ini tampaknya merupakan salinan (dimodifikasi?) Dari IP dalam catatan aplikasi Konektivitas Video Menggunakan TMDS I / O di Spartan-3A FPGA dan / atau Menerapkan Antarmuka Video TMDS di Spartan-6 FPGA . Catatan aplikasi ini penuh dengan detail penting, dan saya sarankan Anda membacanya dengan cermat.
Seperti yang Anda tunjukkan dalam pertanyaan, saya akan menganggap Anda memperlakukan aliran yang tidak terenkripsi, yaitu aliran non-HDCP. Saya cukup yakin bahwa informasi dalam proyek NeTV dapat diadaptasi untuk mendekripsi HDCP, tetapi itu akan melibatkan sejumlah pekerjaan tambahan yang tidak sepele dan dengan alasan hukum yang dipertanyakan tergantung pada yurisdiksi Anda.
Sepertinya Anda akan dapat memperoleh data yang Anda butuhkan dari output blok dvi_decoder. Blok menghasilkan informasi warna 24-bit menggunakan kabel
red
,green
danblue
, disinkronkan ke jam pikselpclk
. Outputhsync
danvsync
memperingatkan pengguna ke ujung garis / layar masing-masing. Secara umum, Anda harus dapat melakukannya dengan rata-rata menggunakan output ini.Anda akan memerlukan logika dasar untuk menerjemahkan
hsync
,vsync
dan jam piksel menjadi lokasi (X, Y). Hanya instantiate dua counter, satu untukX
dan satu untukY
. KenaikanX
setiap jam piksel. Setel ulangX
menjadi nol padahsync
. KenaikanY
pada setiaphsync
. Atur ulangY
ke nol di setiapvsync
.Menggunakan
red
,green
,blue
,X
danY
, Anda dapat melakukan pada rata-rata fly. Dengan membandingkan denganX
danY
, Anda dapat menentukan kotak apa yang masing-masing piksel harus berkontribusi, jika ada. Jumlahkan nilai warna ke dalam register akumulasi. Untuk mendapatkan nilai rata-rata, Anda perlu membagi nilai dalam register dengan jumlah piksel. Jika Anda cerdas, Anda akan memastikan jumlah piksel adalah kekuatan dua. Kemudian Anda bisa mengirimkan MSB register ke apa pun yang ingin Anda kendarai.Karena kami ingin menggerakkan display saat melakukan akumulasi, kami perlu melakukan buffering ganda. Jadi kita akan membutuhkan dua register per kotak per komponen. Jika Anda menggunakan string 25-led, ini berarti Anda akan membutuhkan 25 * 3 * 2 = 150 register. Itu agak sedikit, jadi Anda mungkin ingin menggunakan ram blok alih-alih register. Itu semua tergantung pada kebutuhan Anda, percobaan!
Saya berasumsi Anda akan mengendarai string yang dipimpin seperti yang digunakan dalam kit proyek AdWords asli . Anda harus bisa mengetahui cara mengusirnya dari nilai-nilai di register dengan cukup mudah menggunakan SPI.
Modul dvi_decoder adalah perangkat kit yang cukup kompleks. Saya sarankan Anda mempelajari catatan aplikasi secara rinci.
Selain itu, jika Anda belum membeli NeTV untuk digunakan dalam proyek ini, saya sarankan Anda juga melihat papan Atlys Digilent . Dengan dua input HDMI dan dua output HDMI, tampaknya dibuat khusus untuk proyek semacam ini.
sumber