Isi kandungan:

Arduino Sebagai FPGA Breadboard Murah: 5 Langkah (dengan Gambar)
Arduino Sebagai FPGA Breadboard Murah: 5 Langkah (dengan Gambar)

Video: Arduino Sebagai FPGA Breadboard Murah: 5 Langkah (dengan Gambar)

Video: Arduino Sebagai FPGA Breadboard Murah: 5 Langkah (dengan Gambar)
Video: Tonton Sampai Habis !!! Belajar Arduino Di Jamin Bisa 2024, November
Anonim
Arduino Sebagai FPGA Breadboard Murah
Arduino Sebagai FPGA Breadboard Murah

Merangka litar logik perkakasan boleh menggembirakan. Cara sekolah lama untuk melakukan ini adalah dengan gerbang NAND, di papan roti, disambung dengan wayar pelompat. Ini masih boleh dilakukan, tetapi tidak memerlukan banyak sebelum pintu gerbang keluar dari tangan. Pilihan yang lebih baru adalah menggunakan FPGA (Field Arrayable Gate Array). Cip ini dapat dibuat semula menjadi litar logik digital yang boleh anda reka, tetapi tidak murah dan mudah didapati. Saya akan menunjukkan bagaimana FPGA ini dapat diganti dengan cip Atmega murah dari Arduino UNO, dengan berkesan memasukkan litar digital ke dalam pakej DIP, yang sangat mesra roti.

Langkah 1: Reka Litar yang Akan Diwakili oleh "FPGA"

Reka Litar Yang
Reka Litar Yang
Reka Litar Yang
Reka Litar Yang
Reka Litar Yang
Reka Litar Yang

Saya akan membina penambah 2 bit + 2 bit. Ia memerlukan dua pasang pin input logik, dan mengeluarkan satu triplet pin output.

Untuk melakukan ini dengan gerbang NAND, lihat skema dalam gambar. Ia memerlukan 14 pintu NAND. Saya menggunakan cip TTL gerbang NAND 4 quad, dan memasangnya di papan roti.

Saya menambahkan beberapa LED (jangan lupa perintang had semasa) untuk menunjukkan ketika pin input dan output dihidupkan (tinggi), dan ketika mereka mati (rendah). Untuk menggerakkan pin input, saya memasukkannya ke landasan atau rel kuasa positif.

Litar ini berfungsi, tetapi sudah memakan 4 cip TTL, dan merupakan sarang wayar tikus. Sekiranya lebih banyak bit diperlukan, akan ada lebih banyak papan roti, dan lebih banyak penerjun. Dengan cepat saiz litar akan hilang.

Sebagai catatan, semasa bekerja dengan gerbang TTL, mereka tidak menghasilkan tepat 0V atau 5V seperti yang diharapkan. Mereka sering menghasilkan sekitar 3V untuk "tinggi", tetapi voltan tepat berada dalam jarak yang sangat luas. Litar yang sama menggunakan cip setara CMOS akan lebih baik tepat 0V hingga tepat 5V ayunan.

Langkah 2: Masukkan FPGA

Masukkan FPGA
Masukkan FPGA
Masukkan FPGA
Masukkan FPGA

FPGA adalah cip fantastik, yang secara harfiah dapat menjadi gabungan pintu gerbang logik, yang disatukan dalam kombinasi apa pun. Seseorang merancang "litar" dalam bahasa reka bentuk perkakasan (HDL). Terdapat banyak bahasa seperti itu, salah satunya disebut Verilog. Fail.v dalam gambar adalah Verilog yang setara dengan dua bit penambah. Fail.pch di bawahnya juga diperlukan untuk menetapkan pin input dan output yang dinamakan dalam fail verilog ke pin perkakasan sebenar pada cip.

Dalam kes ini, saya menggunakan papan pengembangan iCEstick Lattice Semiconductors (https://www.latticesemi.com/icestick). Cip FPGA sebenarnya adalah iCE40HX-1k, dengan sedikit lebih dari 1000 gerbang, yang masing-masing boleh menjadi pintu masuk logik. Itu bermaksud setiap gerbang boleh menjadi gerbang NAND, atau gerbang OR, gerbang BUKAN, NOR, XOR, dll. Selain itu setiap gerbang dapat menangani lebih dari dua input. Ini khusus untuk setiap pengeluar, tetapi pada iCE40 setiap gerbang dapat menangani 4 input. Oleh itu, setiap pintu jauh lebih mampu daripada 2 pintu masuk NAND.

Saya terpaksa menetapkan 4 pin input dan 3 pin output ke pin fizikal 91, 90, 88, 87, 81, 80, dan 79 masing-masing. Ini khusus untuk cip fpga dan papan pemecah di atasnya, dan bagaimana pin tersebut disambungkan ke port PMOD. Ini terdapat dalam lembar data untuk papan FPGA ini.

Lattice menyediakan rangkaian alat mereka sendiri untuk mensintesis (FPGA setara dengan penyusunan untuk CPU) litar dari Verilog, tetapi saya menggunakan rangkaian alat sumber terbuka percuma (https://www.clifford.at/icestorm/). Arahan pemasangan terdapat di laman web tersebut. Dengan icestorm terpasang, dan fail verilog dan pcf, arahan untuk memuatkan litar 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 penghantaran iCEstick ini berharga kira-kira $ 30. Ini bukan kaedah termurah untuk membina litar digital, tetapi sangat berkuasa. Ia mempunyai lebih dari 1000 pintu dan untuk litar kecil ini hanya menggunakan 3 daripadanya. Setara gerbang NAND menggunakan 14 pintu. Ini disebabkan oleh fakta bahawa setiap gerbang dapat menjadi jenis gerbang apa pun, dan setiap gerbang sebenarnya adalah gerbang 4 masukan. Setiap pintu boleh melakukan lebih banyak perkara. Sekiranya anda memerlukan lebih banyak gerbang, iCEstick mempunyai saudara lelaki yang lebih besar dengan 8000 gerbang, harganya lebih kurang dua kali ganda. Pengilang lain mempunyai tawaran lain tetapi harganya boleh menjadi sangat curam.

Langkah 3: Dari FPGA ke Arduino

Dari FPGA ke Arduino
Dari FPGA ke Arduino

FPGA hebat, tetapi mahal, sukar didapat, dan tidak begitu mesra dengan papan roti. Cip yang mesra roti dan murah adalah Atmega 328 P, yang terdapat dalam pakej DIP yang rapi, sesuai untuk papan roti. Ia juga dapat diperoleh dengan harga sekitar $ 4. Inilah nadi Arduino UNO. Anda tentu saja dapat menggunakan keseluruhan UNO, tetapi dengan harga murah, kita dapat menarik Atmega 328 P dari UNO, dan menggunakannya dengan sendirinya. Saya menggunakan papan UNO sebagai pengaturcara untuk Atmega.

Pada ketika ini anda akan memerlukan

1. Arduino UNO, dengan CPU Atmega 328P yang boleh ditanggalkan.

2. Atmega 328P lain dengan bootloader Arduino pra-bakar, untuk menggantikan yang akan kita keluarkan dari UNO. (Pilihan dengan andaian anda masih mahu mempunyai UNO yang boleh digunakan).

Tujuannya adalah untuk menukar fail verilog menjadi projek arduino yang dapat dimuat ke dalam 328P. Arduino berdasarkan C ++. Dengan senang ada penterjemah dari Verilog ke C ++, yang disebut Verilator (https://www.veripool.org/wiki/verilator). Verilator dimaksudkan untuk digunakan oleh pereka perkakasan yang perlu mensimulasikan reka bentuknya sebelum melakukan reka bentuk tersebut kepada perkakasan yang mahal. Salib Verilator menyusun verilog ke C ++, kemudian pengguna memberikan harness ujian untuk memberikan isyarat input simulasi dan merekodkan isyarat output. Kami akan menggunakannya untuk memasukkan reka bentuk verilog ke Atmega 328P menggunakan rantai alat Arduino.

Pasang Verilator pertama. Ikuti arahan di

Pasang juga Arduino IDE, dan uji bahawa ia boleh menyambung ke Arduino UNO melalui USB.

Kami akan menggunakan fail verilog yang sama dengan FPGA, kecuali bahawa nama pin perlu diubah. Saya menambahkan garis bawah (_) pada permulaan setiap. Ini diperlukan kerana perpustakaan arduino merangkumi fail tajuk yang menerjemahkan perkara seperti B0, B001, dan lain-lain, ke nombor binari. Nama pin input yang lain akan baik-baik saja, tetapi B0 dan B1 akan menyebabkan build gagal.

Dalam direktori yang mengandungi twoBitAdder.v dan iCEstick.pcf, jalankan yang berikut:

verilator -Wall --cc twoBitAdder.v

Ini akan membuat subdirektori yang dipanggil obj_dir yang mengandungi beberapa fail baru. Kami hanya memerlukan fail header dan cpp, VtwoBitAdder.h, VtwoBitAdder.cpp, VtwoBitAdder_Syms.h, dan VtwoBitAdder_Syms.cpp.

Dalam Arduino IDE, buat lakaran baru yang disebut twoBitAdder.ino. Ini akan membuat fail ino dalam direktori baru yang juga disebut twoBitAdder, di dalam direktori buku sketsa Arduino anda. Salin fail VtwoBitAdder.h dan VtwoBitAdder.cpp anda ke folder twoBitAdder ini di folder Arduino anda.

Sekarang salin fail header dari pemasangan verilator.

cp / usr / local / share / verilator / include / verilated *.

akhirnya salin di perpustakaan std c ++ di dari https://github.com/maniacbug/StandardCplusplus. Mengikut arahan pemasangan mereka Ini dipasang seperti perpustakaan Arduino biasa. Buka isi sebaran ke folder 'perpustakaan' di bawah buku lakaran anda. Contohnya, buku lakaran saya ada di / home / maniacbug / Source / Arduino, jadi perpustakaan ini ada di / rumah / maniacbug / Sumber / Arduino / perpustakaan / StandardCplusplus.

Pastikan anda menetapkan semula Arduino IDE anda setelah memasangnya."

Sekarang gantikan kandungan twoBitAdder.ino dengan yang disediakan pada langkah ini. Ini adalah memanfaatkan ujian yang diharapkan oleh verilator, yang menetapkan pin input / output, kemudian dalam gelung, membaca pin input, memberi mereka ke VtwoBitAdder (versi litar kami yang diterjemahkan), kemudian membaca output dari VtwoBitAdder dan berlaku mereka ke pin output.

Program ini harus disusun dan dilaksanakan di Arduino UNO.

Langkah 4: Dari Arduino ke DIP Chip di Bread Board

Dari Arduino ke DIP Chip di Bread Board
Dari Arduino ke DIP Chip di Bread Board

Sekarang program ini berjalan di Arduino, kita tidak lagi memerlukan papan Arduino itu sendiri. Yang kita perlukan hanyalah CPU.

Keluarkan Atmega 328P dengan berhati-hati dari soket Arduino UNO, dan masukkan penggantinya secara pilihan.

Letakkan Atmega 328P ke papan roti. Letakkan akhir dengan divot menunjuk ke atas papan roti. Pin 1 adalah pin kiri atas. Pin 2 adalah yang berikutnya ke bawah, dan seterusnya ke pin 14 yang berada di kiri bawah. Kemudian pin 15 berada di kanan bawah, dan pin 16 hingga 28 menghitung kembali bahagian kanan cip.

Sambungkan pin 8 dan 22 ke tanah.

Sambungkan pin 7 ke VCC (+ 5V).

Sambungkan kristal kuarza 16Mhz antara pin 9 dan 10. Juga kapasitor kecil (22pF) antara pin 9 dan tanah, dan antara pin 10 dan tanah. Ini memberikan kelajuan jam 16Mhz Atmega 328P. Terdapat arahan di tempat lain untuk mengajar 328P untuk menggunakan jam 8Mhz dalamannya yang akan menjimatkan beberapa bahagian, tetapi itu akan memperlahankan prosesor.

Port Arduino GPIO 5, 6, 7, dan 8, yang kami gunakan untuk pin input sebenarnya adalah pin fizikal 11, 12, 13, 14 pada Atmega 328P. Itu adalah empat pin bawah di sebelah kiri.

Port Arduino GPIO 11, 10, dan 9, yang kami gunakan untuk pin output sebenarnya adalah pin fizikal 17, 16, 15 pada Atmega 328P. Itu adalah tiga pin bawah di sebelah kanan.

Saya menyambungkan LED ke pin ini seperti sebelumnya.

Langkah 5: Kesimpulannya

Kesimpulannya
Kesimpulannya

Cip TTL berfungsi, tetapi memerlukan banyak untuk membina apa sahaja. FPGA berfungsi dengan sangat baik, tetapi tidak murah. Sekiranya anda dapat hidup dengan pin IO yang lebih sedikit, dan kelajuan yang lebih rendah, maka Atmega 328P mungkin menjadi cip untuk anda.

Beberapa perkara yang perlu diingat:

FPGA:

Pro

- Boleh menangani isyarat berkelajuan tinggi. Kerana tidak ada CPU untuk memproses hambatan hingga satu instruksi pada satu waktu, faktor yang membatasi adalah kelewatan penyebaran melalui pintu pada litar yang diberikan. Dalam banyak kes, ini mungkin lebih pantas daripada jam yang disertakan dengan cip. Untuk rekaan saya, kelewatan yang dikira akan membolehkan duaBitAdder bertindak balas terhadap kira-kira 100 juta perubahan nilai input sesaat (100Mhz) walaupun jam on-board hanya kristal 12Mhz.

- Oleh kerana reka bentuk semakin kompleks, prestasi litar yang ada tidak merosot (banyak). Kerana menambahkan litar ke kain hanya meletakkan sesuatu yang baru di harta tanah yang tidak digunakan, ia tidak memberi kesan kepada litar yang ada.

- Bergantung pada FPGA, jumlah pin IO yang tersedia boleh menjadi sangat tinggi, dan umumnya tidak terkunci dalam tujuan tertentu.

Penukaran

- Boleh mahal dan / atau sukar didapat.

- Biasanya terdapat dalam pakej BGA yang memerlukan semacam papan pemecah untuk bekerja dengan cip dalam mana-mana projek amatur. Sekiranya anda menjadikannya reka bentuk dengan PCB SMT berbilang lapisan khusus, ini tidak menjadi masalah.

- Sebilangan besar pengeluar FPGA menyediakan perisian reka bentuk sumber tertutup mereka sendiri, yang dalam beberapa kes mungkin memerlukan wang, atau mempunyai tarikh luput lesen.

Arduino sebagai FPGA:

Pro

- Murah, dan senang didapati. Cari sahaja atmega328p-pu di Amazon. Harganya sekitar $ 4 / keping. Beberapa penjual menjualnya dalam jumlah 3 atau 4.

- Ini adalah pakej DIP, yang bermaksud sangat sesuai pada papan roti dengan pin luarannya.

- Ini adalah peranti 5V, yang dapat memudahkan perhubungan dengan peranti 5V lain.

Penukaran

- ATMEGA328P mempunyai bilangan pin IO yang terhad (23), dan beberapa daripadanya disediakan untuk tugas tertentu.

- Apabila kerumitan litar meningkat, jumlah kod yang dijalankan dalam kaedah gelung Arduino meningkat, yang bermaksud jangka masa setiap kitaran lebih lama.

- Walaupun kerumitan litar rendah, setiap kitaran memerlukan banyak arahan CPU untuk mengambil nilai pin input, dan menuliskan nilai pin output, dan kembali ke puncak gelung. Dengan kristal 16Mhz, walaupun pada satu arahan per kitaran jam, gelung tidak akan berjalan lebih dari 1 juta kali sesaat (1Mhz). Bagi kebanyakan projek elektronik amatur, ia jauh lebih pantas daripada yang diperlukan.

Disyorkan: