Saat ini saya sedang mengerjakan Super OSD - proyek tampilan layar. http://code.google.com/p/super-osd memiliki semua detail.
Saat ini saya menggunakan MCU dsPIC untuk melakukan pekerjaan. Ini adalah DSP yang sangat kuat (40 MIPS @ 80 MHz, operasi tiga siklus register tunggal dan unit MAC) dan, yang penting, ia datang dalam paket DIP (karena saya menggunakan papan tempat memotong roti untuk prototipe itu.) Saya benar-benar mendapatkan setiap bit terakhir dari kinerja menjalankan OSD - chip memiliki sekitar 200ns atau 10 siklus per piksel pada tahap output sehingga kode harus sangat dioptimalkan di bagian ini (untuk alasan ini akan selalu ditulis dalam majelis.)
Sekarang saya sedang mempertimbangkan untuk menggunakan FPGA untuk ini karena karena arsitektur paralel dari chip seperti itu dimungkinkan untuk memiliki program logika sederhana yang menjalankan OSD. Hal-hal seperti menggambar garis dan kode algoritmik akan ditangani oleh MCU, tetapi output aktual akan dilakukan dengan FPGA. Dan beberapa hal sederhana seperti mengatur piksel atau menggambar garis horizontal dan vertikal yang ingin saya integrasikan ke FPGA, untuk meningkatkan kecepatan.
Saya punya beberapa pertanyaan:
- Akankah harganya jauh lebih mahal? FPGA termurah yang saya temukan adalah ~ £ 5 masing-masing dan dsPIC adalah £ 3 masing-masing. Jadi biayanya lebih mahal, tapi berapa harganya?
- DsPIC cocok dalam paket SO28. Saya tidak ingin menjadi lebih besar dari SO28 atau TQFP44. Sebagian besar FPGA yang saya lihat datang dalam BGA atau TQFP> 100 paket, yang bukan merupakan pilihan saat ini, karena ukuran geser, dan kesulitan menyoldernya sendiri.
- Berapa banyak arus yang digunakan oleh FPGA? Solusi dsPIC saat ini mengkonsumsi sekitar 55mA +/- 10mA, yang oke saat ini. Apakah FPGA akan mengkonsumsi lebih atau kurang? Apakah variabel, atau cukup statis, seperti dsPIC?
- Saya memerlukan setidaknya 12KB memori grafis untuk menyimpan grafik OSD. Apakah FPGA's memiliki jenis memori yang tersedia pada chip atau ini hanya tersedia dengan chip eksternal?
sumber
Kecenderungan saya adalah menggunakan sesuatu untuk menyangga waktu antara prosesor dan layar. Memiliki perangkat keras yang dapat menampilkan seluruh bingkai video tanpa campur tangan prosesor mungkin bagus, tetapi mungkin berlebihan. Saya akan menyarankan bahwa kompromi terbaik antara kompleksitas perangkat keras dan perangkat lunak mungkin akan membuat sesuatu dengan dua atau tiga register shift 1024-bit independen (dua bit per piksel, untuk memungkinkan hitam, putih, abu-abu, atau transparan), dan sarana beralih di antara mereka. Mintalah PIC memuat register geser, dan kemudian minta perangkat keras mulai memindahkan yang keluar saat ia menetapkan sebuah bendera sehingga PIC dapat memuat yang berikutnya. Dengan dua register geser, PIC akan memiliki 64us antara waktu itu dikatakan register geser tersedia dan waktu semua data harus digeser. Dengan tiga register shift,
Perhatikan bahwa sementara FIFO 1024-bit akan sama baiknya dengan dua register shift 1024-bit, dan dalam CPLD, sebuah FIFO hanya berharga satu macrocell per bit, ditambah beberapa logika kontrol, di sebagian besar jenis logika lainnya, dua bit register geser akan lebih murah daripada sedikit FIFO.
Pendekatan alternatif akan menghubungkan CPLD ke SRAM, dan membuat subsistem video sederhana dengan itu. Secara estetika, saya suka generasi video on-the-fly, dan jika seseorang membuat chip register-1024-bit yang bagus dan murah itu pendekatan yang saya sukai, tetapi menggunakan SRAM eksternal mungkin lebih murah daripada menggunakan FPGA dengan sumber daya yang cukup untuk membuat beberapa register shift 1024-bit. Untuk resolusi output Anda, Anda perlu mengeluarkan data pada 12M piksel / detik, atau 3MBytes / detik. Seharusnya memungkinkan untuk mengatur hal-hal yang memungkinkan data untuk clock pada kecepatan hingga 10mbps tanpa terlalu banyak kesulitan dengan interleaving siklus memori; Trik terbesar adalah mencegah korupsi data jika pulsa sinkronisasi tidak datang pada saat yang tepat yang diharapkan.
sumber