Talaan ng mga Nilalaman:
- Hakbang 1: Idisenyo ang Circuit Na Kinakatawan ng "FPGA"
- Hakbang 2: Ipasok ang FPGA
- Hakbang 3: Mula sa FPGA hanggang sa Arduino
- Hakbang 4: Mula sa Arduino hanggang sa DIP Chip sa isang Bread Board
- Hakbang 5: Konklusyon
Video: Arduino Bilang isang Murang Breadboard FPGA: 5 Hakbang (na may Mga Larawan)
2024 May -akda: John Day | [email protected]. Huling binago: 2024-01-30 13:14
Ang pagdidisenyo ng mga circuit ng lohika ng hardware ay maaaring maging masaya. Ang dating paraan ng paaralan upang magawa ito ay kasama ang mga pintuang NAND, sa isang board ng tinapay, na naka-wire sa mga jumper wires. Posible pa rin ito, ngunit hindi ito tumatagal bago mawala ang bilang ng mga gate. Ang isang mas bagong pagpipilian ay ang paggamit ng isang FPGA (Field Programmable Gate Array). Ang mga chip na ito ay maaaring muling simulan ang kanilang sarili upang maging anumang mga digital na circuit ng lohika na maaari mong disenyo, ngunit hindi mura at madaling magagamit. Ipapakita ko kung paano ang FPGA na ito ay maaaring mapalitan ng isang murang Atmega chip mula sa isang Arduino UNO, na mabisang paglalagay ng digital circuit sa isang DIP package, na napaka-friendly ng breadboard.
Hakbang 1: Idisenyo ang Circuit Na Kinakatawan ng "FPGA"
Bubuo ako ng 2 bit + 2 bit adder. Tumatagal ito ng dalawang pares ng mga pin ng pag-input ng lohika, at naglalabas ng isang triple ng mga output pin.
Upang magawa ito sa mga pintuang NAND, tingnan ang eskematiko sa larawan. Kailangan nito ng 14 mga pintuang NAND. Gumamit ako ng 4 na quad na NAND gate TTL chips, at itinali ang mga ito sa board ng tinapay.
Nagdagdag ako ng ilang mga LEDs (huwag kalimutan ang kasalukuyang naglilimita ng mga resistors) upang ipakita kung ang input at output pin ay nasa (mataas), at kapag naka-off (mababa). Upang himukin ang mga input pin, alinman sa ito ay inilagay ko sa ground rail o ang positibong power rail.
Gumagana ang circuit na ito, ngunit tumatagal na ito ng 4 na mga TTL chips, at pugad ng daga ng mga wire. Kung kailangan ng maraming mga piraso, maraming mga board ng tinapay, at maraming mga jumper. Napakabilis ang laki ng circuit ay mawawala sa kamay.
Sa isang tala sa gilid, kapag nagtatrabaho kasama ang mga pintuang TTL, hindi sila eksaktong naglalabas ng 0V o 5V na inaasahan ng isa. Sila ay madalas na output sa paligid ng 3V para sa "mataas", ngunit ang eksaktong boltahe ay nasa isang napakalawak na saklaw. Ang parehong circuit gamit ang katumbas na chips ng CMOS ay may mas mahusay na eksaktong 0V sa eksaktong 5V swings.
Hakbang 2: Ipasok ang FPGA
Ang isang FPGA ay isang kamangha-manghang maliit na tilad, na maaaring literal na maging anumang kombinasyon ng mga gate ng lohika, magkakasamang naka-wire sa anumang kumbinasyon. Ang isa ay nagdidisenyo ng "circuit" sa isang wika ng disenyo ng hardware (HDL). Mayroong maraming mga naturang wika, ang isa ay tinatawag na Verilog. Ang.v file sa larawan ay ang katumbas ng Verilog ng dalawang bit adder. Ang.pch file sa ibaba ay kinakailangan din upang italaga ang mga input at output pin na pinangalanan sa verilog file sa totoong mga pin ng hardware sa maliit na tilad.
Sa kasong ito gumagamit ako ng isang Lattice Semiconductors iCEstick development board (https://www.latticesemi.com/icestick). Ang aktwal na FPGA chip ay isang iCE40HX-1k, na may higit sa 1000 mga gate, na maaaring ang bawat isa ay maging anumang gate ng lohika. Nangangahulugan iyon na ang bawat gate ay maaaring isang NAND gate, o isang O gate, HINDI gate, NOR, XOR, atbp Bilang karagdagan ang bawat gate ay maaaring hawakan ang higit sa dalawang mga input. Ito ay tiyak sa bawat tagagawa, ngunit sa iCE40's bawat gate ay maaaring hawakan ang 4 na input. Sa gayon ang bawat gate ay higit na may kakayahang kaysa sa 2 input NAND gate.
Kailangan kong italaga ang 4 na input pine at ang 3 output pin sa mga pisikal na pin na 91, 90, 88, 87, 81, 80, at 79 ayon sa pagkakabanggit. Ito ay tiyak sa fpga chip at ang breakout board na ito ay nasa, at kung paano naka-wire ang mga pin sa PMOD port. Magagamit ito sa mga datasheet para sa board na FPGA na ito.
Ang Lattice ay nagbibigay ng kanilang sariling kadena ng tool upang i-synthesize (ang katumbas ng FPGA sa pagtitipon para sa mga CPU) na mga circuit mula sa Verilog, ngunit ginamit ko ang libreng bukas na source tool chain icestorm (https://www.clifford.at/icestorm/). Magagamit ang mga tagubilin sa pag-install sa site na iyon. Sa naka-install na icestorm, at ang verilog at pcf file, ang mga utos na i-load ang circuit na ito sa FPGA ay:
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
Magagawa itong mahusay, ngunit kasama ang pagpapadala ng iCEstick na ito ay nagkakahalaga ng humigit-kumulang na $ 30. Hindi ito ang pinakamurang paraan upang makabuo ng isang digital circuit, ngunit Ito ay malakas. Mayroon itong higit sa 1000 mga gate at para sa maliit na circuit na ito ay gumagamit lamang ng 3 sa kanila. Ang katumbas ng NAND gate ay gumamit ng 14 na gate. Ito ay dahil sa ang katunayan na ang bawat gate ay maaaring maging anumang uri ng gate, at ang bawat gate ay talagang isang 4 na input gate. Ang bawat gate ay maaaring gumawa ng higit pa. Kung kailangan mo ng higit pang mga gate, ang iCEstick ay may isang malaking kapatid na may 8000 mga gate, na nagkakahalaga ng doble. Ang iba pang mga tagagawa ay may iba pang mga handog ngunit ang presyo ay maaaring maging medyo matarik.
Hakbang 3: Mula sa FPGA hanggang sa Arduino
Ang mga FPGA ay mahusay, ngunit maaaring magastos, mahirap makarating, at hindi masyadong magiliw sa board board. Ang isang breadboard friendly at murang chip ay ang Atmega 328 P, na nagmumula sa isang maayos na pakete ng DIP, perpekto para sa breadboarding. Maaari rin itong magkaroon ng humigit-kumulang na $ 4. Ito ang puso ng Arduino UNO. Maaari mong syempre gamitin ang buong UNO, ngunit maging murang, maaari naming hilahin ang Atmega 328 P mula sa UNO, at gamitin ito nang mag-isa. Ginamit ko ang UNO board bilang isang programmer para sa Atmega.
Sa puntong ito kakailanganin mo
1. Isang Arduino UNO, na may naaalis na Atmega 328P CPU.
2. Isa pang Atmega 328P na may Arduino bootloader na paunang sinunog, upang mapalitan ang malapit na nating ilabas sa UNO. (Opsyonal na ipinapalagay na nais mo pa ring magkaroon ng isang magagamit na UNO).
Ang layunin ay upang i-convert ang verilog file sa isang proyekto ng arduino na maaaring mai-load sa 328P. Ang Arduino ay batay sa C ++. Maginhawa mayroong isang tagasalin mula sa Verilog hanggang C ++, na tinawag na Verilator (https://www.veripool.org/wiki/verilator). Ang Verilator ay inilaan upang magamit ng mga tagadisenyo ng hardware na kailangang gayahin ang kanilang mga disenyo bago gawin ang mga disenyo na iyon sa mamahaling hardware. Pinagsasama ng Verilator cross ang verilog sa C ++, pagkatapos ay nagbibigay ang gumagamit ng isang test harness upang magbigay ng simulate na mga signal ng pag-input at itala ang mga signal ng output. Gagamitin namin ito upang i-cram ang disenyo ng verilog sa Atmega 328P gamit ang Arduino tool chain.
Una i-install ang Verilator. Sundin ang mga tagubilin sa
I-install din ang Arduino IDE, at subukan na maaari itong kumonekta sa Arduino UNO sa USB.
Gagamitin namin ang parehong file ng verilog tulad ng para sa FPGA, maliban na ang mga pangalan ng mga pin ay kailangang baguhin. Nagdagdag ako ng isang underscore (_) sa simula ng bawat isa. Kailangan ito sapagkat ang mga aklatan ng arduino ay nagsasama ng isang header file na nagsasalin ng mga bagay tulad ng B0, B001, atbp, sa mga binary na numero. Ang iba pang mga pangalan ng input pin ay magiging maayos tulad ng, ngunit ang B0 at B1 ay maaaring maging sanhi ng pagkabigo ng build.
Sa direktoryo na naglalaman ng twoBitAdder.v at iCEstick.pcf, patakbuhin ang sumusunod:
verilator -Wall --cc twoBitAdder.v
Lilikha ito ng isang subdirectory na tinatawag na obj_dir na naglalaman ng maraming mga bagong file. Kailangan lang namin ang mga file ng header at cpp, VtwoBitAdder.h, VtwoBitAdder.cpp, VtwoBitAdder_Syms.h, at VtwoBitAdder_Syms.cpp.
Sa Arduino IDE, lumikha ng isang bagong sketch na tinatawag na twoBitAdder.ino. Lilikha nito ang ino file sa isang bagong direktoryo na tinatawag ding twoBitAdder, sa loob ng iyong Arduino sketchbook Directory. Kopyahin ang iyong VtwoBitAdder.h at VtwoBitAdder.cpp file sa dalawangBitAdder folder na ito sa iyong Arduino folder.
Kopyahin ngayon ang mga file ng header mula sa pag-install ng verilator.
cp / usr / local / share / verilator / isama / verilated *.
sa wakas kopyahin ang std c ++ library mula sa https://github.com/maniacbug/StandardCplusplus. Alinsunod sa kanilang mga tagubilin sa pag-install Naka-install ito tulad ng isang regular na library ng Arduino. I-unpack ang mga nilalaman ng pamamahagi sa folder na 'mga aklatan' sa ilalim ng iyong sketchbook. Halimbawa, ang aking sketchbook ay nasa / home / maniacbug / Source / Arduino, kaya ang library na ito ay nasa / bahay / maniacbug / Pinagmulan / Arduino / aklatan / StandardCplusplus.
Tiyaking i-reset ang iyong Arduino IDE pagkatapos i-install ito."
Palitan ngayon ang nilalaman ng twoBitAdder.ino ng isa na ibinigay sa hakbang na ito. Ito ay isang test harness na inaasahan ng verilator, na nagtatakda ng mga input / output pin, pagkatapos ay sa loop, binabasa ang mga input pin, pinapakain ang mga ito sa VtwoBitAdder (ang isinaling bersyon ng aming circuit), pagkatapos ay binabasa ang mga output mula sa VtwoBitAdder at nalalapat ang mga ito sa mga output pin.
Ang program na ito ay dapat na ipagsama at ipatupad sa Arduino UNO.
Hakbang 4: Mula sa Arduino hanggang sa DIP Chip sa isang Bread Board
Ngayon na tumatakbo ang programa sa Arduino, hindi na namin kailangan ang Arduino board mismo. Ang kailangan lang namin ay ang CPU.
Alisin nang mabuti ang Atmega 328P mula sa Arduino UNO socket, at opsyonal na ipasok ang kapalit nito.
Ilagay ang Atmega 328P sa breadboard. Ilagay ang dulo sa pamamagitan ng pagdidikit ng divot sa board ng tinapay. Ang Pin 1 ay ang tuktok na kaliwang pin. Ang Pin 2 ay ang susunod na pababa, at iba pa upang i-pin ang 14 na nasa kaliwang ibabang bahagi. Pagkatapos ang pin 15 ay nasa kanang ibaba, at ang mga pin na 16 hanggang 28 ay bibilangin muli ang kanang bahagi ng maliit na tilad.
Ikonekta ang mga pin na 8 at 22 sa lupa.
Ikonekta ang pin 7 sa VCC (+ 5V).
Ikonekta ang isang 16Mhz quartz crystal sa pagitan ng mga pin 9 at 10. Gayundin isang maliit na capacitor (22pF) sa pagitan ng pin 9 at ground, at sa pagitan ng pin 10 at ground. Ibinibigay nito sa Atmega 328P ang bilis ng orasan na 16Mhz. May mga tagubilin sa ibang lugar sa pagtuturo ng 328P na sa halip ay gamitin ang panloob na 8Mhz na orasan na makatipid ng ilang bahagi, ngunit magpapabagal sa processor.
Ang Arduino GPIO port 5, 6, 7, at 8, na ginamit namin para sa mga input pin ay talagang mga pisikal na pin 11, 12, 13, 14 sa Atmega 328P. Iyon ang magiging apat na ilalim na mga pin sa kaliwa.
Ang Arduino GPIO port 11, 10, at 9, na ginamit namin para sa mga output pin ay talagang mga pisikal na pin 17, 16, 15 sa Atmega 328P. Iyon ang magiging ilalim ng tatlong mga pin sa kanan.
Kinabit ko ang mga LED sa mga pin na ito tulad ng dati.
Hakbang 5: Konklusyon
Gumagana ang mga chips ng TTL, ngunit kinakailangan ng marami sa kanila upang makabuo ng anumang. Ang mga FPGA ay gumagana nang maayos, ngunit hindi mura. Kung maaari kang mabuhay nang may mas kaunting mga pin ng IO, at mas mababang bilis, pagkatapos ay ang isang Atmega 328P ay maaaring ang chip para sa iyo.
Ilang bagay na dapat tandaan:
FPGA:
Pro
- Maaaring hawakan ang mga signal ng mataas na bilis. Dahil walang CPU sa pagpoproseso ng bottleneck pababa sa isang tagubilin nang paisa-isa, ang naglilimita na kadahilanan ay ang pagkaantala ng paglaganap sa pamamagitan ng mga pintuan sa ibinigay na circuit. Sa maraming mga kaso maaari itong maging mas mabilis kaysa sa orasan na ibinigay kasama ang maliit na tilad. Para sa aking disenyo, pinapayagan ang compute na pagkaantala para sa twoBitAdder na tumugon sa halos 100 milyong mga pagbabago sa mga halaga ng pag-input bawat segundo (100Mhz) kahit na ang on-board na orasan ay isang 12Mhz na kristal lamang.
- Habang ang disenyo ay nakakakuha ng mas kumplikado ang pagganap ng mga umiiral na mga circuit ay hindi nagpapasama (marami). Dahil ang pagdaragdag ng mga circuit sa tela ay simpleng paglalagay ng bago sa hindi nagamit na real-estate, hindi ito nakakaapekto sa mayroon nang circuitry.
- Depende sa FPGA, ang bilang ng mga magagamit na mga pin ng IO ay maaaring maging napakataas, at sa pangkalahatan ay hindi naka-lock sa anumang partikular na layunin.
Con
- Maaaring maging mahal at / o mahirap makarating.
- Karaniwan ay nagmumula sa isang pakete ng BGA na nangangailangan ng ilang uri ng breakout board upang gumana sa maliit na tilad sa anumang proyekto ng amateur. Kung itinatayo mo ito sa isang disenyo na may pasadyang multi-layer SMT PCB, hindi ito isang problema.
- Karamihan sa mga tagagawa ng FPGA ay nagbibigay ng kanilang sariling sarado na software ng disenyo ng mapagkukunan, na sa ilang mga kaso ay maaaring gastos sa pera, o magkaroon ng isang petsa ng pag-expire ng lisensya.
Arduino bilang isang FPGA:
Pro
- Mura, at madaling makuha. Maghanap lang para sa atmega328p-pu sa Amazon. Dapat ay mga $ 4 / piraso ang mga ito. Maraming nagbebenta ang nagbebenta ng mga ito sa maraming 3 o 4.
- Ito ay isang pakete ng DIP, ibig sabihin perpektong magkasya sa isang breadboard kasama ang panlabas na mga pin.
- Ito ay isang 5V aparato, na maaaring gawing madali ang pag-interfacing sa iba pang mga 5V device.
Con
- Ang ATMEGA328P ay may isang limitadong bilang ng mga IO pin (23), at marami sa mga ito ay nakalaan para sa mga tiyak na gawain.
- Habang tumataas ang pagiging kumplikado ng circuit, ang dami ng code na tumatakbo sa pamamaraang Arduino loop ay tataas, nangangahulugang mas matagal ang tagal ng bawat pag-ikot.
- Kahit na ang pagiging kumplikado ng circuit ay mababa, ang bawat pag-ikot ay nangangailangan ng maraming mga tagubilin sa CPU upang makuha ang mga halaga ng input pin, at isulat ang mga halaga ng output pin, at bumalik sa tuktok ng loop. Sa pamamagitan ng isang 16Mhz na kristal, kahit na sa isang tagubilin bawat pag-ikot ng orasan, ang loop ay hindi tatakbo nang higit sa marahil ng 1 milyong beses bawat segundo (1Mhz). Para sa karamihan ng mga amateur electronics na proyekto na mas mabilis kaysa sa kinakailangan bagaman.
Inirerekumendang:
Gumamit ng isang Stepper Motor Bilang isang Rotary Encoder: 9 Mga Hakbang (na may Mga Larawan)
Gumamit ng isang Stepper Motor Bilang isang Rotary Encoder: Ang mga rotary encoder ay mahusay para magamit sa mga proyekto ng microcontroller bilang isang input device ngunit ang kanilang pagganap ay hindi masyadong makinis at kasiya-siya. Gayundin, pagkakaroon ng maraming ekstrang mga stepper motor sa paligid, nagpasya akong bigyan sila ng isang layunin. Kaya kung mayroong ilang stepper
Keytar Hero (Paggamit ng isang Wii Guitar Controller Bilang isang Synthesizer): 7 Mga Hakbang (na may Mga Larawan)
Keytar Hero (Paggamit ng isang Wii Guitar Controller Bilang isang Synthesizer): Ang mga laro ng Guitar Hero ay ang lahat ng galit ng isang dosenang taon na ang nakakalipas, kaya't maraming mga lumang Controller ng gitara na nakahiga sa pag-iipon ng alikabok. Mayroon silang maraming mga pindutan, knobs, at pingga, kaya bakit hindi muling gamitin ang mga ito? Ang controlle ng gitara
$ 2 Arduino. ang ATMEGA328 Bilang isang Stand-alone. Madali, Mura at Napakaliit. isang Kumpletong Gabay .: 6 Mga Hakbang (na may Mga Larawan)
$ 2 Arduino. ang ATMEGA328 Bilang isang Stand-alone. Madali, Mura at Napakaliit. isang Kumpletong Gabay .: Sa itinuturo na ito malalaman mo kung paano gamitin ang Arduino ATMEGA328 microcontroller chip bilang isang stand-alone microcontroller. Ang gastos nila ay 2 pera lamang, maaaring gawin ang pareho sa iyong Arduino at gawing napakaliit ng iyong mga proyekto. Saklaw namin ang layout ng pin,
Sesame Street - Bilang ng Orasan ng Pinball na Bilang: 8 Hakbang (na may Mga Larawan)
Sesame Street - Pinball Number Count Clock: Ang itinuturo na ito ay magbabalangkas sa pagtatayo ng isang na-customize na orasan. Habang ito ay partikular na ang pagtatayo ng orasan na itinampok sa Sesame Street; ang Pinball Number Counting na animation, ang mga pangkalahatang pamamaraan ay pareho at ang itinuturo
Paano Gumawa ng isang Autonomous Basketball Playing Robot Paggamit ng isang IRobot Lumikha Bilang Base: 7 Mga Hakbang (na may Mga Larawan)
Paano Gumawa ng isang Autonomous Basketball Playing Robot Paggamit ng isang IRobot Lumikha Bilang Base: Ito ang aking entry para sa hamon sa iRobot Lumikha. Ang pinakamahirap na bahagi ng buong prosesong ito para sa akin ay ang pagpapasya kung ano ang gagawin ng robot. Nais kong ipakita ang mga cool na tampok ng Lumikha, habang nagdaragdag din sa ilang robo flair. Lahat ng akin