Perangkat aktif tolong apa yang bisa dilakukan. Sirkuit terpadu logika yang dapat diprogram (PLI)

Saya akan memulai artikel pertama saya dengan mengatakan: Saya baru mengenal topik artikel ini, tetapi saya memilih topik seperti itu saja. Saya akan menjelaskan alasannya. Saya sudah membaca Habr cukup lama dan saya selalu tertarik dengan topik-topik yang ada di dalamnya saat ini mempelajari apa yang dia bicarakan. Artikel-artikel seperti itu selalu dapat dimengerti, selalu menemukan pembacanya dan selalu menyampaikan kepada pembaca minat dan antusiasme penulisnya, yang biasanya tidak masuk akal bagi pemula di bidang apa pun!

FPGA (Programmable Logic Integrated Circuit) adalah salah satu jenisnya perangkat elektronik, digunakan untuk mengimplementasikan berbagai perangkat logis dengan kompleksitas yang berbeda-beda, mulai dari penghitung biner, sederhana rangkaian logika(mengganti standar sirkuit terpadu- longgar) ke prosesor dan neurochip khusus.

Kami menemukan tujuannya, pertanyaannya adalah bagaimana caranya? Di dalam FPGA terdapat elemen dasar tertentu yang dihubungkan berdasarkan catatan konfigurasi. Kemungkinan elemen dasar, jenis dan lokasi penyimpanan catatan konfigurasi bergantung pada jenis FPGA dan seterusnya model tertentu. Dalam FPGA modern ada dua jenis: CPLD dan FPGA, kami akan memberikannya masing-masing satu paragraf.

CPLD (perangkat logika kompleks yang dapat diprogram - perangkat logika kompleks yang dapat diprogram) - FPGA, elemen dasarnya adalah sel makro dan gerbang logika sederhana (AND(-NOT)/OR(-NOT)). Biasanya mengandung lebih sedikit elemen dasar dibandingkan FPGA, namun lebih cepat. Biasanya juga berisi memori konfigurasi non-volatile langsung pada chip, namun memiliki jumlah terbatas siklus konfigurasi.

FPGA (array gerbang yang dapat diprogram di lapangan - Array gerbang yang dapat diprogram pengguna) - FPGA, yang biasanya memiliki sejumlah jenis blok dasar, ini juga dapat disesuaikan gerbang logika(tabel kebenaran) dan blok penjumlahan-perkalian (Pemrosesan sinyal digital - DSP) dan PLL (Phase-Locked Loop) untuk membagi dan mengalikan frekuensi dan beberapa lainnya tergantung pada modelnya. Biasanya mudah berubah memori internal dan fungsionalitas untuk memuat konfigurasi dari eksternal memori non-volatil.

Anda dapat menemukan definisi yang sangat berbeda dari jenis FPGA ini dan perbedaan di antara keduanya, baik di buku maupun di Internet. Oleh karena itu, Anda tidak boleh terpaku pada perbedaan ini; produsen sendiri yang mengklasifikasikan FPGA yang mereka produksi. Jika Anda tidak ingat singkatannya atau tidak mengerti arti beberapa kata, tidak apa-apa, yang penting muncul konsep umum oh FPGA, saya harap saya mencapai ini. Sekarang untuk berlatih!

Mari kita mulai dengan membahas alat. saya akan menggunakan perlengkapan pemula pengembang Altera Cyclone II FPGA Starter Board, ini adalah papan siap pakai di mana FPGA seri Cyclone II – EP2C20F484C7N, serta berbagai periferal dan antarmuka dipasang. Pada artikel ini, kami menggunakan LED dan indikator tujuh segmen. Kami tidak akan menggunakan blok khusus apa pun dari seri FPGA ini, sehingga Anda dapat menggunakan hampir semua FPGA lainnya (FPGA dan CPLD) jika Anda mau.

Mereka yang sangat tertarik dapat membeli salah satu kit pengembangan atau merakit sendiri perangkatnya, yang cukup sulit bagi pemula, tetapi merupakan tugas yang sepenuhnya bisa dilakukan. Diagram pemrogram dan diagram koneksi untuk FPGA itu sendiri mudah ditemukan di Google, dan siapa pun yang sebelumnya pernah mengerjakan firmware AVR amatir dapat menemukan pemrogram Altera Byte Blaster yang cocok. Secara umum, saya memberi Anda implementasi rangkaian (di akhir artikel ada diagram rangkaian Papan Pemula saya). Siapa pun yang ingin mencobanya tanpa mengeluarkan uang dan melihat hasil pekerjaannya dapat menggunakan simulator yang ada di dalam Quartus II (pengerjaannya tidak dijelaskan dalam artikel ini).

Untuk softwarenya kita akan menggunakan Quartus II, versi gratis yang dapat Anda temukan di situs web produsen (Altera), baik dalam versi Windows maupun Linux.

Dan sekarang kita hampir berlatih! Kami meluncurkan sistem CAD Quartus II dan membuat proyek. Langkah pertama wizard adalah menunjukkan nama proyek dan lokasinya, lalu lewati langkah menambahkan file (kita punya waktu nanti). Kami akan menyelesaikan pembuatan proyek pada tahap pemilihan perangkat; jika kami melakukannya pada perangkat keras, kami tahu persis nama FPGA, dan kami memilihnya. Jika kami hanya membuat proyek untuk FPGA, kami akan memilih sesuatu yang lebih kuat, misalnya siklon ketiga. Saya memilih FPGA yang terpasang di starter kit saya.

Klik Selesai - proyek dibuat. Struktur proyek di Quartus bersifat hierarkis, kita perlu memilih hierarki teratas (Entitas Tingkat Atas). Untuk desainnya, kita dapat menggunakan file rangkaian dan file dengan deskripsi logika dalam salah satu HDL (Hardware Description Language). Pendapat saya adalah cara yang paling jelas adalah dengan menggunakan file sirkuit dengan blok logika utama sebagai puncak hierarki, dan mengimplementasikan blok itu sendiri dalam HDL. Pendapat mungkin berbeda, ketika saya memilih, saya membaca banyak topik holivar, tetapi untuk saat ini saya memilih model ini, Anda dapat menentukan pilihan. Saya memilih VHDL ((Sirkuit terpadu berkecepatan sangat tinggi) Bahasa Deskripsi Perangkat Keras) sebagai bahasa HDL untuk proyek tersebut; Anda dapat menggunakan bahasa lain, misalnya Verilog atau AHDL, semuanya tergantung pada preferensi Anda.

Buat file proyek pertama kita (File – New..) dan pilih Block Diagram/Schematic File. Sekarang mari kita menggambar skema paling sederhana, tambahkan satu Input, satu Output dan sambungkan keduanya (dalam FPGA nyata, rangkaian ini akan mengirimkan sinyal dari satu kaki ke kaki lainnya). Untuk melakukan ini, Klik Dua Kali ruang kosong diagram dan dalam dialog Simbol yang terbuka, pilih elemen yang diperlukan.

Kami terhubung begitu saja, dengan sebuah garis. Mari beri nama pin (Klik Dua Kali pada elemen), inputnya akan disebut CLOCK_27, dan outputnya akan disebut LEDR. Nama-nama tersebut tidak dipilih secara kebetulan - saya kemudian mengaitkan CLOCK_27 dengan input osilator 27Mhz, dan LEDR dengan LED merah nol. Simpan file, biarkan kotak centang tambahkan ke proyek. Sekarang mari kita atur file yang dihasilkan sebagai bagian atas hierarki proyek. Untuk melakukan ini, jendela Project Navigator, di tab File, di menu konteks dari file kita, pilih Set as Top-Level Entity. Halo, dunia sudah siap. Kita kompilasi proyeknya (Processing – Start Compilation), jika kita melihat Info: Quartus II Full Compilation berhasil. – kami bersukacita dan menganggap bahwa tahap pertama telah selesai.

Sekarang mari kita lihat tujuan kita. Perangkat kami akan mulai menghitung menit dan jam saat daya dihidupkan. Artinya kita memerlukan empat indikator tujuh segmen “HH:MM”. Untuk menghitung waktu kita memerlukan sinyal 1Hz yang kurang lebih akurat. Kita mendapatkannya dengan membagi frekuensi 27Mhz, lalu kita hitung dengan 60 (detik), lalu 60 (menit), lalu 24 (jam). Dari dua blok terakhir bilangan biner menit dan jam akan dikirim ke decoder Bin -> BCD (desimal berkode biner) -> 7seg. Secara umum, itulah keseluruhan perangkat. Saya akan segera membuat reservasi bahwa rangkaian akan menjadi asynchronous (Menit dimulai dari detik, dan jam dari menit), untuk kesederhanaan dan kejelasan.

Jadi, mari kita buat blok pertama kita - blok pembagian frekuensi. Ayo berkreasi berkas baru, seperti yang sudah kita ketahui, hanya jenis filenya saja yang berupa File VHDL. Mari tempelkan kode ke dalamnya:

Perpustakaan yaitu;
gunakan ieee.std_logic_1164.all;

Entitas Div_27Mhz_to_1Hz adalah
port(clk:dalam std_logic; clk_out:keluar std_logic);
akhir Div_27Mhz_to_1Hz;

Arsitektur div_behavior dari Div_27Mhz_to_1Hz adalah
mulai
proses (clk)
variabel cnt: rentang bilangan bulat 0 hingga 27000000;
mulai
Kemudian

Jika(cnt >= 13500000)
Kemudian
clk_out<= "1";
kalau tidak
clk_out<= "0";
berakhir jika;

Jika(cnt = 27000000)
Kemudian
tidak:= 0;
kalau tidak
tidak:= tidak + 1;
berakhir jika;

Berakhir jika;
proses akhir;
akhir div_behavior;

Saya akan melewatkan arahan layanan (Anda dapat mencarinya di buku referensi, tautan di akhir), saya hanya akan memperhatikan logika pekerjaan. Pertama kita mendeklarasikan entitas, mis. blok itu sendiri. Kami menunjukkan masukan dan keluarannya, jenis dan namanya. Tipe std_logic dalam bahasa umum berarti bit. Selanjutnya, kami menjelaskan arsitektur internal blok ini. Arsitekturnya terdiri dari proses paralel. Setiap proses memiliki daftar sensitivitasnya masing-masing, misalnya satu-satunya proses pada contoh di atas yang sensitif terhadap perubahan input clk. Anda dapat mendeklarasikan variabel untuk suatu proses, dalam contoh kita ini adalah variabel bertipe bilangan bulat dengan rentang 0 hingga 27.000.000. Selanjutnya, logika dasar diatur dalam badan proses: hingga setengah periode berlalu, kita memasukkan logika nol ke dalam outputnya, ketika setengahnya sudah lewat, kita pencet satu, dan jangan lupa menghitung dan mereset penghitung ke nol ketika sudah mencapai 27.000.000 Saya tidak berpura-pura memiliki kode yang sempurna - saya masih belajar, saya akan senang atas koreksinya :)

Kami menyimpan file dengan kode dan membuat simbol (File – Buat/Perbarui – Buat File Simbol Untuk File Saat Ini), ini diperlukan untuk memasukkan blok ini ke dalam diagram utama kami. Anda dapat menemukan simbol Anda di folder Proyek dalam dialog sisipkan simbol. Sekarang mari kita membahas blok yang tersisa dengan lebih sedikit detail.

Perpustakaan yaitu;
gunakan ieee.std_logic_1164.all;
gunakan ieee.std_logic_unsigned.all;

Entitas cnt_0_to_59 adalah
port(clk:di std_logic; c59:keluar std_logic; vektor:keluar std_logic_vector(5 turun ke 0));
akhir cnt_0_to_59;

Arsitektur cnt_behavior dari cnt_0_to_59 adalah
mulai
proses (clk)
variabel cnt: rentang bilangan bulat 0 hingga 59;
mulai
if(clk"acara dan clk = "1")
Kemudian
jika(cnt = 59)
Kemudian
tidak:= 0;
c59<= "1";
vektor<= CONV_STD_LOGIC_VECTOR(cnt, 6);
kalau tidak
tidak:= tidak + 1;
c59<= "0";
vektor<= CONV_STD_LOGIC_VECTOR(cnt, 6);
berakhir jika;
berakhir jika;
proses akhir;
akhir cnt_behavior;

Ini adalah blok penghitungan dari nol hingga 59 yang kita gunakan untuk menghitung menit dan detik. Di antara fitur-fitur baru di sini adalah tipe keluaran std_logic_vector(5 hingga 0), yang mendefinisikan sekelompok bit (bit vektor), serta fungsi CONV_STD_LOGIC_VECTOR(cnt, 6), yang mengubah variabel menjadi vektor bit dari nilai yang ditentukan panjang.

Perpustakaan yaitu;
gunakan ieee.std_logic_1164.all;
gunakan ieee.std_logic_unsigned.all;

Untuk CONV_STD_LOGIC_VECTOR:
gunakan ieee.std_logic_arith.all;

Entitas cnt_0_to_23 adalah
port(clk:dalam std_logic; vektor:keluar std_logic_vector(4 hingga 0));
akhir cnt_0_to_23;

Arsitektur cnt_behavior dari cnt_0_to_23 adalah
mulai
proses (clk)
variabel cnt: rentang bilangan bulat 0 hingga 23;
mulai
if(clk"acara dan clk = "1")
Kemudian
jika(cnt = 23)
Kemudian
tidak:= 0;
vektor<= CONV_STD_LOGIC_VECTOR(cnt, 5);
kalau tidak
tidak:= tidak + 1;
vektor<= CONV_STD_LOGIC_VECTOR(cnt, 5);
berakhir jika;
berakhir jika;
proses akhir;
akhir cnt_behavior;

Di atas adalah penghitung jam. Tidak ada yang baru.

Perpustakaan yaitu;
gunakan ieee.std_logic_1164.all;
gunakan ieee.std_logic_unsigned.all;

Untuk CONV_STD_LOGIC_VECTOR:
gunakan ieee.std_logic_arith.all;

Entitas bin2bcd_5bit adalah
port(bin:di std_logic_vector(4 turun ke 0);
bcd1:keluar std_logic_vector(3 turun menjadi 0);
bcd10:keluar std_logic_vector(3 turun ke 0)
);

Akhiri bin2bcd_5bit;

Arsitektur converter_behavior dari bin2bcd_5bit adalah
mulai
proses(tempat sampah)
variabel i: rentang bilangan bulat 0 hingga 23;
variabel i1: rentang bilangan bulat 0 hingga 9;
mulai
saya:= konv_integer(bin);
i1:= saya / 10;
bcd10<= CONV_STD_LOGIC_VECTOR(i1, 4);
i1:= saya ingat 10;
bcd1<= CONV_STD_LOGIC_VECTOR(i1, 4);
proses akhir;
akhir converter_behavior;

Konverter Biner ke BCD pada dasarnya hanya membagi satu bilangan biner menjadi dua, masing-masing mewakili tempat desimal. Di antara fitur-fitur baru adalah operator rem, sisa pembagian. Konverter enam bit ditulis dengan cara yang sama, saya tidak akan memberikannya di sini.

Perpustakaan yaitu;
gunakan ieee.std_logic_1164.all;
gunakan ieee.std_logic_unsigned.all;

Entitas BCD_to_7seg adalah
pelabuhan(
BCD:di std_logic_vector(3 turun ke 0);
seg:keluar std_logic_vector(6 turun ke 0)
);

Akhiri BCD_to_7seg;

Konv_perilaku arsitektur BCD_to_7seg adalah
mulai
proses (BCD)
mulai
jika BCD = "0000" maka seg<= "0000001";--0
elsif BCD = "0001" lalu seg<= "1001111";--1
elsif BCD = "0010" lalu seg<= "0010010";--2
elsif BCD = "0011" lalu seg<= "0000110";--3
elsif BCD = "0100" lalu seg<= "1001100";--4
elsif BCD = "0101" lalu seg<= "0100100";--5
elsif BCD = "0110" lalu seg<= "0100000";--6
elsif BCD = "0111" lalu seg<= "0001111";--7
elsif BCD = "1000" lalu seg<= "0000000";--8
elsif BCD = "1001" lalu seg<= "0000100";--9
segmen lainnya<= "1001001";--err
berakhir jika;
proses akhir;
akhir konv_perilaku;

Konverter kode satu bit ke tujuh segmen diimplementasikan dengan tabel kebenaran sederhana. Kode tujuh segmen itu sendiri merupakan representasi bit dari segmen yang terbakar pada indikator dengan urutan abcdefg, dalam kasus saya juga kebalikannya.

Sirkuit terpadu logika yang dapat diprogram (FPGA, Bahasa inggris perangkat logika yang dapat diprogram, PLD) adalah komponen elektronik yang digunakan untuk membuat sirkuit terpadu digital. Berbeda dengan sirkuit mikro digital konvensional, logika operasi FPGA tidak ditentukan selama pembuatan, tetapi ditentukan melalui pemrograman (desain). Untuk pemrograman, pemrogram dan lingkungan debugging digunakan untuk mengatur struktur perangkat digital yang diinginkan dalam bentuk diagram sirkuit atau program dalam bahasa deskripsi perangkat keras khusus Verilog, VHDL, AHDL, dll. Alternatif untuk FPGA adalah: matriks dasar kristal yang memerlukan proses produksi pabrik untuk pemrograman; ASIC - LSI khusus yang dibuat khusus (sirkuit terintegrasi skala besar), yang jauh lebih mahal untuk produksi skala kecil dan satu bagian; komputer khusus, prosesor (misalnya, prosesor sinyal digital) atau mikrokontroler, yang, karena cara perangkat lunak mengimplementasikan algoritma, lebih lambat daripada FPGA. Beberapa produsen FPGA menawarkan prosesor lunak untuk FPGA mereka, yang dapat dimodifikasi untuk aplikasi tertentu dan kemudian diintegrasikan ke dalam FPGA. Hal ini memastikan pengurangan ruang pada papan sirkuit tercetak dan menyederhanakan desain FPGA itu sendiri.

Sirkuit terpadu logika yang dapat diprogram (FPGA) muncul satu setengah dekade yang lalu sebagai alternatif dari rangkaian gerbang yang dapat diprogram (PLA). FPGA berbeda dari yang terbaru baik dalam arsitektur dan teknologi manufaktur.

PLM adalah matriks elemen logika multi-input (beberapa puluh input) dengan flip-flop, di mana penyusun satuan bentuk normal fungsi disjungtif dari elemen-elemen tersebut diprogram oleh jumper. Pada awalnya jumper dibuat dalam bentuk konduktor tipis yang menyatu. Sekarang jumper dibuat dalam bentuk MOSFET gerbang mengambang, seperti pada ROM yang dapat diprogram ulang secara elektrik, yaitu. PLM diproduksi menggunakan teknologi memori flash. PLD besar (CPLD) hanya berbeda karena beberapa PLD dirakit pada satu chip dan disatukan oleh bidang koneksi yang dapat diprogram.

FPGA adalah matriks elemen logika input rendah (dari dua hingga lima input), flip-flop, dan bagian jalur komunikasi yang dihubungkan oleh jumper yang terbuat dari transistor efek medan. Dilihat dari nama bahasa Inggrisnya - Field Programmable Gate Array (FPGA) - FPGA diprogram dengan mengubah tingkat medan listrik (field) di gerbang transistor ini. Berbeda dengan, misalnya, LPGA - Laser Programmable Gate Array. Gerbang semua transistor efek medan "pemrograman" dihubungkan ke output pemicu dari satu register geser panjang, yang diisi ketika FPGA diprogram. Beberapa bagian register ini juga dapat berfungsi sebagai sel ROM.

Firmware biasanya disimpan dalam ROM di sebelah FPGA dan setelah dinyalakan atau sinyal reset, secara otomatis ditulis ke register geser pemrograman FPGA. Proses ini disebut konfigurasi FPGA. Karena FPGA didasarkan pada sandal jepit yang menyimpan firmware, FPGA diproduksi menggunakan teknologi chip RAM statis.

Dibandingkan dengan CPLD, FPGA mendapat keuntungan, pertama, dalam jumlah pemrograman ulang yang tidak terbatas, kedua, dalam kapasitas logis, termasuk kapasitansi spesifik persen gerbang, dan ketiga, dalam konsumsi daya yang rendah.

Sebagai aturan, FPGA memiliki kapasitas dua hingga tiga kali lipat lebih besar dalam jumlah gerbang logika yang setara dibandingkan CPLD dan, seperti RAM statis, hampir tidak mengonsumsi energi tanpa adanya peralihan. Selain itu, FPGA memiliki tingkat keandalan yang lebih tinggi (tingkat kegagalan lebih rendah) dibandingkan CPLD.

Kekurangannya termasuk kebutuhan akan ROM firmware eksternal dan generator jam. Namun ROM 8-pin memakan ruang yang jauh lebih sedikit di papan dibandingkan FPGA itu sendiri dengan ratusan pin. Hal yang sama berlaku untuk generator sinkronisasi. pemrograman elektronik terintegrasi

Pengguna memiliki banyak keraguan dalam melindungi proyek dari penyalinan. Memang, firmware FPGA disimpan dalam ROM eksternal, yang isinya hanya disalin. Tetapi mengubah atau mendekripsi firmware, misalnya, untuk menyembunyikan pembuatnya atau memulihkan sirkuit, hampir tidak mungkin, karena semantik bit dalam file firmware adalah rahasia perusahaan, dan perubahan yang ceroboh dapat merusak FPGA. Jika perlindungan diperlukan, program dimuat menggunakan CPLD eksternal, mesin yang memberikan perlindungan untuk proyek tersebut. FPGA generasi baru menyediakan enkripsi firmware, misalnya, menggunakan enkripsi DES bawaan, memastikan bahwa kunci disimpan menggunakan baterai.

Sirkuit terpadu logika yang dapat diprogram (FPGA) adalah salah satu elemen sirkuit digital yang paling menjanjikan. FPGA adalah sebuah chip yang berisi sejumlah besar elemen logika sederhana. Awalnya, elemen-elemen ini tidak terhubung satu sama lain. Sambungan elemen (transformasi elemen yang berbeda menjadi rangkaian listrik) dilakukan dengan menggunakan kunci elektronik yang terletak di kristal yang sama. Kunci elektronik dikendalikan oleh memori khusus, yang selnya berisi kode konfigurasi sirkuit digital. Jadi, dengan menulis kode tertentu ke dalam memori FPGA, Anda dapat merakit perangkat digital dengan tingkat kerumitan apa pun (ini tergantung pada jumlah elemen pada chip dan parameter FPGA). Tidak seperti mikroprosesor, FPGA dapat mengatur algoritma pemrosesan digital pada tingkat perangkat keras (sirkuit). Pada saat yang sama, kecepatan pemrosesan digital meningkat tajam. Keunggulan teknologi perancangan perangkat berbasis FPGA adalah:

  • · waktu pengembangan sirkuit minimal (Anda hanya perlu memasukkan kode konfigurasi ke dalam memori FPGA);
  • · tidak seperti elemen sirkuit digital konvensional, tidak perlu mengembangkan dan memproduksi papan sirkuit cetak yang rumit;
  • · konversi cepat dari satu konfigurasi rangkaian digital ke konfigurasi lainnya (mengganti kode konfigurasi rangkaian di memori);
  • · Produksi teknologi yang kompleks tidak diperlukan untuk membuat perangkat berdasarkan FPGA. FPGA dikonfigurasi menggunakan komputer pribadi di meja pengembang. Itu sebabnya teknologi ini terkadang disebut “pabrik di atas meja”.

Aplikasi umum untuk FPGA mencakup pemrosesan sinyal digital, elektronik konsumen, sistem akuisisi data, sistem kontrol, peralatan telekomunikasi, peralatan komunikasi nirkabel, dan peralatan komputer keperluan umum.

Dalam upaya mencapai karakteristik teknis yang tinggi dan kualitas konsumen dari produknya, pengembang perangkat elektronik menggunakan sirkuit terpadu khusus (SIS). Penggunaannya memberikan keuntungan sebagai berikut:

  • - pengurangan dimensi perangkat. Penggunaan FPGA memungkinkan untuk mengurangi jumlah IC, mengurangi ukuran papan sirkuit tercetak dan dengan demikian mengurangi dimensi keseluruhan perangkat;
  • - peningkatan karakteristik teknis. Mengurangi jumlah IC menyebabkan peningkatan kinerja sistem dan pengurangan konsumsi daya;
  • - meningkatkan keandalan. Karena kemungkinan kesalahan atau kegagalan perangkat berbanding lurus dengan jumlah IC, keandalan perangkat yang menggunakan FPIC meningkat secara signifikan;
  • - memastikan perlindungan pembangunan. Karena jauh lebih sulit (dan terkadang hampir tidak mungkin) untuk menyalin perangkat yang berisi FPIC dibandingkan perangkat yang menggunakan komponen standar, penggunaan FPIC memungkinkan untuk memastikan hak cipta pengembang;
  • - Meningkatkan fleksibilitas modifikasi. Karena modifikasi SIS, sebagai suatu peraturan, tidak memerlukan pemrosesan komponen lain, perutean ulang papan sirkuit tercetak, dll., kemungkinan debugging dan modifikasi perangkat meningkat secara signifikan.

Dalam kebanyakan kasus, kelas ASIC berikut dibedakan dalam literatur:

  • - IC yang dapat diprogram pengguna - FPGA (PLD).
  • - IC yang dapat diprogram masker - kristal matriks dasar (BMK) atau susunan gerbang (Gate Arrays).
  • - IC pada sel standar (Standard Cell).
  • - IC sepenuhnya custom (Full Custom).

FPGA dan BMK termasuk dalam kategori IC semi-kustom, karena topologi dalam sirkuit sebagian dibentuk selama produksi IC itu sendiri, dan sebagian lagi diprogram sesuai dengan kebutuhan konsumen.

SPIS lainnya dibuat khusus, karena Seluruh topologi sirkuit, dengan mempertimbangkan fungsi yang diperlukan, dikembangkan selama pembuatan chip.

Klasifikasi FPGA ditunjukkan pada gambar, dari mana Anda dapat melihat arah dan bagian FPGA mana yang ditempati FPGA:

Klasifikasi SPIS

Saya terpaksa menulis artikel ini oleh rekan-rekan saya yang memahami pengontrol dengan sangat baik (jauh lebih baik dari saya) dan menggunakannya kemana pun mereka pergi. Namun, ada sejumlah besar aplikasi di mana penggunaan FPGA tidak hanya dibenarkan, namun juga mengarah pada penyederhanaan sistem dan peningkatan parameternya secara signifikan. Saya akan segera membuat reservasi: dalam artikel ini dan, mungkin, artikel berikutnya, saya menganggap FPGA hanya dari Xilinx, bukan karena mereka membayar saya, dan bahkan bukan karena mereka yang terbaik, hanya saja secara historis saya bekerja hampir secara eksklusif dengan mereka .

Jadi mari kita mulai dengan sedikit teori. FPGA dibagi menjadi dua kelompok utama: CPLD (Complex Programmed Logic Device) dan FPGA (Field Programmed Gate Array). CPLD- ini biasanya merupakan FPGA dari kelas "ekonomi", mis. memiliki harga yang rendah dan jumlah sumber daya yang sedikit, hal ini terutama terlihat pada pemicunya. FPGA biasanya lebih mahal, mengandung lebih banyak sumber daya (logika sederhana - pemicu...) dan, yang paling penting, baru-baru ini tambahan blok "kompleks", seperti pengganda, memori blok, perangkat keras antarmuka (Ethernet, PCI-express...) dan bahkan PowerPC inti prosesor. Secara terpisah, kita dapat menyebutkan seri Zinq dari Xilinx - mereka biasanya memasukkan inti ARM di sana. Perbedaan utama antara FPGA dan CPLD adalah kebutuhan untuk memuat konfigurasi saat daya dihidupkan dan, karenanya, ROM eksternal dengan konfigurasi tersebut. Bahkan keluarga SPARTAN-3AN memiliki ROM bawaan, tempat ia melakukan booting.

Sekarang yang paling penting: apa perbedaan FPGA dengan pengontrol dan kapan menggunakannya. Semuanya cukup sederhana di sini: FPGA (kami mengambil yang tanpa bel dan peluit) sebenarnya adalah sekantong logika dalam satu chip, yang dapat dihubungkan secara sewenang-wenang: pemicu yang sama, AND, OR dan primitif serupa, seperti, misalnya , di seri K155 atau 74NS. Pengontrol adalah prosesor yang sudah jadi (walaupun dengan jumlah perintah yang sedikit), memori internal, bus data dan perintah, periferal, dll. Secara umum, Anda dapat membuat pengontrol kecil dari FPGA besar, tetapi setidaknya ide ini bodoh. Jadi, pengontrol dirancang untuk menjalankan perintah yang panjang, mengulanginya secara siklis, beralih dari satu rantai ke rantai lainnya, dll., dan FPGA dirancang untuk melakukan operasi logis sederhana dan, yang penting, sejumlah besar sekaligus (dan bahkan pada saat yang sama). frekuensi jam yang berbeda).

Mari beralih dari teori ke praktik. Untuk memulainya, kita memerlukan semacam chip CPLD. Sumber dayanya sedikit, tetapi cukup untuk pembangunan. Saya akan mengambil XC95288XL dalam case TQ144 (sekali lagi, kebetulan ada stok), secara umum saya sarankan mengambil sesuatu yang lebih segar, misalnya dari seri CoolRunner 2. Untuk mendapatkan produk jadi (meskipun LED berkedip minimal), kita perlu: menyolder perangkat keras (di sini, saya harap, tidak akan ada masalah, tetapi saya akan menyebutkan nuansanya), "menulis" firmware ( dalam kasus kami, lebih baik menggambarnya) dan mem-flash firmware ke dalam sirkuit mikro. Secara umum kita memerlukan software yang menghasilkan firmware dan programmer. Kami mengunduh perangkat lunak (Xilinx ISE Webpack) dari situs resminya (walaupun mereka akan meminta Anda untuk mendaftar), lisensi Webpack gratis. Pemrogram dapat dibuat sesuai dengan skema pada Gambar 1 (untuk port LPT) atau Anda dapat membeli USB pabrik (saya menemukannya di toko online Cina dengan harga sekitar $50, tetapi saya tidak membelinya sendiri). Lagi.

Beras. 1

Setelah kami menyolder FPGA ke papan tempat memotong roti, menyolder atau membeli programmer, mengunduh dan menginstal paket ISE Webpack (saya memiliki versi 13.2), meluncurkan Project Navigator dan membuat proyek baru. Untuk membuat proyek, pilih File -> Proyek Baru, tentukan nama proyek dan tempat menyimpannya, serta tentukan jenis sumber TOP-LEVEL (Gbr. 2). Faktanya adalah bahwa untuk FPGA tidak perlu menggambar diagram flip-flop dan koneksinya, Anda dapat, misalnya, menulis dalam bahasa tingkat tinggi (VHDL, Verilog) dan sama sekali tidak perlu; menggunakan satu hal dalam proyek yang sama. Untuk saat ini, kami hanya menggunakan Skema di semua level.


Beras. 2
(gambar dapat diklik untuk memperbesar, terbuka di jendela baru)

Di jendela berikutnya (Gbr. 3) kami memilih sirkuit mikro kami (kami tidak menyentuh sisanya terlebih dahulu); Di jendela yang muncul setelah mengklik tombol "Berikutnya", kami mengagumi parameter proyek yang dibuat, klik "Selesai" - dan selesai: proyek telah dibuat.


Beras. 3

Sekarang kita perlu menggambar diagram: klik kanan pada jendela dengan proyek dan sumber baru (Gambar 4), beri nama sumber ini (ini adalah nama skema kita, mungkin ada banyak di antaranya proyek), pilih Skema lagi, klik "Berikutnya" ", kagumi parameter file yang baru dibuat, klik "Selesai" dan dapatkan diagram yang bersih.


Beras. 4
(gambar dapat diklik untuk memperbesar, terbuka di jendela baru)

Bagian yang paling menarik dimulai: pada panel di sebelah kiri (bukan di bagian paling tepi) klik tombol “tambah simbol” (Gbr. 5).


Beras. 5
(gambar dapat diklik untuk memperbesar, terbuka di jendela baru)

Dan kita mendapatkan daftar simbol perpustakaan saat ini lebih jauh ke kiri. Kita akan mengetahui cara menambahkan, membuat, dan mengedit perpustakaan nanti (sesuai kebutuhan). Sekarang penting bagi kita untuk memilih simbol yang diperlukan. Jadi di jendela atas kita melihat pengklasifikasi tertentu - filter, yang tidak perlu digunakan (yah, mengapa menelusuri semua jenis pemicu dan elemen logis ketika kita membutuhkan penghitung).

Misalnya, pertimbangkan tugas berikut: Anda perlu menentukan waktu tunda seakurat mungkin antara tepi depan 2 pulsa yang muncul pada kabel berbeda, dan menggabungkan nilai ini ke pengontrol melalui antarmuka SPI. Kesamaan antara tugas dan topik “Meningkatkan frekuensi operasi mikrokontroler” di salah satu forum robotika adalah disengaja. Jadi pada input perangkat terdapat 2 kabel untuk pulsa dan 3 kabel untuk pengontrol SPI. Kami menambahkan input jam lain (kami belum tahu frekuensinya berapa, kami hanya dapat berasumsi setidaknya 70 MHz). Mari kita mulai menggambar firmware: kita memerlukan pemicu terkunci yang akan "menangkap" pulsa, penghitung waktu, register geser (tidak perlu membuatnya, itu adalah perpustakaan). Saya tidak akan menjelaskan apa itu trigger dan counter, saya harap pembaca “tahu” dan tidak akan ada masalah, kalau tidak saya harus menulis beberapa artikel lagi. Kami mendapatkan diagram ini (Gbr. 6), seperti yang Anda lihat, tidak perlu menarik kabel dari output simbol ke input, cukup memberi label pada rangkaian. Untuk menentukan input dan output eksternal, gunakan tombol "Tambahkan Penanda I/O".


Beras. 6
(gambar dapat diklik untuk memperbesar, terbuka di jendela baru)

Ketika diagram sudah siap, buka tab Desain, dan klik dua kali pada Implementasi Desain - segala macam proses dimulai (untuk memulai, tidak masalah yang mana - yang utama adalah semuanya adalah proses penyulingan kode sumber ke dalam firmware). Ketika semuanya berfungsi, kami melihat kesalahan dengan peringatan: kami memperbaiki semua yang penting, dan meninggalkan sisanya. Misalnya, kita tidak memerlukan keluaran CEO dan TC dari pencacah dan 15 bit sisa keluaran paralel register geser juga tidak diperlukan, tetapi mereka bersumpah dengan peringatan. Jika dia bersumpah dengan kesalahan atas apa yang kita inginkan, berarti kita menginginkan sesuatu yang salah. Jika kami (dan synthesizer) puas dengan semuanya, kami terus mengagumi laporannya: berapa banyak sumber daya yang telah digunakan, berapa frekuensi clock yang tersedia... Jika semuanya baik-baik saja lagi, maka inilah saatnya untuk mensimulasikan rangkaian dan memastikan bahwa itu benar-benar berfungsi sesuai tugas. Saya sarankan melakukan simulasi setelah memeriksa timing karena terkadang untuk mendapatkan frekuensi clock yang diperlukan Anda harus menggoyang seluruh rangkaian, yang tentu saja dapat mempengaruhi hasilnya...

Jadi, simulasi: pada tab Desain (di panel kiri) pilih simulasi (Gbr. 7).


Beras. 7
(gambar dapat diklik untuk memperbesar, terbuka di jendela baru)

Di bawah, dalam proses, alih-alih proses sintesis dan pengkabelan, proses Simulasikan Model Perilaku telah muncul, klik dua kali di atasnya - simulator diluncurkan, di mana kita melihat sinyal kita (tidak hanya input-output, tetapi juga perantara) (Gbr. 8).


Beras. 8
(gambar dapat diklik untuk memperbesar, terbuka di jendela baru)

Kami mengarahkan kursor mouse ke tombol dan membaca komentar pada tombol. Kami mengatur waktu langkah simulasi (Gbr. 9) dan nilai awal sinyal input, dan segera mengatur sinyal jam (kami tidak akan mensimulasikan dan mengganti jam setiap 5 ns).


Beras. 9
(gambar dapat diklik untuk memperbesar, terbuka di jendela baru)

Melangkah dalam waktu dengan memanipulasi input dan (jika perlu) langkah simulasi, kita memperoleh diagram waktu (Gbr. 10).


Beras. 10
(gambar dapat diklik untuk memperbesar, terbuka di jendela baru)

Kami memastikan bahwa semuanya berfungsi sebagaimana mestinya (atau men-debug sirkuit lebih lanjut), dan melanjutkan ke langkah berikutnya - mendistribusikan output dan input ke seluruh pin sirkuit mikro. Untuk melakukan ini, tambahkan file sumber lain (Gbr. 11), yaitu File Kendala Implementasi.


Beras. 11
(gambar dapat diklik untuk memperbesar, terbuka di jendela baru)

Kami menuliskan "pinout dari sirkuit mikro" (Gbr. 12), dan di sini kami juga menuliskan persyaratan untuk frekuensi clock. Dan sekarang kita sampai pada nuansa yang terkait dengan sinyal jam. Faktanya adalah bahwa sinyal jam harus tiba pada apa yang disebut jalur global - jalur yang melewati seluruh sirkuit mikro, jalur yang tersisa bersifat lokal dan melewati logika peralihan dari blok ke blok. Chip XC95288XL dalam paket TQ144 memiliki 3 jalur seperti itu, dan terhubung ke kaki 30, 32, 38. Sinyal yang tersisa dapat dihubungkan ke kaki input/output (I/O).


Beras. 12
(gambar dapat diklik untuk memperbesar, terbuka di jendela baru)

Klik dua kali Implement Design lagi, tunggu, baca komentar tentang topik peringatan dengan kesalahan dan buka laporan tentang pinout (Gbr. 13) dan timing (Gbr. 14); Kami memastikan semuanya sesuai dengan kami, dan kami mendapatkan kebahagiaan dalam bentuk file %project_name%.jed.


Beras. 13
(gambar dapat diklik untuk memperbesar, terbuka di jendela baru)


Beras. 14
(gambar dapat diklik untuk memperbesar, terbuka di jendela baru)

File firmware sudah siap. Katakanlah perangkatnya juga. Kami menghubungkan kabel JTAG ke komputer dan klik dua kali pada Configure Target Device. Utilitas firmware (Impact.exe) akan dimulai; pada kenyataannya, ketika membuat beberapa perangkat untuk mem-flash serangkaian, Anda dapat membatasi diri untuk meluncurkan hanya satu. Kami membuat proyek baru (ini adalah proyek untuk program firmware), mengizinkannya menemukan pemrogram dan chip yang terhubung secara otomatis, menampilkan file firmware dan klik Program. Kami menunggu beberapa puluh detik, kami melihat tulisan yang mengatakan bahwa semuanya baik-baik saja - perangkat sudah siap.

Apakah Anda menunggu tanda? Ini dia!

Selama bertahun-tahun saya ragu untuk memulai pemrograman FPGA karena sulit, mahal dan menyakitkan (menurut saya). Namun ada baiknya jika Anda memiliki teman yang membantu Anda mengambil langkah pertama. Dan sekarang saya tidak mengerti satu hal - MENGAPA SAYA MENUNGGU SANGAT LAMA?

Sekarang saya akan membantu Anda mengambil langkah pertama juga!

Mengapa saya membutuhkannya?

Apakah Anda lelah terus-menerus membaca dokumen di MK atau menyimpan banyak informasi di kepala Anda. Anda menulis ulang semuanya dalam asm, tetapi kecepatannya masih belum cukup. Anda menghubungkan dua perangkat eksternal ke MK Anda, Anda menghubungkan perangkat ketiga, tetapi Anda kehabisan interupsi, modul-modul yang sudah berfungsi berhenti bekerja. Anda mengambil MK lain, yang lebih kuat dari baris yang sama, tetapi sekali lagi manual, register bendera, bit... sial. Anda mengubah platform: Anda beralih ke MK lain dan membuang pengetahuan Anda tentang platform sebelumnya. Apa pun yang Anda lakukan, itu sulit. Anda menemukan platform populer di mana Anda dapat dengan mudah merakit proyek dari komponen, tetapi Anda masih tidak dapat melampaui batasan perangkat keras MK ini... Di suatu tempat di tepi kesadaran Anda terkadang muncul pemikiran bahwa pada FPGA ini pasti akan bekerja dengan cepat dan paralel, apa ini "masalah sebenarnya yang perlu diselesaikan tolong", tapi saya terlalu tua/bodoh/sibuk/dll untuk bisa/mulai melakukan ini.

Apakah Anda akhirnya ingin bernapas lega? Ayo lanjutkan!

Kegembiraan mengembangkan FPGA

Saya mengalami hari yang berat di tempat kerja. Dari satu pekerjaan saya datang ke pekerjaan kedua, lalu ke dacha, pekerjaan rumah, pekerjaan rumah di malam hari, lalu film keluarga, dan baru pada jam 11 malam saya benar-benar bebas! Mengatakan bahwa saya lelah berarti tidak mengatakan apa-apa. Namun dalam keadaan ini, saya duduk di depan laptop dengan tujuan yang kuat: membuat generator gelombang persegi 440 Hz. 20 menit berlalu dan saya sudah bisa mendengarnya di headphone saya. Aku tidak bisa mempercayai telingaku! Saya memerlukan waktu 15 menit lagi untuk membuat PWM dan mengubah volume. Saat itu, saya baru memiliki papan FPGA selama sekitar satu minggu, dan sebelumnya saya hanya membaca beberapa buku tentang Verilog.

Malam itu saya menyadari: INILAH! Ini adalah platform di mana saya dapat dengan cepat dan mudah mengubah pemikiran saya menjadi perangkat keras yang benar-benar berfungsi!

Mengapa demikian?

Saya akan menjelaskan kelebihan yang ada dalam mempelajari dan menggunakan FPGA, walaupun semua orang sudah mengetahuinya:
  • Universalitas pengetahuan- saat mengganti model MK, Anda perlu membaca dokumentasi. Saat mengganti pabrikan MK, Anda perlu membaca dokumentasinya. Anda harus terus-menerus membaca dokumen, terus-menerus menyimpan banyak informasi di kepala Anda. Saat mengembangkan FPGA, jika Anda mengetahui Verilog atau VHDL, maka Anda tidak hanya dapat memprogram FPGA apa pun dari lini satu pabrikan, tetapi juga, jika Anda mau, beralih ke pabrikan lain (Altera, Xilinx). Meskipun akan ada saat-saat ketika menguasai lingkungan pengembangan yang berbeda dan masalah perangkat keras yang tidak kentara, inti dari pendekatan merancang perangkat dalam HDL tidak akan berubah dari ini.
  • Dari ide hingga perangkat keras- saat mengembangkan sebuah proyek, jika Anda kekurangan satu mikrokontroler, Anda harus memilih yang lain. Pada prinsipnya, Anda dapat membuat asumsi apakah MK ini akan mampu menangani proyek tersebut atau tidak. Atau ada MK tertentu dan Anda mencoba memasukkan proyek ke dalamnya. Hal ini paling sering terjadi. Ini sedikit mengingatkan saya pada pendekatan kakek saya, yang membuat tangga dari apa yang ada di dalam gudang. Meskipun Anda bisa mendesain tangga, belilah papan yang sesuai... Dari ide hingga perangkat keras, dan bukan sebaliknya.
  • Kemudahan penggunaan pengembangan orang lain- Anda dapat mengambil modul orang lain dan menerapkannya dalam proyek Anda. Anda dapat memahami dari kode cara kerjanya. Meskipun itu untuk Xilinx, dan Anda melakukannya di bawah altera. Terkadang hal ini tidak berjalan dengan baik, namun lebih mudah daripada, misalnya, menambahkan pustaka biner ke proyek C++/Qt
  • Blokir independensi. Blok dalam HDL seperti fungsi murni dalam bahasa. Mereka hanya bergantung pada sinyal input. Modul yang dikembangkan dan di-debug akan terus berfungsi dengan benar, tidak peduli bagaimana proyek berkembang. Tidak ada sesuatu pun dari luar yang akan mempengaruhi pengoperasian yang benar dari dalam. Dan secara umum, Anda bisa melupakan cara kerjanya - ini adalah kotak hitam. Ditambah lagi, bloknya berfungsi paralel.

Masalah pilihan

Ada banyak pertanyaan tentang apa yang harus dipilih: Altera/Xilinx, Verilog/VHDL, papan debug apa yang harus digunakan. Tapi hal pertama yang pertama.

Pabrikan

saya memilih mengubah. Mengapa? Nah, begitulah saya dan teman saya memutuskan, meskipun nama Xilinx lebih indah bagi saya. TETAPI. Jika kamu tidak dapat memilih sekarang, maka aku akan melakukannya untukmu. Anda membutuhkan Altera! Mengapa? Aku tidak tahu. Hal terpenting saat ini adalah mengambil langkah: menentukan pilihan. Saya memilih Altera dan sejauh ini tidak menyesal.



Bahasa

Mari kita ambil Verilog - Karena... baiklah, Anda mengerti maksudnya.

Papan pengembangan

Memilih papan pengembangan memakan waktu paling lama. Jelas bahwa papan berbeda dalam chip FPGA yang dipasang. Dan chip FPGA berbeda satu sama lain dalam jumlah elemen. Namun sama sekali tidak jelas berapa banyak yang diperlukan untuk proyek pengujian Anda. Oleh karena itu, saya menghabiskan sebagian besar waktu saya mencari semua jenis proyek FPGA untuk mengetahui seberapa banyak proyek tersebut mengonsumsi sumber daya FPGA.

Di keluarga Altera, dengan harga terjangkau kita dapat membeli papan dengan CPLD MAX II dengan elemen 240, 570 dan 1270, atau chip FPGA lama seperti Cyclone 1, 2, 3, 4 dengan hingga 10.000 sel atau lebih. Bagaimana cara memilih?

Bahkan berdasarkan 240 sel, proyek Mars Rover hanya mengerjakan sejumlah besar proyek. Saya sangat menyarankan Anda membacanya untuk mendapatkan gambaran kasar tentang kompleksitas proyek yang dapat ditampung dalam 240 sel. Di sisi lain, ada proyek yang sepenuhnya diprogram untuk salinan perangkat keras PC tertentu, termasuk prosesor dan semua logika di sekitarnya (NES, Speccy, Orion, YuT-88, dll). Ini sudah membutuhkan lima, sepuluh ribu sel atau lebih. Ditambah lagi, papan ini berisi perangkat eksternal tambahan.

Oleh karena itu, saya menyarankan untuk mengambil antara 240 dan 10.000 sel, dengan preferensi untuk sel yang lebih besar tergantung pada dana yang tersedia. Di papan debug, sel tambahan tidak menjadi masalah, tetapi jika jumlahnya tidak cukup, tidak ada yang bisa dilakukan. Kemudian, ketika perangkat di-debug, akan menjadi jelas berapa banyak sel yang dibutuhkan, beli dalam jumlah yang dibutuhkan, tanpa “body kit” yang tidak perlu, lebih murah dan biarkan di perangkat yang sudah jadi.

Yang membedakan MAX dengan Cyclones selain jumlah selnya adalah:
1) Seri MAX tidak memiliki PLL di dalamnya. Setiap papan pengembangan memiliki osilator, biasanya 50 MHz. Ini akan cukup untuk sebagian besar proyek. Semua sinkronisasi akan terjadi dengan membagi 50 MHz dengan nilai tertentu. Atau, Anda dapat mengambil generator eksternal dan memasukkannya ke input FPGA terpisah. Bagaimana jika Anda membutuhkan frekuensi lebih tinggi dari 50 MHz? Saya tidak dapat segera menemukan osilator di atas 50 MHz. Namun di sinilah PLL, yang dibangun dalam Cyclones, hadir untuk menyelamatkan. Di atasnya Anda dapat mengalikan frekuensi, misalnya hingga 100 MHz.
2) Seri Cyclone memiliki unit perkalian perangkat keras bawaan. Jumlahnya tergantung pada model spesifik - di sini Anda masih dapat "melihat instruksi" untuk mengetahui jumlahnya. Jika Anda berencana membuat semacam DSP, maka itu akan berguna: mereka akan menghemat sel dan meningkatkan kecepatan. Di sisi lain, jika tidak ada pengganda, mereka dapat disintesis, namun FPGA kecil mungkin tidak memiliki sumber daya yang cukup untuk ini.

Dalam semua hal lainnya, saya memiliki kriteria “cocok/tidak cocok”. Melakukan debug pada papan yang jelas lebih besar dari yang dibutuhkan, diikuti dengan mengisinya dengan jumlah minimum yang diperlukan untuk ini.

Berapa banyak uang yang Anda butuhkan?


Programmer
Saya yakin saya tidak punya waktu untuk menyolder programmer secara massal.

300 rubel. Saya mendapatkan milik saya di eBay, tampilannya seperti ini:

Papan pengembangan
Pilihannya luas, tergantung jumlah uangnya.

Tingkat masuk 350 - 550 rubel. Ini adalah papan berdasarkan MAX II (atau sel). Mungkin cocok untuk pengenalan awal dan integrasi lebih lanjut ke perangkat akhir. Papan memiliki generator, beberapa tombol, beberapa LED, dan 80 pin sisanya sesuai kebijaksanaan Anda.

satuan daya
Itu harus dimiliki, tetapi tidak selalu disertakan. Anda membutuhkan catu daya 5 volt dan arus 2A.

Tingkat menengah dari 900 hingga 1500 rubel. Ini adalah papan Topan 1, 2, 3, 4, berbeda terutama dalam jumlah sel.
Mereka ditandai seperti ini:
E.P. 2 C 5 T144 - Topan 2 sekitar 5k sel
E.P. 4 M.E. 6 E22C8N - Topan 4 sekitar 6k sel
E.P. 2 C 8 Q208C8N - Topan 2 sekitar 8k sel

Anda mungkin memperhatikan bahwa Topan 3 mungkin memiliki lebih banyak sel daripada Topan 4.

Berikut beberapa opsi:

835 rubel.
ALTERA FPGA CycloneII EP2C5T144 Papan Sistem Minimum untuk Belajar dengan baik

880 rubel
Altera CycloneII EP2C5T144 FPGA Mini Pengembangan Pelajari Papan Inti E081

1265 rubel
EP2C8 EP2C8Q208C8N ALTERA Cyclone II FPGA Papan Inti Pengembangan Evaluasi

Papan tingkat lanjut . Ini adalah papan tempat modul tambahan (UTP, USB, AUDIO), konektor (SD, VGA), tombol, sakelar, LED, indikator tujuh segmen, dll. dipasang. Atau mungkin ada papan dasar, dan kartu ekspansi dapat dipasang secara terpisah.

Saya memiliki set papan kerja + papan ekspansi berikut:
Altrea EP4CE10E22 Papan Inti FPGA + Papan Perangkat USB/Suara/Ethernet/Kartu SD/VGA
2760 rubel

Ini papan utamanya. Ini memiliki 2 LED, 2 tombol, 4 sakelar, indikator tujuh segmen dan chip RAM.

Papan ekspansi. Ini berisi SD, VGA, serta pengontrol USB (Chip USB2.0 Kecepatan Tinggi: CY7C68013A), AUDIO (Kartu Suara hingga 96kHz/32bit ADC/DAC: WM8731S), UTP (antarmuka Ethernet 100M: DM9000A):

Papan-papan ini cukup disisipkan satu sama lain, tapi saya masih menyimpannya di laci. Untuk kerajinan saya, saya memiliki papan tempat memotong roti, yang saya sambungkan dengan kabel yang disertakan dengan kit. Catu daya 5 volt juga disertakan.

Ketika sirkuit mikro digital berkembang, kontradiksi muncul antara kemungkinan tingkat integrasi dan jangkauan sirkuit mikro yang diproduksi. Dibenarkan secara ekonomi untuk memproduksi sirkuit mikro terintegrasi menengah, seperti,. Sirkuit yang lebih kompleks harus dibuat dari node-node ini. Tidak ada masalah dalam menempatkan sirkuit yang lebih kompleks pada chip semikonduktor, tetapi hal ini dibenarkan oleh produksi serial peralatan yang sangat besar, atau oleh biaya peralatan (militer, penerbangan, atau luar angkasa). Chip khusus tidak dapat memenuhi kebutuhan yang muncul akan miniaturisasi peralatan. Hanya ada satu solusi - untuk memberi pengembang perangkat keras kemampuan untuk mengubah struktur internal sirkuit mikro (program).

Sejarah perkembangan sirkuit terintegrasi logika terprogram (FPGA) dimulai dengan munculnya perangkat memori read-only yang dapat diprogram. Pada awalnya, ROM yang dapat diprogram digunakan secara eksklusif untuk menyimpan data, tetapi segera mulai digunakan untuk mengimplementasikan perangkat kombinasi digital dengan tabel kebenaran yang berubah-ubah. Kerugian dari solusi ini, perlu diperhatikan bahwa kompleksitas perangkat meningkat secara eksponensial tergantung pada jumlah input. Menambahkan satu input perangkat digital tambahan akan menggandakan jumlah sel memori ROM yang diperlukan. Hal ini tidak memungkinkan penerapan multi-input.

Untuk mengimplementasikan perangkat kombinasi digital dengan sejumlah besar input, programmable logic arrays (PLA) dikembangkan. Dalam literatur asing disebut Programmable Logic Arrays (PLA). Ini adalah susunan logika yang dapat diprogram yang dapat dianggap sebagai sirkuit terintegrasi logika terprogram pertama (Perangkat Logika yang Dapat Diprogram - PLD). PLM tersebar luas sebagai sirkuit mikro integrasi besar universal pertama.

Klasifikasi FPGA

Saat ini, sirkuit terintegrasi logika yang dapat diprogram berkembang ke beberapa arah, sehingga ada kebutuhan untuk membedakan antara sirkuit mikro ini. Klasifikasi sirkuit terintegrasi logika terprogram (FPGA) ditunjukkan pada Gambar 1.


Gambar 1. Klasifikasi sirkuit terpadu logika terprogram (FPGA)
  • Sergei Savenkov

    semacam ulasan "pendek"... seolah-olah mereka sedang terburu-buru di suatu tempat