Kapan FPGA dapat digunakan dan Microcontrollers / DSP tidak?

28

Saya harus memilih antara kursus tentang mikrokontroler maju dan kursus tentang FPGA lanjutan.

Saya telah memiliki kursus pengantar di kedua mata pelajaran, dan apa yang mengganggu saya sekarang adalah bahwa saya sudah cukup bagus dalam pengembangan firmware untuk mikrokontroler, dan saya gagal melihat produk / proyek apa yang dapat saya buat dengan FPGA dan tidak bisa dengan mikrokontroler / DSP.

Bisakah Anda membuat beberapa aplikasi / produk / proyek di mana mikrokontroler atau DSP tidak cukup, dan mengapa?

Kamera? Kamera berkecepatan tinggi? Pemrosesan gambar berkecepatan tinggi?

Jolle
sumber
4
Alasan utama cukup banyak 1. Reaksi deterministik 100%, 2. potensi besar untuk paralelisme. Namun, banyak desain memasukkan semacam-core CPU dalam FPGA, karena jauh lebih mudah untuk memprogram logika gila untuk prosesor, daripada untuk perangkat keras.
Dzarda
Perbedaan antara apa yang mungkin terjadi dengan masing-masing perangkat tidak terlalu jelas. Masing-masing memiliki kelebihan dan ada solusi untuk masalah di kedua sisi. Sudah mengambil kursus pengantar pada masing-masing, saya harap Anda mengerti ini, jadi saya bertanya-tanya apa yang Anda minta.
Phil Frost
Saya mencari aplikasi di mana mikrokontroler dalam banyak kasus tidak akan cukup, atau di mana FPGA akan menjadi pilihan yang jelas.
Jolle
4
Mana yang Anda temukan lebih mudah untuk dipahami, pada kursus pengantar Anda? Kemudian pilih yang maju pada yang lain, karena (mungkin) Anda akan dapat belajar yang lebih mudah sendiri.
woliveirajr
stackoverflow.com/questions/7458850/…
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

Jawaban:

21

Lihat juga FPGA vs Mikrokontroler

Pemrosesan gambar atau video berkecepatan tinggi adalah contoh yang baik. Atau memproses 'gambar' yang bukan gambar optik langsung, seperti radar atau sistem berbasis laser.

Hal utama yang perlu dipertimbangkan adalah persyaratan throughput dan latensi . Sebuah mikrokontroler dapat melayani interupsi (sangat kasar) sekali per mikrodetik. Ini hanya dapat melayani satu interupsi sekaligus. Jika Anda perlu memprosesnya dengan cara yang rumit, itu membatasi berapa banyak Anda dapat melayani dalam waktu tertentu.

Dengan FPGA, biasanya Anda dapat menanggapi suatu peristiwa masukan segera (baik, pada siklus clock berikutnya). Anda dapat memiliki banyak unit pemrosesan secara paralel. Jika Anda tahu bahwa filter Anda membutuhkan 20 siklus, itu sepenuhnya independen dari apa pun yang terjadi.

Komputasi intensif integer sangat paralel bekerja paling baik pada FPGA, terutama jika ada dependensi data yang kompleks. Namun, mereka tidak memiliki banyak memori onboard; Anda dapat menambahkan beberapa DRAM ke samping tetapi dengan biaya latensi.

Anda mungkin juga menginginkannya untuk periferal, atau berbicara beberapa bus digital berkecepatan tinggi. Anda tidak dapat menggigit HDMI ke dalam atau ke luar mikrokontroler. Anda tidak dapat membuat kartu PCI di sekitar kartu PCI.

pjc50
sumber
16

Yah, saya melakukan pemrosesan video HD secara real-time dalam FPGA. Beberapa yang saya lakukan dapat dilakukan dalam chip GPU, tetapi tidak pada mikrokontroler atau DSP. FPGA lebih fleksibel.

Banyak sistem menggabungkan FPGA dan MCU / DSP untuk mendapatkan yang terbaik dari kedua dunia. Satu proyek yang sedang saya kerjakan segera melibatkan pengenalan objek dalam aliran video. Langkah-langkah pendahuluan (penghilangan derau, normalisasi, deteksi tepi, dll.) Paling baik dilakukan dalam FPGA, tetapi logika tingkat tinggi yang memutuskan fitur tingkat rendah mana yang merupakan bagian dari objek yang dikenali sebaiknya dilakukan pada CPU (baik di dalam atau di luar FPGA).

Pada akhirnya, Anda akan ingin menjadi fasih di kedua bidang, jadi itu benar-benar hanya pertanyaan yang mana Anda lakukan terlebih dahulu.

Dave Tweed
sumber
14

Singkatnya, FPGA bagus di mana Anda perlu melakukan sedikit pemrosesan pada banyak data, dan CPU bagus di mana Anda perlu melakukan banyak pemrosesan pada sedikit data.

Aliran video HDMI adalah banyak data. Ini dapat dilakukan oleh CPU, GPU, atau ASIC dalam kasing video umum, tetapi jika Anda perlu melakukan sedikit kerja padanya (tambahkan overlay, misalnya) Anda mungkin memilih FPGA.

Aliran audio tidak banyak data, tetapi jika Anda perlu melakukan pengenalan suara, Anda akan lebih memilih CPU daripada FPGA.

Meskipun Anda dapat melakukan radio yang ditentukan perangkat lunak dalam CPU, Anda dapat menangani bagian spektrum yang jauh lebih besar dengan FPGA lebih mudah daripada di CPU.

Meskipun Anda dapat membuat pengontrol keyboard dari FPGA, mikrokontroler akan lebih murah, mengonsumsi daya lebih sedikit, dan lebih mudah untuk mengembangkan perangkat lunak keyboard canggih (makro, fungsi game, memetakan ulang) daripada FPGA.

Tentu saja Anda dapat melakukan apa saja di salah satu dari mereka, dengan pengorbanan, tetapi jika Anda mahir dalam keduanya maka Anda akan dapat menimbang pengorbanan lebih kompeten, dan akan menghindari biaya bagian yang lebih tinggi atau waktu pengembangan Anda akan harus memilih solusi yang salah untuk masalah yang diberikan.

Adam Davis
sumber
12

Secara umum, Anda menggunakan mikrokontroler ketika dapat melakukan pekerjaan. Mikrokontroler melakukan logika dengan menjalankan instruksi berurutan.

FPGA melakukan logika karena gerbang perangkat kerasnya ditransfer secara logis untuk melakukannya. Itu berarti dapat melakukan banyak hal lebih cepat, dan sejumlah hal seperti itu pada saat yang sama. Pada umumnya lebih rumit dan sulit untuk membuat dan men-debug logika yang sama dalam FPGA seperti pada mikro, jadi Anda menggunakan FPGA ketika kecepatan ekstra dan latensi rendah diperlukan.

Olin Lathrop
sumber
8

Salah satu aplikasi yang belum saya lihat disebutkan adalah rekayasa mikroelektronik atau desain chip MCU / CPU / GPU / ASIC sendiri. Chip-chip ini sering ditiru dengan mendesainnya dalam HDL dan kemudian diimplementasikan dalam FPGA. Ini membuatnya lebih mudah, lebih murah, dan lebih cepat untuk menguji dan memodifikasi sebelum akhirnya menggunakan HDL untuk membuat tata letak yang diperlukan untuk produksi silikon yang sebenarnya dalam prosesor atau ASIC.

Seorang komentator menyebutkan ini dalam bentuk chip soft-core (walaupun mereka memiliki kesalahan ketik dan menyebutnya chip sort-core). Anda dapat mengambil ARM / 8051 / etc. soft-core dan periferal soft-core apa pun yang Anda butuhkan dan pada dasarnya merancang mikrokontroler kustom Anda sendiri yang diimplementasikan dalam FPGA. Kemudian, dengan asumsi Anda memiliki sumber daya, Anda bisa memasukkan ini ke dalam mikrokontroler Anda sendiri.

Jika aplikasi semacam ini adalah sesuatu yang menarik minat Anda, lihatlah OpenCores untuk melihat apa yang mungkin.

tertanam.kyle
sumber
6

Kami membangun instrumen radar (kebanyakan bukaan sintetis) yang menggunakan FPGA secara luas. Saya tidak berpikir persyaratan waktu yang ketat dapat dipenuhi oleh mikrokontroler dengan mudah. Saya percaya bahwa banyak instrumen LIDAR juga menggunakan FPGA.

Pada dasarnya apa pun di mana persyaratan waktu dalam nanodetik membutuhkan FPGA atau ASIC.

LeoR
sumber
5

Sebuah mikrokontroler hanya dapat memproses data secara berurutan, satu instruksi pada satu waktu, jadi jika Anda memiliki operasi yang sangat mahal, Anda mungkin ingin membuat komputasi Anda paralel. Memproses audio / video adalah contoh yang bagus untuk ini. Untuk memenuhi kebutuhan itu, prosesor sinyal digital telah dikembangkan yang dapat melakukan tugas-tugas tertentu secara paralel, tetapi mereka tidak cukup digeneralisasi untuk mengimplementasikan algoritma arbitrer apa pun, sehingga prosesor ini akan bekerja untuk banyak tugas tetapi tidak semua tugas. FPGA adalah perangkat keras umum. Karena Anda dapat mendefinisikan, pada dasarnya, desain perangkat keras Anda sendiri, dan kemudian mengunduhnya ke FPGA, ia dapat mengimplementasikan algoritma apa pun yang dapat dibayangkan, mengingat ia memiliki sumber daya yang cukup untuk melakukannya.

Contoh nyata: Ken Perlin menyarankan implementasi perangkat keras dari algoritma simpleks noise-nya. Ini dapat dilakukan relatif cepat dengan CPU atau mikrokontroler tradisional, tetapi dapat dibuat sangat cepat dengan perangkat keras khusus. Karena saya ragu DSP akan bekerja untuk ini, hal yang paling mudah adalah FPGA. Cara yang sulit, tentu saja, adalah memiliki chip fisik aktual yang dibuat untuk Anda, yang harganya sangat mahal. http://www.csee.umbc.edu/~olano/s2002c36/ch02.pdf

Void Star
sumber
5

Satu jawaban yang tidak ada di sini adalah Akuisisi Data. Jika Anda ingin menggunakan ADC untuk mengambil sampel sinyal (misalnya, sinyal RF) pada 200Mhz dan memprosesnya, mikrokontroler tidak akan dapat memproses data dengan cukup cepat. Papan DAQ FPGA tipikal akan menerima, memfilter, melakukan DDC dan meneruskan data RF ke CPU pada frekuensi yang jauh lebih rendah. FPGA juga dapat melakukan operasi FFT dan channelisation pada spektrum RF.

Aplikasi lain adalah perutean paket, misalnya perangkat yang mengelola satu (atau beberapa) antarmuka ethernet XAUI yang masing-masing beroperasi pada 10 Gb / dtk. FPGA ini memfilter dan menjadwalkan antrian paket untuk berbagai tujuan. Sebuah mikrokontroler / CPU konvensional tidak akan mampu menangani bandwidth dari antarmuka ini.

stanri
sumber
4

Alasan mendasar bahwa mikroprosesor dan mikrokontroler dapat melakukan begitu banyak dengan jumlah sirkuit yang relatif kecil adalah bahwa jika mikro hanya perlu melakukan beberapa perhitungan kompleks 1.000 kali per detik dan dibutuhkan 20 mikrodetik (sehingga mikro akan bekerja pada perhitungan 2) % dari waktu), sebagian besar perangkat keras yang akan digunakan untuk perhitungan itu dapat digunakan untuk keperluan lain sisa 98% dari waktu. Dengan demikian, mikrokontroler dapat menggunakan sejumlah kecil perangkat keras untuk melakukan sejumlah besar fungsi berbeda, asalkan fungsi tersebut tidak diperlukan secara bersamaan.

Jumlah sirkuit dalam FPGA akan sering sebanding dengan mikrokontroler (FPGA bervariasi dalam ukuran dengan beberapa urutan besarnya, seperti halnya mikrokontroler, tetapi rentang tumpang tindih). Tidak seperti mikrokontroler, bagaimanapun, yang elemen-elemen rangkaiannya akan dihubungkan sedemikian rupa untuk memudahkan menggunakannya untuk banyak tugas yang tidak simultan, suatu FPGA akan dirancang untuk mendedikasikan bagian-bagian dari sirkuitnya untuk berbagai tugas "penuh waktu". Jika seseorang ingin memiliki mikrokontroler menghitung jumlah pulsa yang terjadi pada masing-masing 100 input, itu akan terbatas pada menghitung pulsa yang cukup lambat sehingga pengontrol akan dapat menanganinya secara berurutan, secara individual - jika semua input dapat berdenyut secara mandiri, bahkan pengontrol cepat akan mengalami kesulitan menghitung lebih dari beberapa ribu pulsa per detik per input. Sebaliknya,

supercat
sumber
1

FPGA mengimplementasikan rangkaian logika perangkat keras atau blok fungsional, secara teori dapat menerapkan apa pun yang Anda inginkan. Dan blok-blok itu berjalan bersamaan, tidak seperti MCU konvensional yang menjalankan pemrograman baris demi baris. Oleh karena itu kinerja FPGA jauh lebih baik daripada MCU, tetapi perlu mengetahui bahasa HDL atau VHDL yang berbeda dengan bahasa pemrograman dalam hal sintaks, gaya dan konsep.


Seperti yang saya katakan, ini dapat mengimplementasikan apa pun, oleh karena itu, tidak mengherankan bahwa Anda dapat mengimplementasikan MCU dengan blok fungsional untuk memfasilitasi pengembangan Anda dengan kinerja tinggi. Ada blok fungsional yang disediakan oleh Xilinx bagi Anda untuk menyematkan MCU, yang disebut Microblaze. Karena itu Anda juga dapat menjalankan program sistem tertanam di FPGA.


Misalnya, Anda ingin menerapkan equalizer audio yang dapat diprogram dan bagian komputasi paling berat seperti FFT dapat diimplementasikan dengan blok fungsional alih-alih menjalankan perhitungan perangkat lunak. Tetapi beberapa tugas sederhana seperti LCD, antarmuka I / O dapat dilakukan oleh MCU. Dan FPGA memungkinkan Anda untuk memiliki MCU embedded system dan blok fungsional perangkat keras secara bersamaan.

Lee Timothy
sumber