FPGA's vs Microcontrollers [ditutup]

36

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.

Sushrut J Mair
sumber
Adendum - Apakah ada contoh bagus di dunia nyata yang menggunakan arsitektur hibrida, yaitu, menggabungkan FPGA dengan mikrokontroler?
Sushrut J Mair
Sushrut J Mair - Umumnya ketika Anda memiliki FPGA dan membutuhkan mikro, mikro akan diimplementasikan dalam FPGA.
Connor Wolf
Ya, Nama Palsu, setuju. Namun, saya mencari untuk menemukan kasus dunia nyata di mana baik FPGA dan MCU digunakan untuk merancang suatu sistem. Idenya adalah bahwa bagian FPGA dari desain digunakan untuk mengimplementasikan 'evolvable' h / w yang merespons dan berubah sesuai perubahan input ke sistem sementara pemrosesan inti logis dilakukan oleh MCU.
Sushrut J Mair

Jawaban:

48

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.

ajs410
sumber
Ini info yang bagus, terima kasih. Saya telah mendengar tentang C / C ++ ke kompiler HDL. Sudahkah Anda mencobanya?
Sushrut J Mair
Mereka ... oke. Untuk blok logika tunggal, itu tidak terlalu buruk. Tapi saya tidak akan menulis seluruh desain melalui kompiler semacam itu. Mereka tidak terlalu efisien karena bahasanya sangat berbeda ... Anda harus menggunakan konvensi khusus, mereka tidak hanya mengambil kode ANSI C lama.
ajs410
Terima kasih, ini berguna. Saya sudah memesan kit Lattice Semiconductor's XP2 Brevia dev. Saya bermaksud untuk mencoba beberapa kompiler HDL ke C setelah saya merasa nyaman dengan konsep dasar desain FPGA.
Sushrut J Mair
Baru saja melihat jawaban addendum saya di kueri asli. Terima kasih - jadi apakah Anda mengatakan bahwa secara praktis (setidaknya dengan teknologi saat ini), arsitektur hibrida MCU + a FPGA standar memiliki nilai tambah yang sangat kecil untuk benar-benar dapat digunakan dalam situasi dunia nyata?
Sushrut J Mair
Luar biasa. Terima kasih ajs410. Saya berharap untuk menghabiskan beberapa minggu boot diri saya ke fpga sebelum masuk ke kemungkinan lengkungan hybrid yang menarik!
Sushrut J Mair
10

"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:

  • The Elphel kamera ; Elphel Project Wiki memiliki FPGA gerbang Xilinx (R) Spartan 3e 1200K dan prosesor ETRAX FS yang menjalankan GNU / Linux.
  • The TS-7500 memiliki 5000 Lut Lattice FPGA dan 250MHz Cavium ARM9 CPU yang dapat menjalankan Linux.
  • The papan Balon memiliki Xilinx Spartan FPGA dan CPU ARM
  • beberapa SBC kecil sekali Linux termasuk FPGA dan CPU
  • The Armadeus Project wiki dokumen papan beberapa papan dengan kedua Xilinx Spartan-3 FPGA dan CPU 400 MHz ARM9.
  • The Blackfin Berguna Dewan mencakup Xilinx Spartan 3e FPGA dan prosesor 600 MHz Analog Devices Blackfin® ADSP-BF537. (Tidak memiliki MMU, jadi tidak bisa menjalankan Linux penuh, tetapi bisa menjalankan uClinux).
  • The "Minimig" (mini Amiga) termasuk Xilinx Spartan-3 FPGA, sebuah M68000 CPU, dan PIC MCU kecil sebagai bertindak kontroler disk.
davidcary
sumber
4

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:

  1. FPGA yang lebih besar cenderung memiliki CPU yang terintegrasi (proyek yang lebih besar sering membutuhkannya), seperti halnya mereka memiliki RAM dan blok pengali
  2. Beberapa mikrokontroler bertujuan pada operasi paralel (XMOS XS1, Atmel Xmega, GreenArray, Parallax Propeller)
  3. Beberapa chip dirancang sebagai hibrida (Cypress PSoC, Atmel FPSLIC)

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.

Yann Vernier
sumber
1

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.

Leon Heller
sumber
1
Seringkali saya menemukan bahwa FPGA harus berjalan pada kecepatan jam yang lebih lambat untuk MCU yang sama, atau mereka akan jauh lebih mahal. Dalam kasus yang lebih mahal, Anda dapat dengan mudah mengimplementasikan perangkat keras tambahan antara pengontrol dan pin eksternal, seringkali cukup sepadan.
Kortuk
Jika FPGA diperlukan dalam sistem, MCU adalah "gratis".
Leon Heller
1

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.

Dipten
sumber