Daftar Isi:
- Langkah 1: Rancang Sirkuit Yang Akan Diwakili "FPGA"
- Langkah 2: Masukkan FPGA
- Langkah 3: Dari FPGA ke Arduino
- Langkah 4: Dari Arduino ke Chip DIP di Papan Roti
- Langkah 5: Kesimpulan
Video: Arduino Sebagai FPGA Breadboard Murah: 5 Langkah (dengan Gambar)
2024 Pengarang: John Day | [email protected]. Terakhir diubah: 2024-01-30 09:57
Merancang sirkuit logika perangkat keras bisa menyenangkan. Cara lama untuk melakukan ini adalah dengan gerbang NAND, di atas papan roti, dihubungkan dengan kabel jumper. Ini masih mungkin, tetapi tidak perlu banyak sebelum jumlah gerbang keluar dari kendali. Opsi yang lebih baru adalah menggunakan FPGA (Field Programmable Gate Array). Chip ini dapat mengatur ulang sendiri menjadi sirkuit logika digital apa pun yang dapat Anda rancang, tetapi tidak murah dan tersedia. Saya akan menunjukkan bagaimana FPGA ini dapat diganti dengan chip Atmega murah dari Arduino UNO, secara efektif menempatkan sirkuit digital ke dalam paket DIP, yang sangat ramah papan tempat memotong roti.
Langkah 1: Rancang Sirkuit Yang Akan Diwakili "FPGA"
Saya akan membangun penambah 2 bit + 2 bit. Dibutuhkan dua pasang pin input logika, dan mengeluarkan satu triplet pin output.
Untuk melakukan ini dengan gerbang NAND, lihat skema pada gambar. Dibutuhkan 14 gerbang NAND. Saya menggunakan 4 chip TTL gerbang NAND quad, dan memasangnya di papan roti.
Saya menambahkan beberapa LED (jangan lupa resistor pembatas arus) untuk menunjukkan kapan pin input dan output menyala (tinggi), dan ketika mati (rendah). Untuk menggerakkan pin input, saya menghubungkannya ke rel ground atau rel daya positif.
Sirkuit ini berfungsi, tetapi sudah membutuhkan 4 chip TTL, dan merupakan sarang kabel tikus. Jika lebih banyak bit diperlukan, akan ada lebih banyak papan roti, dan lebih banyak jumper. Sangat cepat ukuran sirkuit akan keluar dari tangan.
Di samping catatan, ketika bekerja dengan gerbang TTL, mereka tidak menghasilkan 0V atau 5V persis seperti yang diharapkan. Mereka sering menghasilkan sekitar 3V untuk "tinggi", tetapi tegangan yang tepat berada dalam kisaran yang sangat luas. Sirkuit yang sama menggunakan chip setara CMOS akan memiliki ayunan tepat 0V hingga tepat 5V.
Langkah 2: Masukkan FPGA
FPGA adalah chip yang fantastis, yang benar-benar dapat menjadi kombinasi gerbang logika apa pun, dihubungkan bersama dalam kombinasi apa pun. Seseorang mendesain "sirkuit" dalam bahasa desain perangkat keras (HDL). Ada beberapa bahasa seperti itu, salah satunya disebut Verilog. File.v dalam gambar adalah Verilog yang setara dengan penambah dua bit. File.pch di bawahnya juga diperlukan untuk menetapkan pin input dan output yang disebutkan dalam file verilog ke pin perangkat keras nyata pada chip.
Dalam hal ini saya menggunakan papan pengembangan iCEstick Lattice Semiconductors (https://www.latticesemi.com/icestick). Chip FPGA yang sebenarnya adalah iCE40HX-1k, dengan sedikit lebih dari 1000 gerbang, yang masing-masing dapat menjadi gerbang logika apa pun. Itu berarti setiap gerbang dapat berupa gerbang NAND, atau gerbang OR, gerbang NOT, NOR, XOR, dll. Selain itu, setiap gerbang dapat menangani lebih dari dua input. Ini khusus untuk setiap pabrikan, tetapi pada iCE40 setiap gerbang dapat menangani 4 input. Jadi setiap gerbang jauh lebih mampu daripada 2 gerbang NAND input.
Saya harus menetapkan 4 pin input dan 3 pin output ke pin fisik masing-masing 91, 90, 88, 87, 81, 80, dan 79. Ini khusus untuk chip FPGA dan papan breakout yang ada di dalamnya, dan bagaimana pin tersebut disambungkan ke port PMOD. Ini tersedia di lembar data untuk papan FPGA ini.
Lattice menyediakan rantai alat mereka sendiri untuk mensintesis (setara FPGA dengan kompilasi untuk CPU) sirkuit dari Verilog, tetapi saya menggunakan rantai alat open source gratis icestorm (https://www.clifford.at/icestorm/). Petunjuk penginstalan tersedia di situs tersebut. Dengan icestorm terinstal, dan file verilog dan pcf, perintah untuk memuat sirkuit ini ke FPGA adalah:
yosys -p "synth_ice40 -blif twoBitAdder.v" twoBitAdder.blif
arachne-pnr -d 1k -p iCEstick.pcf twoBitAdder.blif -o twoBitAdder.asc
icepack twoBitAdder.asc twoBitAdder.bin
iceprog twoBitAdder.bin
Ini berfungsi dengan baik, tetapi termasuk pengiriman iCEstick ini akan menelan biaya sekitar $30. Ini bukan cara termurah untuk membangun sirkuit digital, tetapi ini sangat kuat. Ini memiliki lebih dari 1000 gerbang dan untuk sirkuit kecil ini hanya menggunakan 3 gerbang. Setara gerbang NAND menggunakan 14 gerbang. Hal ini disebabkan fakta bahwa setiap gerbang dapat menjadi jenis gerbang apa saja, dan setiap gerbang sebenarnya adalah 4 gerbang masukan. Setiap gerbang bisa berbuat lebih banyak. Jika Anda membutuhkan lebih banyak gerbang, iCEstick memiliki saudara yang lebih besar dengan 8000 gerbang, yang harganya sekitar dua kali lipat. Pabrikan lain memiliki penawaran lain tetapi harganya bisa sangat curam.
Langkah 3: Dari FPGA ke Arduino
FPGA bagus, tetapi bisa mahal, sulit didapat, dan tidak terlalu ramah papan roti. Chip yang ramah papan tempat memotong roti dan murah adalah Atmega 328 P, yang hadir dalam paket DIP yang rapi, sempurna untuk papan tempat memotong roti. Itu juga bisa didapat dengan harga sekitar $4. Ini adalah jantung dari Arduino UNO. Anda tentu saja dapat menggunakan seluruh UNO, tetapi dengan harga murah, kami dapat menarik Atmega 328 P dari UNO, dan menggunakannya sendiri. Saya memang menggunakan papan UNO sebagai programmer untuk Atmega.
Pada titik ini Anda akan membutuhkan
1. Arduino UNO, dengan CPU Atmega 328P yang dapat dilepas.
2. Atmega 328P lain dengan bootloader Arduino yang telah dibakar sebelumnya, untuk menggantikan yang akan kita keluarkan dari UNO. (Opsional dengan asumsi Anda masih ingin memiliki UNO yang bisa digunakan).
Tujuannya adalah untuk mengubah file verilog menjadi proyek arduino yang dapat dimuat ke dalam 328P. Arduino didasarkan pada C++. Mudahnya ada penerjemah dari Verilog ke C++, yang disebut Verilator (https://www.veripool.org/wiki/verilator). Verilator dimaksudkan untuk digunakan oleh perancang perangkat keras yang perlu mensimulasikan desain mereka sebelum memasukkan desain tersebut ke perangkat keras yang mahal. Verilator cross mengkompilasi verilog ke C++, kemudian pengguna menyediakan test harness untuk memberikan sinyal input simulasi dan merekam sinyal output. Kita akan menggunakannya untuk menjejalkan desain Verilog ke dalam Atmega 328P menggunakan rantai alat Arduino.
Instal terlebih dahulu Verilator. Ikuti petunjuk di
Instal juga Arduino IDE, dan uji apakah dapat terhubung ke Arduino UNO melalui USB.
Kami akan menggunakan file Verilog yang sama untuk FPGA, kecuali bahwa nama pin perlu diubah. Saya menambahkan garis bawah (_) ke awal masing-masing. Ini diperlukan karena perpustakaan arduino menyertakan file header yang menerjemahkan hal-hal seperti B0, B001, dll, ke bilangan biner. Nama pin input lainnya akan baik-baik saja, tetapi B0 dan B1 akan menyebabkan build gagal.
Di direktori yang berisi twoBitAdder.v dan iCEstick.pcf, jalankan perintah berikut:
verilator -Dinding --cc twoBitAdder.v
Ini akan membuat subdirektori bernama obj_dir yang berisi beberapa file baru. Kita hanya membutuhkan file header dan cpp, VtwoBitAdder.h, VtwoBitAdder.cpp, VtwoBitAdder_Syms.h, dan VtwoBitAdder_Syms.cpp.
Di Arduino IDE, buat sketsa baru bernama twoBitAdder.ino. Ini akan membuat file ino di direktori baru yang juga disebut twoBitAdder, di dalam direktori sketchbook Arduino Anda. Salin file VtwoBitAdder.h dan VtwoBitAdder.cpp Anda ke folder twoBitAdder ini di folder Arduino Anda.
Sekarang salin file header dari instalasi verilator.
cp /usr/local/share/verilator/include/verilated*.
akhirnya salin di perpustakaan std c++ dari https://github.com/maniacbug/StandardCplusplus. Per instruksi instalasi mereka Ini diinstal seperti perpustakaan Arduino biasa. Buka paket konten distribusi ke folder 'libraries' di bawah buku sketsa Anda. Misalnya, buku sketsa saya ada di /home/maniacbug/Source/Arduino, jadi perpustakaan ini ada di /home/maniacbug/Source/Arduino/libraries/StandardCplusplus.
Pastikan untuk mereset Arduino IDE Anda setelah menginstalnya."
Sekarang ganti konten twoBitAdder.ino dengan yang disediakan pada langkah ini. Ini adalah test harness yang diharapkan verilator, yang mengatur pin input/output, kemudian dalam loop, membaca pin input, memasukkannya ke VtwoBitAdder (versi terjemahan dari sirkuit kami), kemudian membaca output dari VtwoBitAdder dan menerapkannya mereka ke pin output.
Program ini harus dikompilasi dan dijalankan di Arduino UNO.
Langkah 4: Dari Arduino ke Chip DIP di Papan Roti
Sekarang program berjalan di Arduino, kita tidak lagi membutuhkan papan Arduino itu sendiri. Yang kita butuhkan hanyalah CPU.
Lepaskan Atmega 328P dengan hati-hati dari soket Arduino UNO, dan secara opsional masukkan penggantinya.
Letakkan Atmega 328P ke papan tempat memotong roti. Letakkan ujungnya dengan divot mengarah ke atas di papan roti. Pin 1 adalah pin kiri atas. Pin 2 adalah yang berikutnya ke bawah, dan seterusnya ke pin 14 yang ada di kiri bawah. Kemudian pin 15 berada di kanan bawah, dan pin 16 hingga 28 menghitung kembali sisi kanan chip.
Hubungkan pin 8 dan 22 ke ground.
Hubungkan pin 7 ke VCC (+5V).
Hubungkan kristal kuarsa 16Mhz antara pin 9 dan 10. Juga kapasitor kecil (22pF) antara pin 9 dan ground, dan antara pin 10 dan ground. Ini memberikan Atmega 328P kecepatan clock 16Mhz. Ada instruksi di tempat lain tentang mengajarkan 328P untuk menggunakan jam internal 8Mhz yang akan menghemat beberapa bagian, tetapi itu akan memperlambat prosesor.
Port Arduino GPIO 5, 6, 7, dan 8, yang kami gunakan untuk pin input sebenarnya adalah pin fisik 11, 12, 13, 14 pada Atmega 328P. Itu akan menjadi empat pin bawah di sebelah kiri.
Port Arduino GPIO 11, 10, dan 9, yang kami gunakan untuk pin output sebenarnya adalah pin fisik 17, 16, 15 pada Atmega 328P. Itu akan menjadi tiga pin terbawah di sebelah kanan.
Saya menghubungkan LED ke pin ini seperti sebelumnya.
Langkah 5: Kesimpulan
Chip TTL berfungsi, tetapi dibutuhkan banyak chip untuk membangun apa pun. FPGA bekerja dengan sangat baik, tetapi tidak murah. Jika Anda dapat hidup dengan pin IO yang lebih sedikit, dan kecepatan yang lebih rendah, maka Atmega 328P mungkin merupakan chip untuk Anda.
Beberapa hal yang perlu diingat:
FPGA:
Pro
- Dapat menangani sinyal kecepatan tinggi. Karena tidak ada CPU untuk memproses bottleneck ke satu instruksi pada satu waktu, faktor pembatasnya adalah penundaan propagasi melalui gerbang pada sirkuit yang diberikan. Dalam banyak kasus ini mungkin jauh lebih cepat daripada jam yang disediakan dengan chip. Untuk desain saya, penundaan yang dihitung akan memungkinkan twoBitAdder merespons sekitar 100 juta perubahan nilai input per detik (100Mhz) meskipun jam on-board hanya berupa kristal 12Mhz.
- Karena desain menjadi lebih kompleks, kinerja sirkuit yang ada tidak menurun (banyak). Karena menambahkan sirkuit ke kain hanya menempatkan sesuatu yang baru di real estat yang tidak digunakan, itu tidak memengaruhi sirkuit yang ada.
- Tergantung pada FPGA, jumlah pin IO yang tersedia bisa sangat tinggi, dan umumnya tidak dikunci untuk tujuan tertentu.
Menipu
- Bisa mahal dan/atau sulit didapat.
- Biasanya datang dalam paket BGA yang memerlukan semacam papan breakout untuk bekerja dengan chip dalam proyek amatir apa pun. Jika Anda membuatnya menjadi desain dengan PCB SMT multi-layer khusus, ini bukan masalah.
- Sebagian besar produsen FPGA menyediakan perangkat lunak desain sumber tertutup mereka sendiri, yang dalam beberapa kasus mungkin memerlukan biaya, atau memiliki tanggal kedaluwarsa lisensi.
Arduino sebagai FPGA:
Pro
- Murah, dan mudah didapat. Cukup cari atmega328p-pu di Amazon. Mereka harus sekitar $4/potong. Beberapa penjual menjualnya dalam lot 3 atau 4.
- Ini adalah paket DIP, artinya sangat pas di papan tempat memotong roti dengan pin eksternalnya.
- Ini adalah perangkat 5V, yang dapat membuat antarmuka dengan perangkat 5V lainnya menjadi mudah.
Menipu
- ATMEGA328P memiliki jumlah pin IO yang terbatas (23), dan beberapa di antaranya dicadangkan untuk tugas-tugas tertentu.
- Dengan meningkatnya kompleksitas sirkuit, jumlah kode yang dijalankan dalam metode loop Arduino meningkat, yang berarti durasi setiap siklus lebih lama.
- Bahkan jika kompleksitas rangkaian rendah, setiap siklus memerlukan banyak instruksi CPU untuk mengambil nilai pin input, dan menulis nilai pin output, dan kembali ke bagian atas loop. Dengan kristal 16Mhz, bahkan pada satu instruksi per siklus clock, loop tidak akan berjalan lebih dari mungkin 1 juta kali per detik (1Mhz). Untuk sebagian besar proyek elektronik amatir, itu jauh lebih cepat dari yang dibutuhkan.
Direkomendasikan:
Arduino Sebagai ISP -- Bakar File Hex di AVR -- Sekering di AVR -- Arduino Sebagai Pemrogram: 10 Langkah
Arduino Sebagai ISP || Bakar File Hex di AVR || Sekering di AVR || Arduino Sebagai Programmer:……………………..Silakan BERLANGGANAN ke saluran YouTube saya untuk lebih banyak video……..Artikel ini adalah semua tentang arduino sebagai ISP. Jika anda ingin mengupload file hex atau ingin memasang fuse di AVR maka anda tidak perlu membeli programmer, anda bisa melakukan
Kotoran Murah ATtiny-85 Tv-B-Gone (mematikan Semua TV!), Ditambah Arduino Sebagai Isp: 4 Langkah
Kotoran Murah ATtiny-85 Tv-B-Gone (mematikan Semua TV!), Plus Arduino As Isp: Daftarkan kursus 'Singkatnya' saya di sini: https://www.udemy.com/electronics-in-a -nutshell/?couponCode=TINKERSPARK Lihat juga saluran youtube saya di sini untuk proyek dan tutorial elektronik lainnya: https://www.youtube.com/channel/UCelOO
$2 Arduino. yang ATMEGA328 Sebagai Stand-alone. Mudah, Murah dan Sangat Kecil. Panduan Lengkap.: 6 Langkah (dengan Gambar)
$2 Arduino. yang ATMEGA328 Sebagai Stand-alone. Mudah, Murah dan Sangat Kecil. Panduan Lengkap.: Dalam instruksi ini Anda akan mempelajari cara menggunakan chip mikrokontroler Arduino ATMEGA328 sebagai mikrokontroler yang berdiri sendiri. Harganya hanya 2 dolar, dapat melakukan hal yang sama seperti Arduino Anda dan membuat proyek Anda sangat kecil. Kami akan membahas tata letak pin
Cara Menggunakan Wiimote Sebagai Mouse Komputer Menggunakan Lilin Sebagai Sensor!!: 3 Langkah
Cara Menggunakan Wiimote Sebagai Mouse Komputer Menggunakan Lilin Sebagai Sensor!!: Panduan ini akan menunjukkan cara menghubungkan Wii Remote (Wiimote) ke komputer dan menggunakannya sebagai mouse
Cara Membuat "Tangan Bantuan" Murah Sebagai Gratis, dan Mudah untuk Bagian Kecil.: 6 Langkah
Cara Membuat "Bantuan" Murah, dan Mudah untuk Bagian Kecil.: Nah, pagi ini (2.23.08) dan kemarin (2.22.08), saya mencoba menyolder sesuatu, tetapi saya tidak punya uluran tangan, jadi saya membuat ini pagi ini. (2.23.08) Ini bekerja HEBAT bagi saya, biasanya tidak ada masalah. SANGAT mudah dibuat, pada dasarnya gratis, semua yo