Apa itu FPGA?

38

Saya telah melihat banyak orang berbicara tentang FPGA sebelumnya dan saya tahu itu singkatan dari array gerbang yang dapat diprogram di lapangan, tetapi bagaimana cara kerjanya dan apa tujuan menggunakan FPGA?

zklapow
sumber

Jawaban:

30

Mereka adalah komponen elektronik yang menambahkan logika ke sirkuit Anda (sehingga mereka mirip dengan pengontrol mikro). Tetapi pendekatan desain kemudian benar-benar berbeda dari pada UC (pengontrol mikro). Dalam UC, Anda tidak dapat mengubah desain UC internal; Anda hanya dapat menjalankan program "klasik" di atasnya. Memprogram FPGA lebih seperti menciptakan perangkat keras baru. Anda membuat koneksi baru antara gerbang logis dan membuat prosesor khusus baru. Dan Anda dapat melakukan semuanya di rumah, di meja, dan PC Anda.

Terdengar keren? Ya, tetapi ada beberapa kelemahannya. Misalnya, harga (tapi saya pikir sulit untuk membandingkannya), konsumsi daya yang lebih tinggi, dan kecepatan clock yang lebih rendah (tetapi Anda dapat merancang aplikasi Anda dengan cara yang cerdas, dan melakukan lebih banyak operasi dalam satu siklus clock).

Tautan yang bermanfaat:

Contoh penggunaan: http://nsa.unaligned.org/

Maciek Sawicki
sumber
3
Saya akan mencatat bahwa banyak FPGA yang cukup besar untuk mengandung beberapa core CPU, sehingga memungkinkan FPGA menjadi seluruh komputer untuk dirinya sendiri.
Craig Trader
3
Sebagai catatan, saya pikir kecepatan clock yang lebih rendah bisa menyesatkan. dibandingkan dengan PC, ya. Dibandingkan dengan pic16, mereka bisa lebih cepat, tetapi itu tergantung pada biaya. Sebagian besar yang lebih murah yang saya miliki dijalankan pada 40MHz, tetapi sekali lagi, variasi produk ke produk.
Kortuk
23

FPGA secara harfiah adalah array gerbang logika yang dapat diprogram di lapangan. Sandal jepit, multiplexer, tabel pencarian 4-bit, dll. Yang dapat dihubungkan dengan cara apa pun yang Anda inginkan, menggunakan bahasa mirip-C (Verilog).

UC, seperti AVR, juga dibuat dari gerbang logika yang sama, tetapi mereka dikonfigurasi ketika perangkat dibuat. Tentu, ini memiliki RAM dan Flash sehingga Anda dapat menulis perangkat lunak untuk membaca input dan mengontrol output, tetapi Anda tidak dapat mengubah pengaturan sebenarnya dari gerbang. Gerbang akan selalu diatur menjadi ALU, pengontrol memori, port serial, dll.

Manfaat dari UC adalah Anda dapat memprogramnya di lapangan (di meja Anda), dengan bahasa tingkat tinggi yang mudah digunakan, akrab, seperti C. Masalahnya adalah, perangkat lunak "lambat". Untuk memiliki input yang mengontrol output, dalam kasus paling sederhana, Anda dapat menulis:

membatalkan loop () {buttonState = digitalRead (buttonPin); if (buttonState == HIGH) {
digitalWrite (ledPin, HIGH);
} else {digitalWrite (ledPin, LOW); }}

Itu akan berubah menjadi selusin instruksi perakitan, sehingga loop akan mengambil mikrodetik atau lebih untuk mengontrol satu output dari satu input. Dan dibutuhkan seluruh chip UC untuk melakukannya secepat itu. Tentu, Anda dapat melakukan lebih banyak lagi, tetapi kemudian kemampuan Anda untuk mengontrol output akan melambat karena UC sibuk melakukan hal-hal lain.

Dalam FPGA, saya bisa mengkonfigurasi gerbang untuk memiliki kontrol input output dalam 1 jam. Jadi output akan mengikuti input dengan penundaan mungkin 25 nanodetik. Itu 40X lebih cepat, menggunakan periode jam yang sama. Dan sisa gerbang di FPGA tersedia untuk melakukan banyak hal lain, yang tidak akan mempengaruhi kecepatan fungsi kecil ini.

Kode untuk FPGA adalah flip flop sederhana:

selalu @ (posedge clock) ledPin <= buttonPin;

Ini akan mengambil hanya 1 sel FPGA, sekitar 40 gerbang, dari puluhan ribu dalam FPGA.

Saya dapat memprogram ulang FPGA saya untuk melakukan sesuatu yang lain, misalnya mengontrol led berdasarkan kombinasi empat input, masih dalam satu jam, masih menggunakan 1 sel FPGA itu. Atau kontrol led berdasarkan aliran serial dari input, dalam beberapa sel FPGA, yang akan menjadi 100-an gerbang. Jadi saya bisa mengendalikan LED berdasarkan data serial, katakan "ON" atau "OFF", dengan aliran serial pada tingkat yang sangat tinggi (mudah 20MHz), dan masih hanya menggunakan sebagian kecil dari kapasitas FPGA.

Jadi keunggulan FPGA jelas kecepatannya. Ia dapat melakukan apa saja yang dapat dilakukan oleh UC, dan dapat melakukannya lebih cepat, dengan segala sesuatu dilakukan secara paralel. Hal-hal kompleks yang akan dilakukan UC untuk milidetik, FPGA dapat melakukannya dalam mikrodetik atau kurang. Selama ada gerbang yang tersisa di FPGA, saya bisa menambahkan lebih banyak fungsi tanpa mempengaruhi kecepatan atau pengoperasian fungsi sebelumnya di FPGA. Omong-omong, sebuah FPGA dapat dengan mudah menjalankan clock rate 20MHz.

Biaya bukan pembeda. Saya dapat membeli FPGA yang dapat menerapkan hampir semua desain Arduino yang pernah saya lihat sekitar $ 5, hampir sama dengan chip AVR Arduino. Ada juga toolchains gratis (IDE, compiler, debugger) untuk FPGA.

Kekuasaan bukanlah pembeda. Karena saya dapat menjalankan FPGA pada clock rate yang jauh lebih rendah untuk mendapatkan fungsi yang sama dengan UC, dan menggunakan sebagian kecil dari gerbangnya (gerbang yang tidak digunakan hanya menggunakan daya bocor), FPGA dapat mengalahkan kekuatan hampir semua berbasis UC. Desain.

Kelemahan terbesar pada FPGA adalah jauh lebih kompleks dan memakan waktu untuk mendefinisikan, menulis kode, dan men-debug desain FPGA non-sepele daripada program UC. Proyek UC khas yang mungkin Anda lakukan di malam hari bisa memakan waktu berhari-hari dengan FPGA.

Masalah lain yang berpotensi diperbaiki adalah bahwa kebanyakan orang dilatih dalam pemrograman perangkat lunak, tetapi hanya sedikit yang memahami pemrograman perangkat keras. Anda dapat mempelajari Verilog dengan cukup mudah. Tetapi Anda juga perlu berpikir dalam hal desain perangkat keras daripada desain perangkat lunak. Pola desainnya sangat berbeda.

Masalah lain adalah bahwa FPGA tidak datang dalam paket DIP 8 sampai 20 pin kecil. Mereka cenderung datang dalam paket dudukan permukaan 100-pin atau lebih besar, sehingga membangun papan lebih sulit.

Dan masalah terakhir adalah bahwa banyak proyek menarik dapat diimplementasikan dengan baik pada proyek-proyek UC yang mudah digunakan, jadi mengapa repot-repot dengan FPGA?

SiliconFarmer
sumber
2
"Saya bisa membeli FPGA yang bisa menerapkan hampir semua desain Arduino yang pernah saya lihat seharga sekitar $ 5" Maaf, tapi hvæt? Dimana?
medivh
9

Jika Anda terbiasa dengan gerbang logika dasar, Anda harus tahu bahwa mereka hampir instan. Operasi A dan B ATAU C berubah secara instan ketika A, B atau C berubah.

FPGA adalah (semacam) matriks gerbang logika yang dapat diprogram. Anda dapat menentukan input dan output (sebagai kombinasi dari input).

Dalam UC, A + B / C * sqrt (D) akan mengambil beberapa siklus jam dan beberapa memori. Dalam FPGA, hasilnya hampir langsung.

Mereka bagus untuk video, DSP, kriptografi ...

Itulah keunggulan utama. FPGA modern sekarang cocok dengan memori dan ada hibrida UC / FPGA.

ppvi
sumber
Saya tahu banyak EE Berlatih dengan pengalaman bertahun-tahun yang sering kali hanya melalui FPGA ke dalam desain alih-alih UC di mana Anda biasa melihat UC. Saya benar-benar berpikir mereka bagus untuk penanganan antarmuka.
Kortuk
Ya saya pikir ini adalah contoh yang bagus: armadeus.com/english/index.html . Yang menarik bagi saya adalah contoh kontrol servo: marwww.in2p3.fr/~duval/wiki_html_dump/articles/m/o/t/…
Maciek Sawicki
2
Yang juga perlu diperhatikan adalah bahwa ada semakin banyak konverter "C ke VHDL" atau "C ke Verilog". Mereka bukan yang paling efisien, tetapi Anda dapat mengubah kode yang sudah ditulis menjadi perangkat keras yang dapat digunakan untuk peningkatan kecepatan. Cukup keren jika Anda bertanya kepada saya (dan jika Anda memiliki adonan untuk itu).
Chris Gammell
5

Mereka digunakan untuk memecahkan kunci enkripsi jauh lebih cepat daripada komputer untuk keperluan umum. : D

endolith
sumber
1
Haha, saya menikmati deskripsi Anda yang sangat fungsional. Mereka benar-benar luar biasa pada pemrosesan paralel.
Kortuk
Proyek pemecah kode: copacobana.org
hhh
2

Untuk menghemat uang dan risiko vs. ASIC. Kecuali kamu

  1. Sangat peduli tentang kekuasaan atau
  2. Sedang membangun banyak dari mereka (katakanlah> 10k unit)

biaya tetap (NRE) untuk melakukan ASIC membuatnya menjadi biaya yang mahal.

Karena Anda dapat mengubah FPGA dengan mudah, Anda dapat mensimulasikan desain lebih sedikit dan masuk ke lab lebih cepat. Anda juga dapat melakukan desain parsial dan membangunnya, seperti pada perangkat lunak.

Brian Carlton
sumber