Saya telah bekerja pada keluarga Arduino (khususnya Sanguino), membangun beberapa perangkat sederhana dan fototrop sederhana. Dengan demikian saya cukup nyaman dengan mikrokontroler - khususnya Atmel. Saya ingin tahu apa perbedaan FPGA dari mikrokontroler standar. Saya dari latar belakang teknis (pemrograman C / C ++) dan dengan demikian akan menyukai jawaban teknis. Hanya perlu diingat bahwa saya seorang pemula (relatif terhadap pengalaman s / w) di domain elektronik. :)
Saya memang menelusuri pertanyaan ini dan itu bagus tapi saya mencari detail lebih dalam.
Terima kasih! Sushrut.
fpga
microcontroller
Sushrut J Mair
sumber
sumber
Jawaban:
Mendesain untuk FPGA membutuhkan Bahasa Deskripsi Perangkat Keras (HDL). HDL sama sekali tidak seperti C. Sedangkan program C adalah serangkaian instruksi berurutan dan harus memutarbalikkan dirinya sendiri untuk mencapai eksekusi paralel, HDL menggambarkan sirkuit konkuren dan harus memutarbalikkan dirinya sendiri untuk mencapai eksekusi berurutan. Ini adalah dunia yang sangat berbeda dan jika Anda mencoba membangun sirkuit di FPGA sambil berpikir seperti pengembang perangkat lunak, itu akan menyakitkan.
MCU terbatas waktu. Untuk menyelesaikan lebih banyak pekerjaan, Anda membutuhkan lebih banyak siklus prosesor. Jam memiliki batas frekuensi yang sangat nyata, sehingga mudah untuk menabrak dinding komputasi. Namun, FPGA terbatas ruang. Untuk menyelesaikan lebih banyak pekerjaan, Anda hanya menambahkan lebih banyak sirkuit. Jika FPGA Anda tidak cukup besar, Anda dapat membeli yang lebih besar. Sangat sulit untuk membangun sirkuit yang tidak dapat ditampung di FPGA terbesar, dan bahkan jika Anda melakukannya ada catatan aplikasi yang menjelaskan cara membuat daisy rantai FPGA bersama-sama.
FPGA lebih fokus pada eksekusi paralel. Kadang-kadang Anda harus khawatir tentang berapa lama ISU MCU Anda perlu untuk melayani interupsi, dan apakah Anda akan dapat mencapai batas waktu sulit-real-time Anda. Namun, di dalam FPGA ada banyak Finite State Machines (FSM) yang berjalan sepanjang waktu. Mereka seperti "pengontrol femto", seperti awan kecil logika kontrol. Mereka semua berjalan secara simultan, jadi tidak perlu khawatir ada gangguan. Anda mungkin memiliki FSM untuk antarmuka ke ADC, FSM lain untuk antarmuka ke bus alamat / data mikrokontroler, FSM lain untuk mengalirkan data ke codec stereo, namun FSM lain untuk buffer aliran data dari ADC ke ... perlu menggunakan simulator untuk memastikan bahwa semua FSM bernyanyi dalam harmoni.
FPGA adalah mimpi basah desainer tata letak PCB. Mereka sangat dapat dikonfigurasi. Anda dapat memiliki banyak antarmuka logika yang berbeda (LVTTL, LVCMOS, LVDS, dll), dengan voltase yang bervariasi dan bahkan kekuatan drive (sehingga Anda tidak memerlukan resistor pemutusan seri). Pin dapat ditukar; apakah Anda pernah melihat bus alamat MCU di mana pin tersebar di sekitar chip? Desainer PCB Anda mungkin harus menjatuhkan beberapa vias hanya untuk mengikat semua sinyal dengan benar. Dengan FPGA, perancang PCB kemudian dapat menjalankan sinyal ke dalam chip dalam urutan apa pun yang nyaman, dan kemudian desain dapat dianotasi kembali ke rantai alat FPGA.
FPGA juga memiliki banyak mainan bagus dan mewah. Salah satu favorit saya adalah Digital Clock Manager dalam chip Xilinx. Anda memberinya satu sinyal clock, dan dapat memperoleh empat sinyal lainnya menggunakan berbagai pengganda frekuensi dan pembagi, semuanya dengan siklus tugas 50% murni dan 100% dalam fase ... dan bahkan dapat menjelaskan jam yang condong ke muncul dari penundaan propagasi eksternal ke chip!
EDIT (balas ke addendum):
Anda dapat menempatkan "soft core" ke dalam FPGA. Anda benar-benar menghubungkan sirkuit mikrokontroler, atau Anda mungkin menjatuhkan sirkuit orang lain ke dalam desain Anda, seperti PicoBlaze atau MicroBlaze Xilinx atau Nios dari Altera. Tetapi seperti kompiler C-> VHDL, core ini cenderung sedikit membengkak dan lambat dibandingkan dengan menggunakan FSM dan datapath, atau mikrokontroler yang sebenarnya. Alat pengembangan juga dapat menambah kompleksitas yang signifikan pada proses desain, yang bisa menjadi hal buruk ketika FPGA sudah merupakan chip yang sangat kompleks.
Ada juga beberapa FPGA yang memiliki "hard core" tertanam di dalamnya, seperti seri Virtex4 Xilinx yang memiliki IBM PowerPC yang nyata dan berdedikasi dengan bahan FPGA di sekitarnya.
EDIT2 (balas komentar):
Saya rasa saya mengerti sekarang ... Anda bertanya tentang menghubungkan MCU diskrit ke FPGA; yaitu dua chip terpisah. Ada alasan bagus untuk melakukan ini; FPGA yang memiliki core keras dan yang cukup besar untuk mendukung soft core yang layak biasanya monster dengan ratusan pin yang akhirnya membutuhkan paket BGA, yang dengan mudah meningkatkan kesulitan mendesain PCB dengan faktor 10.
C jauh lebih mudah, jadi MCU pasti memiliki tempat mereka bekerja bersama dengan FPGA. Karena lebih mudah untuk menulis C, Anda mungkin menulis "otak" atau algoritma pusat di MCU, sedangkan FPGA dapat menerapkan sub-algoritma yang mungkin perlu dipercepat. Cobalah untuk memasukkan hal-hal yang berubah menjadi kode C, karena lebih mudah untuk berubah, dan biarkan FPGA menjadi jenis barang yang lebih berdedikasi yang tidak akan sering berubah.
Alat desain MCU juga lebih mudah digunakan. Butuh beberapa menit untuk alat desain untuk membangun file bit FPGA, bahkan untuk desain yang agak sederhana, tetapi program MCU yang kompleks biasanya membutuhkan waktu beberapa detik. Ada banyak, apalagi kesalahan dengan MCU, jadi mereka juga lebih mudah untuk di-debug ... Saya tidak bisa mengecilkan seberapa kompleks FPGA bisa. Anda benar-benar perlu mendapatkan lembar data untuk yang Anda miliki, dan Anda harus mencoba membaca setiap halamannya. Saya tahu, ini beberapa ratus halaman ... tetap lakukan.
Cara terbaik untuk menghubungkan mereka adalah dengan menggunakan MCU dengan alamat eksternal dan bus data. Kemudian Anda cukup memetakan memori sirkuit FPGA ke dalam MCU, dan menambahkan "register" Anda sendiri yang masing-masing memiliki alamatnya sendiri. Sekarang FPGA dapat menambahkan periferal khusus, seperti penghitung waktu 32-bit yang dapat mengunci semua 4 byte sekaligus ketika byte pertama dibaca untuk mencegah overflow antara pembacaan 8-bit. Anda juga dapat menggunakannya sebagai lem logika untuk memetakan memori lebih banyak periferal dari chip lain, seperti ADC terpisah.
Akhirnya, beberapa MCU dirancang untuk digunakan dengan "master eksternal" seperti FPGA. Cypress membuat beberapa MCU USB yang memiliki 8051 di dalamnya, tetapi tujuannya adalah agar data USB dihasilkan / dikonsumsi oleh misalnya FPGA.
sumber
"contoh di dunia nyata ... menggabungkan FPGA dengan mikrokontroler?"
Pada prinsipnya, FPGA yang cukup besar sendiri dapat melakukan apa saja yang dapat dilakukan oleh FPGA plus mikrokontroler - mungkin dengan mengimplementasikan CPU lunak di dalam FPGA. Dalam praktiknya, tingkat kinerja tertentu seringkali memiliki biaya komponen yang lebih rendah dan membutuhkan daya yang lebih rendah ketika diimplementasikan dengan FPGA plus mikrokontroler terpisah daripada dengan FPGA saja (atau MCU saja). Berikut adalah beberapa perangkat yang lebih terkenal dengan FPGA dan mikrokontroler di dalam pesawat:
sumber
Seringkali FPGA digunakan secara khusus untuk melakukan tugas-tugas yang tidak dapat dilakukan mikrokontroler secara efisien, seperti operasi latensi yang sangat paralel atau rendah, beroperasi dalam beberapa domain jam, atau melakukan logika khusus pada kecepatan perangkat keras. Dengan demikian, mereka akan melakukan pekerjaan berat, dan Anda jarang membutuhkan MCU untuk menjadi pusat dari desain - mereka dapat dipindahkan ke posisi manajemen, seperti memuat bitstream konfigurasi. Contoh dari ini adalah PIC atau ARM di Minimig , yang mengimplementasikan antarmuka penyimpanan.
Namun, beberapa produk mengaburkan garis. Beberapa contoh:
Berasal dari latar belakang pemrograman yang penting, ini merupakan penyesuaian untuk mendesain perangkat keras karena Anda perlu mendapatkan keuntungan dari FPGA. Namun, Anda akan menemukan pengalaman yang bermanfaat di tempat lain.
sumber
Sebenarnya tidak ada perbedaan antara MCU seperti AVR, dan satu diprogram menjadi FPGA. Situs OpenCores memiliki kode VHDL untuk AVR yang dapat digunakan dalam FPGA. Anda dapat mempelajarinya dan melihat cara kerjanya, dan bahkan mencobanya sendiri di simulator tanpa membeli papan FPGA yang cocok.
sumber
Mikrokontroler adalah sirkuit digital yang menjalankan perintah dari memori programnya secara berurutan satu perintah demi perintah. Sirkuit perangkat keras digital dari mikrokontroler adalah tetap dan interkoneksi antara gerbang yang berbeda yang terdiri dari sirkuit digital bersifat permanen dan terukir pada silikon. Sedangkan FPGA dapat dianggap sebagai kumpulan gerbang digital (dalam kenyataannya meskipun ada lut sebagai gantinya) yang memiliki interkoneksi yang dapat diprogram. Sekarang setiap sirkuit digital (bahkan mikrokontroler) dapat dibuat pada FPGA dengan memprogram interkoneksi.
sumber