Mundarija:

Arduino FPGA -ning arzon paneli sifatida: 5 qadam (rasmlar bilan)
Arduino FPGA -ning arzon paneli sifatida: 5 qadam (rasmlar bilan)

Video: Arduino FPGA -ning arzon paneli sifatida: 5 qadam (rasmlar bilan)

Video: Arduino FPGA -ning arzon paneli sifatida: 5 qadam (rasmlar bilan)
Video: Arduino MKR Vidor 4000 — новая платформа для разработки с ПЛИС и микроконтроллером на борту 2024, Noyabr
Anonim
Arduino arzon stol paneli FPGA sifatida
Arduino arzon stol paneli FPGA sifatida

Uskuna mantiqiy sxemalarini loyihalash qiziqarli bo'lishi mumkin. Maktabning eski usuli - bu NAND eshiklari, non taxtasida, o'tish simlari bilan bog'langan. Bu hali ham mumkin, lekin eshiklar soni qo'ldan chiqquncha ko'p vaqt talab qilinmaydi. Yangi variant - FPGA (dala dasturlashtiriladigan eshiklar qatori) dan foydalanish. Bu mikrosxemalar o'zingizni boshqa raqamli mantiqiy sxemaga aylantirishi mumkin, lekin arzon emas. Men bu FPGA -ni Arduino UNO -dan arzon Atmega chipiga qanday almashtirish mumkinligini ko'rsataman, bu raqamli sxemani DIP -paketga samarali kiritadi, bu juda qulay.

1 -qadam: "FPGA" vakili bo'ladigan sxemani loyihalash

O'chirish sxemasini tuzing
O'chirish sxemasini tuzing
O'chirish sxemasini tuzing
O'chirish sxemasini tuzing
O'chirish sxemasini tuzing
O'chirish sxemasini tuzing

Men 2 bitli + 2 bitli qo'shuvchi quraman. Buning uchun ikkita juft mantiqiy kirish pimi kerak bo'ladi va bitta chiqish uchidan uchtasi chiqadi.

Buni NAND eshiklari bilan bajarish uchun rasmdagi sxemaga qarang. Unga 14 ta NAND darvozasi kerak. Men to'rtta NAND darvoza TTL chipidan foydalanardim va ularni non taxtasiga uladim.

Men kirish va chiqish pinlari qachon (yuqori) va o'chirilgan (past) ekanligini ko'rsatish uchun ba'zi LEDlarni qo'shdim (joriy cheklovli rezistorlarni unutmang). Kirish pimlarini haydash uchun men ularni erga yoki musbat quvvat rampasiga o'tkazdim.

Bu sxema ishlaydi, lekin u allaqachon 4 ta TTL chipini oladi va kalamushlarning simlar uyasi hisoblanadi. Agar ko'proq bitlar kerak bo'lsa, non taxtalari va sakrashlar ko'proq bo'ladi. Juda tez sxemaning o'lchami qo'ldan chiqadi.

Eslatib o'tamiz, TTL eshiklari bilan ishlashda ular kutganingizdek aniq 0V yoki 5V chiqmaydi. Ular tez -tez "yuqori" uchun 3V atrofida chiqadi, lekin aniq kuchlanish juda keng diapazonda. CMOS ekvivalent mikrosxemalaridan foydalanadigan bir xil sxemada aynan 0V dan 5V gacha o'zgaruvchan bo'ladi.

2 -qadam: FPGA -ga kiring

FPGA -ga kiring
FPGA -ga kiring
FPGA -ga kiring
FPGA -ga kiring

FPGA - bu fantastik chip, u tom ma'noda har qanday kombinatsiyada bog'langan mantiq eshiklarining har qanday kombinatsiyasiga aylanishi mumkin. Biri "sxemani" apparat dizayni tilida (HDL) loyihalashtiradi. Ko'p tillar mavjud, ulardan biri Verilog. Rasmdagi.v fayli ikki bitli qo'shimchaning Verilog ekvivalenti. Quyidagi.pch fayli verilog faylida nomlangan kirish va chiqish pinlarini chipdagi haqiqiy apparat pinlariga tayinlash uchun ham kerak.

Bunday holda, men Lattice Semiconductors iCEstick ishlab chiqish platasidan foydalanayapman (https://www.latticesemi.com/icestick). Haqiqiy FPGA chipi-bu iCE40HX-1k, 1000dan ortiq darvozalar, ularning har biri har qanday mantiqiy eshikka aylanishi mumkin. Bu shuni anglatadiki, har bir darvoza NAND darvozasi yoki OR darvozasi bo'lishi mumkin, darvoza emas, NOR, XOR va boshqalar. Bundan tashqari, har bir eshik ikkitadan ortiq kirishni boshqarishi mumkin. Bu har bir ishlab chiqaruvchiga xos, lekin iCE40 -da har bir eshik 4 ta kirishni boshqarishi mumkin. Shunday qilib, har bir darvoza NANDning ikkita kirish eshigiga qaraganda ancha qobiliyatli.

Men 4 ta kirish qarag'ayini va 3 ta chiqish pinini mos ravishda 91, 90, 88, 87, 81, 80 va 79 -chi jismoniy pinlarga tayinlashim kerak edi. Bu fpga chipiga va u joylashgan panelga va bu pinlar PMOD portiga qanday ulanganiga xosdir. Bu FPGA platasi uchun ma'lumotlar varaqlarida mavjud.

Lattice Verilog -dan zanjirlarni sintez qilish uchun (protsessorlar uchun kompilyatsiyaga teng FPGA) o'z asboblar zanjirini taqdim etadi, lekin men bepul muzli zanjirli muzli bo'rondan foydalanardim (https://www.clifford.at/icestorm/). O'rnatish bo'yicha ko'rsatmalar o'sha saytda mavjud. Icestorm o'rnatilgan va verilog va pcf fayli o'rnatilgan bo'lsa, ushbu sxemani FPGA -ga yuklash buyruqlari:

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

Bu juda yaxshi ishlaydi, lekin bu iCEstick -ni etkazib berishni hisobga olganda taxminan 30 dollar turadi. Bu raqamli sxemani qurishning eng arzon usuli emas, lekin u kuchli. Uning 1000 dan ortiq darvozasi bor va bu kichik sxemada ulardan faqat 3 tasi ishlatiladi. NAND darvozasi ekvivalentida 14 ta darvoza ishlatilgan. Buning sababi shundaki, har bir eshik har qanday eshikka aylanishi mumkin va har bir darvoza aslida 4 ta kirish eshigidir. Har bir eshik ko'proq narsani qila oladi. Agar sizga ko'proq eshik kerak bo'lsa, iCEstick -ning 8000 eshikli katta akasi bor, bu ikki baravar qimmatga tushadi. Boshqa ishlab chiqaruvchilarning boshqa takliflari bor, lekin narx ancha ko'tarilishi mumkin.

3 -qadam: FPGA -dan Arduino -ga

FPGA -dan Arduino -ga
FPGA -dan Arduino -ga

FPGA -lar juda zo'r, lekin qimmat bo'lishi mumkin, ularni topish qiyin va non taxtasi uchun juda qulay emas. Non paneli uchun qulay va arzon chip - bu Atmega 328 P bo'lib, u DIP to'plami bilan ta'minlangan va non taxtasi uchun juda mos keladi. Bundan tashqari, uni taxminan 4 dollarga sotib olish mumkin. Bu Arduino UNO ning yuragi. Siz, albatta, butun Birlashgan Millatlar Tashkilotidan foydalanishingiz mumkin, lekin arzonroq bo'lsa, biz Atmega 328 P ni UNOdan tortib olib, o'z -o'zidan ishlatishimiz mumkin. Men UNO kengashini Atmega dasturchisi sifatida ishlatganman.

Bu vaqtda sizga kerak bo'ladi

1. Arduino UNO, olinadigan Atmega 328P protsessori bilan.

2. Birlashgan Millatlar Tashkilotidan olib chiqmoqchi bo'lganimiz o'rnini bosadigan, Arduino yuklash qurilmasi bo'lgan boshqa Atmega 328P. (Agar siz hali ham foydalanish mumkin bo'lgan UNOga ega bo'lishni xohlasangiz, ixtiyoriy).

Maqsad - verilog faylini 328P ga yuklanishi mumkin bo'lgan arduino loyihasiga aylantirish. Arduino C ++ ga asoslangan. Verilogdan C ++ ga Verilator deb nomlangan tarjimon bor (https://www.veripool.org/wiki/verilator). Verilatorni qimmatbaho uskunalarga topshirishdan oldin o'z dizaynlarini simulyatsiya qilishlari kerak bo'lgan apparat dizaynerlari foydalanishi mo'ljallangan. Verilator cross verilogni C ++ ga kompilyatsiya qiladi, keyin foydalanuvchi simulyatsiya qilingan kirish signallarini etkazib berish va chiqish signallarini yozib olish uchun sinov uskunasini beradi. Biz undan Arduino asboblar zanjiri yordamida verilog dizaynini Atmega 328P ga joylashtirish uchun foydalanmoqchimiz.

Avval Verilator -ni o'rnating. Https://www.veripool.org/projects/verilator/wiki/I… manzilidagi ko'rsatmalarga amal qiling.

Shuningdek, Arduino IDE -ni o'rnating va Arduino UNO -ga USB orqali ulanishini tekshiring.

Biz FPGA bilan bir xil verilog faylini ishlatamiz, faqat pinlarning nomlarini o'zgartirish kerak. Har birining boshiga pastki chiziq (_) qo'shdim. Bu kerak, chunki arduino kutubxonalarida B0, B001 va boshqalarni ikkilik raqamlarga tarjima qiladigan sarlavha fayli mavjud. Boshqa kirish pin nomlari avvalgidek yaxshi bo'lardi, lekin B0 va B1 tuzilmaning ishdan chiqishiga sabab bo'lardi.

TwoBitAdder.v va iCEstick.pcf o'z ichiga olgan katalogda quyidagilarni bajaring:

Verilator -Wall --cc twoBitAdder.v

Bu bir nechta yangi fayllarni o'z ichiga olgan obj_dir nomli katalog yaratadi. Bizga faqat sarlavha va cpp fayllari kerak, VtwoBitAdder.h, VtwoBitAdder.cpp, VtwoBitAdder_Syms.h va VtwoBitAdder_Syms.cpp.

Arduino IDE -da twoBitAdder.ino deb nomlangan yangi eskiz yarating. Bu ino faylini Arduino sketchbook katalogingiz ichida twoBitAdder deb nomlangan yangi katalogda yaratadi. VtwoBitAdder.h va VtwoBitAdder.cpp fayllaringizni Arduino papkasidagi ushbu ikkiBitAdder papkasiga nusxalash.

Endi sarlavha fayllarini verilator o'rnatilishidan nusxa ko'chiring.

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

nihoyat https://github.com/maniacbug/StandardCplusplus dan std c ++ kutubxonasiga nusxa ko'chiring. O'rnatish yo'riqnomasiga binoan "Bu oddiy Arduino kutubxonasi kabi o'rnatiladi. Tarqatish tarkibini eskiz daftaringiz ostidagi" kutubxonalar "jildiga joylashtiring. Masalan, mening eskiz kitobim/home/maniacbug/Source/Arduino -da, shuning uchun bu kutubxona /home/maniacbug/Manba/Arduino/kutubxonalari/StandardCplusplus -da.

Arduino IDE -ni o'rnatganingizdan so'ng uni qayta o'rnatganingizga ishonch hosil qiling."

Endi twoBitAdder.ino mazmunini ushbu qadamda berilgan bilan almashtiring. Bu tekshirish moslamasi bo'lib, u kirish/chiqish pinlarini o'rnatadi, so'ngra pastadirda, kirish pimlarini o'qiydi, ularni VtwoBitAdderga uzatadi (bizning sxemamizning tarjima qilingan versiyasi), keyin VtwoBitAdderdan chiqadigan ma'lumotlarni o'qiydi va amal qiladi. ularni chiqish pinlariga ulang.

Ushbu dastur Arduino UNO -ni tuzishi va bajarishi kerak.

4 -qadam: Arduinodan non taxtasida DIP chipiga

Non taxtasida Arduinodan DIP chipgacha
Non taxtasida Arduinodan DIP chipgacha

Endi dastur Arduino -da ishlayotganda, bizga endi Arduino kartasining o'zi kerak emas. Bizga faqat CPU kerak.

Atmega 328P ni Arduino UNO rozetkasidan ehtiyotkorlik bilan chiqarib oling va ixtiyoriy ravishda uning o'rnini o'rnating.

Atmega 328P -ni non paneliga qo'ying. Oxirini non taxtasida yuqoriga ishora qilib qo'ying. 1 -pin - yuqori chap burchak. 2 -pin keyingi pastda, va hokazo, chap pastki qismida joylashgan 14 -pin. Keyin 15 -pin pastki o'ng tomonda va 16 dan 28 gacha bo'lgan pinlar chipning o'ng tomonida joylashgan.

8 va 22 -pinlarni erga ulang.

7 -pinni VCC (+5V) ga ulang.

9 va 10 -pinlar orasidagi 16 MGts chastotali kvarts kristalini ulang. Shuningdek, pin 9 va tuproq o'rtasida, pin 10 va tuproq o'rtasida kichik kondansatör (22 pF). Bu Atmega 328P -ga 16 MGts soat tezligini beradi. Boshqa joylarda 328P -ni ichki 8 MGts chastotali soatlardan foydalanishga o'rgatish bo'yicha ko'rsatmalar mavjud, bu bir necha qismni tejaydi, lekin bu protsessorning ishini sekinlashtiradi.

Arduino GPIO 5, 6, 7 va 8 portlari, biz kirish pinlari uchun ishlatilgan, Atmega 328P -dagi 11, 12, 13, 14 -chi jismoniy pinlardir. Bu chap tomonda joylashgan to'rtta pastki pin.

Biz chiqish pinlari uchun ishlatgan Arduino GPIO 11, 10 va 9 portlari aslida Atmega 328P 17, 16, 15 jismoniy pinlari. Bu o'ngdagi pastki uchta pin bo'ladi.

Men LEDlarni bu pinlarga avvalgidek uladim.

5 -qadam: Xulosa

Xulosa
Xulosa

TTL chiplari ishlaydi, lekin har qanday narsani yaratish uchun ko'p narsa kerak. FPGA -lar juda yaxshi ishlaydi, lekin arzon emas. Agar siz kamroq IO pinlari va past tezlikda yashay olsangiz, Atmega 328P siz uchun chip bo'lishi mumkin.

Yodda tutish kerak bo'lgan ba'zi narsalar:

FPGA:

Pro

- Yuqori tezlik signallarini boshqarishi mumkin. Bir vaqtning o'zida bitta ko'rsatmaga ishlov berishni to'xtatuvchi protsessor yo'qligi sababli, cheklovchi omil - berilgan sxemadagi eshiklar orqali tarqalishning kechikishi. Ko'p hollarda, bu chip bilan ta'minlangan soatdan ancha tezroq bo'lishi mumkin. Mening dizaynim uchun hisoblangan kechikish, ikkiBitAdder-ga soatiga atigi 12 MGts kristalli bo'lishiga qaramay, sekundiga (100 MGts) kirish qiymatining 100 millionga yaqin o'zgarishiga javob berishga imkon beradi.

- Dizayn murakkablashganda, mavjud sxemalarning ishlashi pasaymaydi (ko'p). Chiziqlarni matoga qo'shish shunchaki ishlatilmaydigan ko'chmas mulkka yangi narsalarni kiritishdir, bu mavjud sxemaga ta'sir qilmaydi.

- FPGA -ga qarab, mavjud bo'lgan IO pinlarining soni juda ko'p bo'lishi mumkin va ular odatda biron bir maqsadga bog'liq emas.

Kon

- Qimmat va/yoki kelish qiyin bo'lishi mumkin.

- Odatda har qanday havaskor loyihada chip bilan ishlash uchun qandaydir sindiruvchi taxtani talab qiladigan BGA to'plami keladi. Agar siz uni ko'p qavatli SMT tenglamali dizaynga aylantirmoqchi bo'lsangiz, bu muammo emas.

- Aksariyat FPGA ishlab chiqaruvchilari o'zlarining yopiq manbali dizayn dasturlarini taqdim etadilar, ular ba'zi hollarda qimmatga tushishi yoki litsenziyaning amal qilish muddati bo'lishi mumkin.

Arduino FPGA sifatida:

Pro

- Arzon va olish oson. Amazonda atmega328p-pu ni qidiring. Ular taxminan 4 dollar bo'lishi kerak. Bir nechta sotuvchilar ularni 3 yoki 4 dona sotadilar.

- Bu DIP to'plami, demak, uning tashqi pinlari bilan non paneliga to'liq mos keladi.

- Bu 5V qurilmasi bo'lib, u boshqa 5V qurilmalar bilan aloqani osonlashtirishi mumkin.

Kon

- ATMEGA328P cheklangan miqdordagi IO pinlariga ega (23) va ularning bir nechtasi aniq vazifalar uchun ajratilgan.

- O'chirish murakkabligi oshgani sayin, Arduino pastadir usulida ishlaydigan kod miqdori oshadi, ya'ni har bir tsiklning davomiyligi uzoqroq bo'ladi.

- Agar kontaktlarning zanglashiga olib keladigan murakkablik past bo'lsa ham, har bir tsikl kirish pin qiymatlarini olish va chiqish pin qiymatlarini yozish va pastadirning yuqori qismiga qaytish uchun ko'plab CPU ko'rsatmalarini talab qiladi. 16 MGts chastotali kristall bilan, hatto bitta soat tsikli uchun bitta ko'rsatma bo'lsa ham, tsikl 1 milliondan oshmaydi (1 MGts). Ko'pchilik havaskor elektronika loyihalari uchun kerak bo'lgandan ko'ra tezroq.

Tavsiya: