Apa perbedaan dan persamaan antara FPGA, ASIC dan General Microcontrollers?

25

Saya telah membaca posting ini dan tidak menjawab pertanyaan saya secara keseluruhan:

Saya menganggap mikrokontroler sebagai sesuatu yang memiliki memori, register, dan dapat memproses serangkaian instruksi seperti LOAD, STORE, dan ADD. Ini berisi gerbang logika dan semacamnya untuk melakukan perannya, tetapi tugas utamanya adalah menjadi prosesor bit universal. Saya menganggap Microntroller sebagai sistem desain ASIC yang saling berhubungan untuk menciptakan kemampuan menyimpan dan memproses instruksi.

Saya menganggap perangkat ASIC sebagai sirkuit yang secara khusus dibangun menggunakan komponen logis dan listrik untuk melakukan satu tugas tunggal, tanpa ada tugas lain dalam pikiran atau perangkat keras tambahan yang disertakan.

Saya menganggap perangkat FPGA sebagai perangkat ASIC (perangkat tingkat rendah) + banyak barang yang tidak digunakan, digunakan untuk mengimplementasikan tabel kebenaran tertentu.

Terlepas dari namanya, FGPA terasa sangat "spesifik untuk aplikasi", karena FGPA harus diubah untuk melakukan tugas yang baru dan berbeda. Ini menyebabkan kebingungan dengan ASIC. Meskipun, dalam hal memasang ulang FPGA, semua perangkat keras yang diperlukan harus ada. Selain itu, FPGA dimaksudkan untuk dapat diprogram, tetapi bukankah itu dimaksudkan untuk mikrokontroler?

Posting di atas yang saya referensikan juga menyebutkan HDL, yang saya kenal. Tidak bisakah HDL digunakan untuk ASIC dan FPGA, dan dengan proxy untuk merancang seluruh mikrokontroler?

pengguna58446
sumber
1
Tidak terlalu jelas apa pertanyaan Anda. Sudahkah Anda membaca pertanyaan terkait FPGA vs ASIC? HDL sebenarnya digunakan untuk merancang ASIC dan implementasi FPGA, dan Anda dapat merancang mikrokontroler di HDL.
pjc50
3
Altera menawarkan ebook gratis yang disebut FPGA untuk Dummies , yang menjelaskan perbedaan antara FPGA, ASIC, dan mikrokontroler dengan baik.
kkrambo
@kkrambo Anda memanggil saya boneka? :) Maaf, tidak bisa menahan ... Saya akan memeriksanya.
user58446
Saya menambahkan kata 'kesamaan' ke judul pertanyaan, karena sepertinya ada detail jargon teknis kecil yang dapat membingungkan bagaimana tiga perangkat berbeda berhubungan: misalnya satu perangkat dapat berisi salah satu dari dua perangkat lain, atau mungkin mengandung banyak komponen serupa tetapi berbeda dalam beberapa aspek penting. Ini sudah disentuh oleh beberapa jawaban yang ada. Terima kasih.
user58446

Jawaban:

28

ASIC vs FPGA

Array Gerbang yang Dapat Diprogram di Lapangan dapat dilihat sebagai tahap prototipe dari Sirkuit Terpadu Khusus Aplikasi: ASIC sangat mahal untuk diproduksi, dan setelah dibuat tidak akan kembali lagi (karena biaya tetap yang paling mahal adalah stensil masker [semacam pembuatan "stensil] "] dan perkembangan mereka). FPGA dapat diprogram ulang berkali-kali, namun karena kenyataan bahwa gerbang generik terhubung untuk mencapai tujuan Anda, FPGA tidak dioptimalkan seperti ASIC. Selain itu, FPGA adalah perangkat asli yang dinamis karena jika Anda mematikannya, Anda tidak hanya kehilangan kondisi saat ini tetapi juga konfigurasi Anda. Papan sekarang ada meskipun yang menambahkan chip FLASH dan / atau mikrokontroler untuk memuat konfigurasi saat startup sehingga ini cenderung menjadi argumen yang kurang penting. Baik ASIC dan FPGA dapat dikonfigurasi dengan Bahasa Deskripsi Perangkat Keras, dan terkadang FPGA digunakan untuk produk akhir. Tetapi umumnya ASIC menendang ketika desain diperbaiki.

FPGA vs mikrokontroler

Adapun perbedaan antara mikrokontroler dan FPGA, Anda dapat mempertimbangkan mikrokontroler sebagai ASIC yang pada dasarnya memproses kode dalam FLASH / ROM secara berurutan. Anda dapat membuat mikrokontroler dengan FPGA meskipun tidak dioptimalkan, tetapi tidak sebaliknya. FPGA dihubungkan dengan kabel seperti sirkuit elektronik sehingga Anda dapat benar-benar memiliki rangkaian paralel, tidak seperti dalam mikrokontroler tempat prosesor melompat dari sepotong kode ke yang lain untuk mensimulasikan paralelisme yang cukup baik. Namun karena FPGA telah dirancang untuk tugas paralel, tidaklah mudah untuk menulis kode berurutan seperti pada mikrokontroler.

Misalnya, biasanya jika Anda menulis dalam pseudocode "misalkan C menjadi A XOR B", pada FPGA yang akan diterjemahkan menjadi "bangun gerbang XOR dengan batu bata lego yang terkandung (tabel pencarian dan kait), dan hubungkan A / B sebagai input dan C sebagai output "yang akan diperbarui setiap siklus clock terlepas dari apakah C digunakan atau tidak. Sedangkan pada mikrokontroler yang akan diterjemahkan menjadi "baca instruksi - itu adalah XOR variabel di alamat A dan alamat B RAM, hasil untuk menyimpan di alamat C. Muat register unit aritmatika logika, kemudian minta ALU untuk melakukan XOR, lalu salin register keluaran di alamat C dari RAM ". Di sisi pengguna, kedua instruksi adalah 1 baris kode. Jika kita melakukan ini, MAKA sesuatu yang lain, dalam HDL kita harus mendefinisikan apa yang disebut Proses untuk melakukan urutan secara artifisial - terpisah dari kode paralel. Padahal dalam mikrokontroler tidak ada yang bisa dilakukan. Di sisi lain, untuk mendapatkan "paralelisme" (benar-benar masuk dan keluar) dari mikrokontroler, Anda perlu menyulap dengan benang yang tidak sepele. Cara kerja yang berbeda, tujuan berbeda.

Singkatnya:

ASIC vs FPGA: tetap, lebih mahal untuk sejumlah kecil produk (lebih murah untuk volume tinggi), tetapi lebih dioptimalkan.

ASIC vs mikrokontroler: tentu suka membandingkan alat dengan palu.

FPGA vs mikrokontroler: tidak dioptimalkan untuk pemrosesan kode sekuensial, tetapi dapat melakukan tugas paralel dengan sangat mudah. Umumnya FPGA diprogram dalam HDL, mikrokontroler dalam C / Majelis

Kapan pun kecepatan tugas paralel menjadi masalah, ambil FPGA, kembangkan desain Anda dan akhirnya jadikan ASIC jika lebih murah bagi Anda dalam jangka panjang (produksi massal). Jika tugas berurutan baik-baik saja, ambil mikrokontroler. Saya kira Anda bisa melakukan IC aplikasi yang lebih spesifik dari ini jika lebih murah untuk Anda dalam jangka panjang juga. Solusi terbaik mungkin akan sedikit dari keduanya.

Apa pencarian cepat setelah menulis ini memberi saya: masukkan deskripsi gambar di sini masukkan deskripsi gambar di sini

FPGA vs Microcontrollers, di forum ini

Tuan Mystère
sumber
14

FPGA dapat "ditransfer ulang" dengan pemrograman ulang. Sebuah FPGA memuat konfigurasinya ke dalam sel-sel logika yang dapat dikonfigurasi ketika diaktifkan . Ini berarti dapat diprogram ulang tanpa perubahan pada perangkat keras.

ASIC hanya dapat dihubungkan ulang dengan memodifikasi topeng photolitografis pada pengecoran silikon.

Mikrokontroler adalah jenis ASIC, yang mengeksekusi program dan dapat melakukan hal-hal umum sebagai hasilnya. Namun, jika Anda ingin mengubah set instruksi, atau melakukan sesuatu yang serupa, Anda harus memodifikasi tata letak IC silikon yang sebenarnya.


Perbedaan antara FPGA dan MCU lebih kabur. Pada dasarnya, apa itu FPGA, pada tingkat perangkat keras, adalah banyak sel SRAM kecil, semuanya terhubung ke matriks multiplexer yang padat. Pada dasarnya, FPGA adalah tumpukan logika diskrit yang dapat secara elektronik "ditransfer ulang" ** hanya dengan memprogram ulang multiplexer dan sel SRAM.

Dengan demikian, Anda benar-benar dapat mengimplementasikan MCU dalam FPGA, karena MCU hanyalah konfigurasi sel-sel logika tertentu. Bahkan, FPGA sangat umum digunakan dalam proses desain MCU.

Mikrokontroler adalah implementasi dari konfigurasi logika tertentu. Alasan kami memilikinya adalah bahwa dengan mengimplementasikan MCU secara langsung dalam silikon, jumlah keseluruhan ruang cetakan silikon yang diperlukan dapat sangat dioptimalkan, dan optimasi kinerja tertentu dapat dibuat sehingga "genericness" yang diperlukan dari FPGA melarang. Hal ini memungkinkan biaya produksi MCU berkurang secara dramatis, dan sebagai hasilnya, MCU umum jauh lebih murah daripada FPGA yang mampu mengandung logika yang setara.


FPGA yang berguna dalam aplikasi tertentu, karena mereka dapat menerapkan struktur logika dengan cara yang MCUs tidak bisa. Misalnya, jika Anda perlu menambahkan X1 + Y1, X2 + Y2, X3 + Y3, dan X4 + Y4, MCU harus melakukan setiap operasi secara berurutan *. Sebuah FPGA dapat dengan mudah memiliki 4 ALU yang terpisah pada saat yang sama , sehingga dapat melakukan operasi yang sama dalam seperempat waktu (dengan asumsi kedua perangkat clock pada tingkat yang sama).

Di sinilah FPGA (atau ASIC yang dirancang untuk tugas yang sama) benar-benar dapat bersinar, pada kenyataan bahwa Anda dapat melakukan banyak, banyak hal secara bersamaan , yang proses tunggal hanya dapat lakukan secara berurutan.

* (catatan: Saya mengabaikan beberapa hal seperti SIMD di sini)

Connor Wolf
sumber
Saya tidak berpikir perbedaan FPGA / ASIC kabur; dalam FPGA, sirkuit yang "kabel" dapat diubah beroperasi secara simultan dan mandiri. MCU memiliki sejumlah besar sirkuit yang kabelnya tidak dapat diubah, yang perilakunya dikendalikan melalui informasi yang diakses sedikit demi sedikit dari array memori yang dapat diprogram. Setiap saat, CPU umumnya hanya dapat melakukan satu operasi dari daftar beberapa ribu hingga beberapa miliar pilihan, tetapi MCU akan dirancang sedemikian rupa sehingga menyatukan operasi-operasi tersebut secara berurutan akan memungkinkan untuk melakukan pekerjaan yang bermanfaat.
supercat
Terima kasih. SANGAT dekat untuk menjadi jawabannya ... walaupun 10 bulan kemudian. +1 untuk membuat perubahan.
user58446
6

Ini pertanyaan yang bagus,

Pada dasarnya pengontrol mikro dan ASIC memiliki perangkat keras (sering disebut sebagai silikon) yang dipasang di atas batu dan tidak dapat diubah. FPGA dapat dikonfigurasi untuk mewakili berbagai jenis perangkat keras (ini dapat mencakup pengontrol mikro).

Anda mungkin berpikir bahwa pengontrol mikro dapat dibuat untuk melakukan banyak hal yang berbeda tetapi ini semua dilakukan dengan menjalankan program yang berbeda - secara teknis perangkat lunak tetapi kadang-kadang disebut sebagai firmware - perangkat keras itu sendiri tidak berubah pada dasarnya ia melakukan operasi yang sama tetapi dalam urutan berbeda dengan input berbeda.

FPGA biasanya digunakan untuk menghasilkan desain yang berkomitmen untuk ASIC. Perbedaan di antara mereka adalah bahwa jika Anda ingin memperbarui cara kerja FPGA atau menambah / menghapus blok fungsional yang perlu Anda lakukan adalah memperbarui firmware, ini tidak dapat dilakukan pada ASIC karena pengerjaan bagian dalam telah dilakukan pada silikon, itu tidak dapat dikonfigurasi ulang.

Jadi singkatnya, dengan prosesor mikro Anda menggunakan perangkat keras yang sama untuk menjalankan program yang berbeda, dengan FPGA Anda mengkonfigurasi ulang perangkat keras untuk melakukan fungsi yang berbeda dan ASIC seperti pengontrol mikro di mana perangkat keras tidak dapat diubah tetapi biasanya dirancang untuk melakukan satu fungsi yang sangat efisien.

Baik ASIC dan FPGA dapat berisi pengontrol mikro dan jika ada, Anda dapat menulis program untuk mereka seperti halnya pengontrol mikro yang berdiri sendiri, contohnya adalah prosesor tertanam NIOS II Altera.

Jika ini masih membingungkan, beri tahu saya apa yang tidak jelas dan saya akan melakukan yang terbaik untuk memperjelas jawaban saya.

Gipsy

Bahaya Gipsy
sumber
3

baik, tidak ada FPGA yang diprogram oleh sinyal listrik jika berperilaku seperti kumpulan gerbang tertentu, beberapa FPGA menyertakan memori flash untuk menyimpan konfigurasi ini, beberapa tidak dan harus diprogram ulang setelah setiap power reset.

ASIC keluar dari jalur produksi yang sudah dikonfigurasi.

Bug FPGA dapat diperbaiki dengan peningkatan firmware, bug ASIC tidak dapat diperbaiki secara ekonomis.

Jasen
sumber
2

Terlepas dari namanya, FGPA terasa sangat "spesifik applcation", karena FGPA harus diubah untuk melakukan tugas yang baru dan berbeda.

Itu kebalikan dari arti "khusus aplikasi". Anda dapat menggunakan FPGA untuk lebih dari satu aplikasi dengan memasangnya kembali. Anda tidak dapat mengubah ASIC, jadi itu hanya bisa diterapkan pada satu tugas (tugas itu mungkin mengimplementasikan mikrokontroler).

Meskipun, dalam hal memasang ulang FPGA, semua perangkat keras yang diperlukan harus ada.

Tidak yakin apa maksudnya. Biasanya ada antarmuka perangkat lunak untuk memprogram ulang FPGA. Ini adalah ASIC yang membutuhkan jutaan perangkat keras [unit mata uang].

FPGA dimaksudkan untuk diprogram, tetapi bukankah itu dimaksudkan untuk mikrokontroler?

Mikrokontroler memungkinkan Anda memprogram perangkat lunak berurutan untuk perangkat keras tetap. Sama seperti komputer normal, tetapi sangat kecil dan sumber daya terbatas. FPGA memungkinkan Anda memprogram perangkat keras apa pun yang Anda inginkan menggunakan HDL.

Berhenti Membahayakan Monica
sumber