Membaca tentang FPGA, jika saya mengerti dengan benar, mereka pada dasarnya gerbang logika sepenuhnya dapat dikonfigurasi. Karena ini, orang dapat merancang apa pun dengan mereka. Seseorang dapat merancang segala sesuatunya dengan cara yang paling disesuaikan dan karenanya, memenuhi tujuan yang sama dengan cara yang jauh lebih efisien yang bisa didapatkan dengan menggunakan mikrokontroler. Dengan ini, sepertinya FPGA mengalahkan mikrokontroler kapan saja, kapan saja. Jadi pertanyaan saya adalah, jika FPGA benar-benar luar biasa, apa yang membuat mereka jauh lebih lazim daripada mikrokontroler? Dari sudut pandang ini, bagi saya sepertinya FPGA seharusnya sudah menghapus mikrokontroler sejak lama. Jadi mengapa ini tidak terjadi? Apakah biayanya, kesulitan memprogram FPGA, atau seluruhnya hal lain?
sumber
Jawaban:
Anda mengabaikan banyak faktor yang membuat pilihan desain:
Keuntungan utama dari FPGA dibandingkan dengan mikro adalah mereka lebih cepat dan dapat melakukan lebih banyak hal secara paralel. Selain itu, Anda lebih suka menggunakan mikro. Karena itu dalam proses desain, Anda biasanya memulai dengan mikro, kemudian dengan enggan pergi ke FPGA ketika Anda benar-benar membutuhkan kecepatan dan / atau operasi kecepatan tinggi bersamaan. Bahkan kemudian, Anda hanya menerapkan bagian-bagian yang sangat penting dalam FPGA, dan meninggalkan fungsi kontrol kecepatan rendah dan sejenisnya di mikro.
sumber
Salah satu perbedaan yang belum saya lihat di sini adalah bahwa FPGA digunakan, dan berperilaku, dengan cara yang sama sekali berbeda dengan prosesor.
FPGA benar-benar hebat dalam melakukan tugas yang sama persis, berulang-ulang. Misalnya, pemrosesan sinyal video, audio, atau RF. Atau merutekan paket Ethernet. Atau mensimulasikan aliran fluida. Setiap situasi di mana Anda memiliki banyak jenis data yang sama dilemparkan pada Anda dengan sangat cepat dan Anda ingin mengatasinya dengan cara yang sama. Atau Anda ingin menjalankan algoritma yang sama berulang kali. FPGA tidak benar-benar memiliki 'tugas' yang mulai dan berhenti [1], seluruh tugasnya adalah melakukan hal yang sama untuk data apa pun yang didapatnya, selama masih aktif. Itu tidak mengubah persneling, tidak melakukan hal lain. Ini adalah pekerja lini produksi utama. Itu akan melakukan hal yang sama berulang kali, secepat mungkin, selamanya.
CPU, di sisi lain, adalah contoh dari fleksibilitas. Mereka dapat diprogram untuk melakukan apa saja, dan mereka dapat diprogram untuk melakukan banyak hal yang berbeda secara bersamaan. Mereka memiliki tugas yang mulai dan berhenti, mereka mengubah persneling, multitask, terus-menerus berpindah dan mengubah fungsi.
FPGA dan CPU saling bertentangan. Komoditas CPU adalah waktu - itu harus menyelesaikan sesuatu dengan lebih cepat. Semakin cepat aplikasi Anda berjalan, semakin baik.
Komoditas FPGA adalah ruang. FPGA Anda hanya besar, dan hanya ada begitu banyak gerbang yang tersedia untuk melakukan tugas yang Anda inginkan. Sebagian besar waktu, masalahnya lebih dari ukuran kecepatan [2].
Dimungkinkan untuk membuat tindakan FPGA seperti CPU. Anda dapat memasukkan inti IP CPU ke dalam FPGA, namun sangat sulit untuk dibenarkan karena alasan yang dijelaskan orang lain [3]. FPGA dan CPU bertentangan, keduanya memiliki kekuatan dan kelemahan mereka sendiri, dan keduanya memiliki tempat sendiri sebagai hasilnya.
Catatan:
1) FPGA dapat dirancang untuk melakukan tugas yang berbeda, tetapi meskipun demikian itu akan menjadi nomor tertentu yang telah dirancang sebelumnya.
2) Kecepatan juga merupakan spesifikasi desain FPGA. Ini benar-benar trade off antara kecepatan dan ukuran.
3) Memasukkan CPU ke dalam FPGA dilakukan relatif sering, namun dilakukan berdasarkan kasus per kasus, tergantung pada aplikasi spesifik. Misalnya, jika Anda memerlukan mikrokontroler yang sangat kecil dan memiliki ruang FPGA ekstra.
Dan akhirnya: Jawaban ini adalah penyederhanaan besar - FPGA digunakan dengan cara yang sangat bervariasi dan kompleks dan ini adalah gambaran yang sangat singkat tentang cara mereka digunakan secara umum.
sumber
Seperti kata Olin, sesuatu seperti mikro lebih efisien untuk banyak tugas, dan Anda akan hampir selalu menemukan mikro yang digunakan di mana pun FPGA muncul. Luas silikon yang digunakan (yang diterjemahkan ke dalam biaya secara nonlinier) dan konsumsi daya jauh lebih sedikit. Untuk alasan itu, tidak jarang menerapkan MCU 'lunak' pada FPGA- tetapi biaya dan kinerja mikro semacam itu kurang memuaskan.
Beberapa FPGA modern mengandung satu atau lebih inti 'keras' seperti seri ARM di mana-mana. Juga, mereka mungkin berisi blok memori khusus karena sangat tidak efisien untuk membuat memori keluar dari gerbang. Inti mikro 32-bit menggunakan sedikit area silikon dalam FPGA biasa, yang memberi Anda gambaran tentang biaya relatif.
Pengembangan secara signifikan lebih sulit, dan IP cenderung tidak tersedia secara bebas seperti untuk solusi SOC mikro dan berdedikasi - misalnya pengontrol LCD, antarmuka PCI, MAC Ethernet. Alasannya adalah sebagian karena dengan mengungkapkan deskripsi logika HDL mereka mentransfer desain bukan hanya instantiasi desain. Alasan lain adalah bahwa kinerja tergantung pada tata letak logika dalam FPGA, yang membutuhkan banyak upaya selama pengembangan.
Komplikasi lebih lanjut adalah bahwa FPGA paling kompleks berbasis RAM untuk konfigurasi dan biaya proses sedemikian rupa sehingga diperlukan memori nonvolatile eksternal untuk menyimpan konfigurasi dan memori program untuk setiap MCU yang terpasang. Memori ini harus dimuat ke dalam RAM saat power-up.
FPGA adalah alat yang sangat berguna di kotak alat, tetapi mereka tidak akan menggantikan MCU atau ASIC secara universal dalam waktu dekat.
sumber
Penggunaan silikon terbaik untuk suatu pekerjaan adalah ASIC, tidak ada yang terbuang, tetapi mereka memiliki kurva belajar yang besar, NRE, dan tidak fleksibel.
Ada dua cara untuk membangun fleksibilitas menjadi sebuah chip. a) Memiliki ALU yang dioptimalkan ruang, dan menggunakannya berulang kali pada data yang disimpan. Ini disebut MCU, dan membutuhkan area luas silikon yang 'tidak melakukan apa-apa', memori program, bus lebar yang berjalan dari unit ke unit, dan sakelar akses bus. b) Memiliki logika berbutir halus, dengan beberapa bagian opsional yang dioptimalkan ruang seperti pengganda, RAM kecil, dan CPU sederhana. Ini disebut FPGA, dan membutuhkan area luas silikon yang 'tidak melakukan apa-apa', sakelar yang dapat diprogram dan jalur koneksi.
Jelas dengan struktur-struktur itu, MCU bekerja paling baik untuk tugas-tugas yang dapat dipecah menjadi potongan-potongan serial, dan FPGA bekerja paling baik untuk tugas-tugas yang membutuhkan operasi paralel kecepatan tinggi. Ketika aplikasinya berat, dan biayanya didominasi oleh biaya silikon, begitulah kedua jenis akan digunakan secara alami.
Ketika aplikasi ringan tetapi volume tinggi, biaya didominasi oleh kemasan daripada silikon, dan kedua jenis ini layak. Altera memiliki beberapa FPGA daya sangat kecil yang sangat kecil untuk bersaing dengan MCU satu dolar.
Untuk aplikasi volume rendah, biaya pengembangan cenderung mendominasi, dan ada MCU menang, dengan asumsi mereka memiliki kecepatan
sumber
Dalam hal konsumsi daya dan pemanfaatan silikon, FPGA sangat buruk dibandingkan dengan mikroprosesor.
Sebuah FPGA mengkonsumsi banyak area silikon dalam sirkuit konfigurasi logika sesuatu yang tidak berlaku untuk mikro. Harus ada lebih banyak interkoneksi yang tersedia daripada yang diperlukan pada implementasi mikroprosesor khusus.
FPGA mengkonsumsi lebih banyak daya daripada ASIC khusus seperti mikroprosesor karena logika tidak diimplementasikan secara efisien.
Setiap fungsi yang dapat diimplementasikan dalam FPGA dapat dilakukan dengan lebih efisien, lebih murah, dengan konsumsi daya yang lebih rendah, ruang dewan yang lebih kecil, dll dalam ASIC khusus. Ini dengan asumsi volume cukup besar untuk mengimbangi NRE.
sumber
Dsystems berbasis Microprocessor, dan kemudian Microcontrollers, telah mampu mencapai tingkat fungsionalitas yang sangat besar dengan kemampuan mereka untuk menggunakan banyak bagian sirkuit di dalamnya untuk menyelesaikan banyak tugas berbeda pada waktu yang berbeda. Saya pikir itu instruktif untuk membandingkan mesin arcade Tank, dirancang pada tahun 1976, dengan game Combat yang berjalan pada mesin game yang dikendalikan mikroprosesor kedua di dunia, Atari 2600. Meskipun ada beberapa perbedaan dalam gameplay, perangkat keras Atari 2600 pada dasarnya dirancang untuk mengimplementasikan game seperti Tank dengan biaya minimal; fakta bahwa itu bisa dibuat untuk memainkan game yang berbeda dengan memasukkan kartrid ROM yang berbeda adalah bonus yang bagus.
Game Tank memungkinkan dua pemain untuk menggerakkan tank di sekitar layar dan menembakkan satu sama lain. Ini memiliki "slip" penghitung untuk setiap posisi X dan Y tangki, posisi X dan Y masing-masing pemain, penghitung naik / turun untuk sudut setiap pemain dan sudut tembakan masing-masing pemain, penghitung untuk skor setiap pemain, X dan Y raster-beam Penghitung posisi, dan banyak sirkuit kontrol di atas hal-hal itu. Ini memiliki perangkat keras untuk mengambil data playfield dari ROM dan menampilkannya, juga memiliki perangkat keras untuk mengambil bentuk untuk tank dua pemain dan skor dari ROM dan menampilkannya.
Atari 2600 memiliki penghitung selip untuk posisi horizontal masing-masing dari dua objek pemain, masing-masing dari dua objek rudal, dan satu objek tambahan yang disebut "bola" yang tidak digunakan dalam Combat tetapi digunakan dalam beberapa permainan lainnya. Untuk setiap objek pemain, ia memiliki perangkat keras untuk mengeluarkan pola yang disimpan dalam kait 8-bit, serta kait delapan-bit "tertunda" untuk setiap pemain yang disalin ke kait 8-bit utama setiap kali pemain lain bentuk diperbarui. Ia juga memiliki penghitung posisi sinar horizontal, dan kait bentuk-bidang 20-bit yang dihasilkan ke layar dua kali per garis pindai, dengan salinan sisi kanan muncul sebagai pengulangan atau refleksi dari kiri. Ini memiliki perangkat keras untuk mendeteksi tabrakan, tetapi tidak melakukan apa pun sebagai akibatnya. Itu tidak tidak memiliki perangkat keras apa pun untuk posisi vertikal objek apa pun, maupun posisi vertikal balok raster (!), juga tidak memiliki perangkat keras apa pun yang terkait dengan penjagaan skor, tampilan skor, durasi permainan, dll.
Semua fungsi di mana 2600 menghilangkan perangkat keras ditangani oleh perangkat lunak dalam kartrid. Hanya perlu memeriksa posisi vertikal setiap objek terhadap posisi balok raster sekali per garis pindaian, hanya perlu memperbarui skor pemain dan waktu permainan tersisa paling banyak satu per frame, skor pemain disimpan pada garis pindai di atas playfield dan dengan demikian dapat berbagi perangkat keras yang sama yang digunakan untuk playfield, dll.
Pendekatan normal untuk mengimplementasikan permainan seperti "Tank" dalam FPGA adalah dengan menggunakan sirkuit terpisah untuk fungsi yang berbeda dengan cara yang sama seperti mesin arcade 1976. Pendekatan seperti itu akan berhasil, tetapi gunakan sejumlah besar perangkat keras. Pendekatan berbasis mikroprosesor dapat menghilangkan lebih dari setengah perangkat keras tersebut dengan imbalan menambahkan mikroprosesor, yang kemungkinan akan mengandung lebih sedikit sirkuit daripada perangkat keras yang diganti (2600 dapat mengimplementasikan game yang jauh lebih canggih daripada Tank, yang akan membutuhkan lebih banyak perangkat keras jika mereka tidak menggunakan mikroprosesor).
FPGA sangat baik dalam hal di mana seseorang membutuhkan perangkat yang dapat melakukan banyak tugas sederhana secara bersamaan . Sistem berbasis mikroprosesor (atau berbasis mikrokontroler) umumnya lebih baik, namun, dalam kasus di mana ada banyak tugas yang perlu dilakukan, tetapi mereka tidak perlu diproses secara bersamaan, karena mereka membuatnya mudah untuk menggunakan sejumlah kecil sirkuit untuk mencapai sejumlah besar tujuan yang berbeda.
sumber
Ini sepenuhnya biaya. Ketika mikro bisa serendah 30 sen, FPGA murah ada di wilayah $ 5. Biayanya mungkin tidak terlihat tinggi, tetapi ketika Anda menghasilkan jutaan mainan baru yang kentut untuk dijual seharga $ 10 maka harga FPGA membunuh keuntungan Anda.
sumber
Hanya untuk menambah jawaban lain yang sangat bagus, saya pikir adopsi FPGA juga masalah domain: misalnya, untuk perangkat neuromorfik, papan FPGA menjadi cukup di mana-mana karena ada kebutuhan besar untuk paralelisme, yang merupakan titik kuat dari FPGA.
Jika Anda memperkirakan tren yang kita lihat untuk perangkat neuromorfik, orang dapat membayangkan bahwa bidang lain yang berbasis, atau sangat membutuhkan, paralelisme mungkin akan mengadopsi FPGA lebih banyak. Jadi mungkin FPGA tidak akan ada di mana-mana untuk produk kelas konsumen, tetapi bisa untuk domain tertentu karena tampaknya saat ini terjadi untuk perangkat neuromorfik.
sumber