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.