Sadržaj:

Arduino kao jeftina FPGA ploča: 5 koraka (sa slikama)
Arduino kao jeftina FPGA ploča: 5 koraka (sa slikama)

Video: Arduino kao jeftina FPGA ploča: 5 koraka (sa slikama)

Video: Arduino kao jeftina FPGA ploča: 5 koraka (sa slikama)
Video: Как использовать гироскоп, акселерометр, магнитометр MPU-9250 для Arduino 2024, Studeni
Anonim
Arduino kao jeftina matična ploča FPGA
Arduino kao jeftina matična ploča FPGA

Dizajniranje hardverskih logičkih sklopova može biti zabavno. Stari način da se to učini bilo je s vratima NAND, na ploči za kruh, ožičenim kratkospojnicima. To je još uvijek moguće, ali ne treba puno prije nego što se broj vrata izmakne kontroli. Novija je mogućnost korištenje FPGA (Field Programmable Gate Array) polja. Ti se čipovi mogu preurediti u bilo koje digitalno logičko kolo koje možete dizajnirati, ali nisu jeftini i lako dostupni. Pokazat ću kako se ova FPGA može zamijeniti jeftinim čipom Atmega iz Arduino UNO -a, učinkovito stavljajući digitalni krug u DIP paket, koji je vrlo prilagođen matičnoj ploči.

Korak 1: Dizajnirajte krug koji će predstavljati "FPGA"

Dizajnirajte krug koji je
Dizajnirajte krug koji je
Dizajnirajte krug koji je
Dizajnirajte krug koji je
Dizajnirajte krug koji je
Dizajnirajte krug koji je

Napravit ću 2 -bitni + 2 -bitni zbrajač. Potrebna su dva para logičkih ulaznih pinova, a izlazi jedan triplet izlaznih pinova.

Da biste to učinili s NAND vratima, pogledajte shemu na slici. Treba 14 NAND vrata. Koristio sam 4 quad NAND gate TTL čipova i ožičio ih na ploči za kruh.

Dodao sam neke LED diode (ne zaboravite na otpornike koji ograničavaju struju) da pokažu kada su ulazni i izlazni pinovi bili uključeni (visoko), a kada isključeni (nisko). Da bih pokrenuo ulazne pinove, ili sam ih spojio na uzemljenje ili na pozitivnu vodilicu.

Ovaj krug radi, ali već zauzima 4 TTL čipa i gnijezdo je žica štakora. Da je potrebno više komada, bilo bi više ploča za kruh i više skakača. Vrlo brzo veličina kruga bi izmakla kontroli.

S druge strane, pri radu s TTL vratima, oni ne emitiraju točno 0V ili 5V kako bi se očekivalo. Često daju izlaz oko 3V za "visoku" vrijednost, ali točan napon je u vrlo širokom rasponu. Isti krug koji koristi CMOS ekvivalentne čipove imao bi bolje točno 0V do točno 5V zamaha.

Korak 2: Unesite FPGA

Unesite FPGA
Unesite FPGA
Unesite FPGA
Unesite FPGA

FPGA je fantastičan čip, koji doslovno može postati bilo koja kombinacija logičkih vrata, ožičenih u bilo kojoj kombinaciji. Jedan dizajnira "sklop" u jeziku hardverskog dizajna (HDL). Postoji više takvih jezika, od kojih se jedan zove Verilog.. V datoteka na slici je Verilog ekvivalent dvobitnog sabirača. Datoteka.pch ispod nje također je potrebna za dodjelu ulaznih i izlaznih pinova navedenih u verilog datoteci stvarnim hardverskim pinovima na čipu.

U ovom slučaju koristim iCEstick razvojnu ploču Lattice Semiconductors (https://www.latticesemi.com/icestick). Stvarni FPGA čip je iCE40HX-1k, s nešto više od 1000 vrata, od kojih svaki može postati bilo koji logički ulaz. To znači da svaka vrata mogu biti vrata NAND ili vrata ILI, a ne vrata, NOR, XOR itd. Osim toga, svaka vrata mogu rukovati s više od dva ulaza. To je specifično za svakog proizvođača, ali na iCE40 -ima svaki ulaz može rukovati s 4 ulaza. Tako su svaka vrata znatno sposobnija od 2 ulazna NAND vrata.

Morao sam dodijeliti 4 ulazna bora i 3 izlazna pina fizičkim pinovima 91, 90, 88, 87, 81, 80 i 79. To je specifično za fpga čip i probojnu ploču na kojoj se nalazi te kako su te pinove spojene na PMOD priključak. To je dostupno u podatkovnim tablicama za ovu FPGA ploču.

Lattice pruža vlastiti lanac alata za sintetiziranje (FPGA ekvivalent kompilaciji za CPU -ove) sklopova iz Veriloga, ali ja sam koristio besplatni open source lanac alata icestorm (https://www.clifford.at/icestorm/). Upute za instalaciju dostupne su na tom mjestu. S instaliranom ledenom olujom, datotekom verilog i pcf, naredbe za učitavanje ovog kruga na FPGA su:

yosys -p "synth_ice40 -blif twoBitAdder.v" twoBitAdder.blif

arachne -pnr -d 1k -p iCEstick.pcf twoBitAdder.blif -o twoBitAdder.asc

ledeni paket twoBitAdder.asc twoBitAdder.bin

iceprog twoBitAdder.bin

Ovo odlično funkcionira, ali isporuka ovog iCEstick -a koštat će oko 30 USD. Ovo nije najjeftiniji način za izgradnju digitalnog sklopa, ali je moćan. Ima preko 1000 vrata, a za ovaj mali krug koristi samo 3 od njih. Ekvivalent vrata NAND koristio je 14 vrata. To je zbog činjenice da svaka vrata mogu postati bilo koja vrata, a svaka vrata su zapravo 4 ulazna vrata. Svaka vrata mogu učiniti više. Ako trebate više vrata, iCEstick ima većeg brata s 8000 vrata, što košta otprilike dvostruko. Drugi proizvođači imaju i drugu ponudu, ali cijena može biti prilično visoka.

Korak 3: Od FPGA do Arduina

Od FPGA do Arduina
Od FPGA do Arduina

FPGA -i su odlični, ali mogu biti skupi, teško ih je pronaći i nisu baš prijateljski nastrojeni. Jeftin i jeftin čip prilagođen matičnoj ploči je Atmega 328 P, koji dolazi u urednom DIP paketu, savršen za izradu matičnih ploča. Također se može kupiti za oko 4 USD. Ovo je srce Arduino UNO -a. Naravno, mogli biste koristiti cijeli UNO, ali ako ste jeftini, možemo povući Atmegu 328 P s UNO -a i koristiti je sami. Koristio sam UNO ploču kao programer za Atmegu.

U ovom trenutku trebat će vam

1. Arduino UNO, sa uklonjivim Atmega 328P CPU -om.

2. Još jedna Atmega 328P s unaprijed spaljenim Arduino pokretačkim programom, kako bi zamijenila onu koju ćemo izvaditi iz UNO-a. (Neobavezno pod pretpostavkom da i dalje želite imati upotrebljiv UNO).

Cilj je pretvoriti datoteku verilog u arduino projekt koji se može učitati u 328P. Arduino se temelji na C ++. Zgodno postoji prevoditelj s Veriloga na C ++, nazvan Verilator (https://www.veripool.org/wiki/verilator). Verilator je namijenjen dizajnerima hardvera koji trebaju simulirati svoje dizajne prije nego što te dizajne predaju skupom hardveru. Verilator cross kompilira verilog u C ++, zatim korisnik pruža testni pojas za pružanje simuliranih ulaznih signala i snimanje izlaznih signala. Koristit ćemo ga za uguravanje verilog dizajna u Atmegu 328P pomoću lanca alata Arduino.

Prvo instalirajte Verilator. Slijedite upute na

Također instalirajte Arduino IDE i provjerite može li se povezati s Arduino UNO putem USB -a.

Koristit ćemo istu verilog datoteku kao i za FPGA, samo što je potrebno promijeniti nazive pinova. Na početak svakog dodao sam podvlaku (_). To je potrebno jer arduino knjižnice uključuju datoteku zaglavlja koja prevode stvari poput B0, B001 itd. U binarne brojeve. Ostali nazivi ulaznih pin-ova bili bi u redu, ali B0 i B1 bi uzrokovali neuspjeh sastavljanja.

U direktoriju koji sadrži twoBitAdder.v i iCEstick.pcf pokrenite sljedeće:

verilator -Wall --cc twoBitAdder.v

Ovo će stvoriti poddirektorij pod nazivom obj_dir koji sadrži nekoliko novih datoteka. Potrebne su nam samo datoteke zaglavlja i cpp, VtwoBitAdder.h, VtwoBitAdder.cpp, VtwoBitAdder_Syms.h i VtwoBitAdder_Syms.cpp.

U Arduino IDE -u stvorite novu skicu pod nazivom twoBitAdder.ino. Ovo će stvoriti ino datoteku u novom direktoriju koji se također naziva twoBitAdder, unutar vašeg Arduino imenika skica. Kopirajte datoteke VtwoBitAdder.h i VtwoBitAdder.cpp u ovu datoteku twoBitAdder u mapi Arduino.

Sada kopirajte datoteke zaglavlja iz instalacije verifikatora.

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

konačno kopirajte u std c ++ knjižnicu s https://github.com/maniacbug/StandardCplusplus. Prema njihovim uputama za instalaciju "Ovo je instalirano baš kao i obična Arduino knjižnica. Raspakirajte sadržaj distribucije u mapu" knjižnice "ispod svoje skice. Na primjer, moja skica je na/home/maniacbug/Source/Arduino, pa je ova knjižnica je u/home/maniacbug/Source/Arduino/libraries/StandardCplusplus.

Obavezno resetirajte svoj Arduino IDE nakon instalacije."

Sada zamijenite sadržaj twoBitAdder.ino onim koji je naveden u ovom koraku. Ovo je ispitni pojas koji verilator očekuje, koji postavlja ulazno/izlazne pinove, zatim u petlji, čita ulazne pinove, šalje ih u VtwoBitAdder (prevedena verzija našeg kruga), zatim čita izlaze iz VtwoBitAddera i primjenjuje ih na izlazne pinove.

Ovaj program trebao bi se sastaviti i izvršiti na Arduino UNO -u.

Korak 4: Od Arduina do DIP čipa na ploči za kruh

Od Arduina do DIP čipa na ploči za kruh
Od Arduina do DIP čipa na ploči za kruh

Sada kada se program izvodi na Arduinu, više nam ne treba sama ploča Arduino. Sve što nam treba je CPU.

Pažljivo uklonite Atmegu 328P iz utičnice Arduino UNO i po želji umetnite zamjenu.

Stavite Atmegu 328P na ploču. Stavite kraj tako da okretnica bude okrenuta prema gore na ploči za kruh. Pin 1 je gornji lijevi pin. Pin 2 je sljedeći dolje, pa na pin 14 koji se nalazi dolje lijevo. Zatim je pin 15 donji desni donji dio, a pinovi 16 do 28 broje unatrag desnu stranu čipa.

Spojite pinove 8 i 22 na masu.

Spojite pin 7 na VCC (+5V).

Spojite kvarcni kristal od 16 Mhz između pinova 9 i 10. Također mali kondenzator (22pF) između pina 9 i mase, te između pina 10 i mase. To Atmegi 328P daje taktu od 16 Mhz. Na drugim mjestima postoje upute o poučavanju 328P -a da umjesto toga koristi svoj unutarnji sat od 8 MHz koji bi uštedio nekoliko dijelova, ali bi to usporilo procesor.

Arduino GPIO portovi 5, 6, 7 i 8, koje smo koristili za ulazne pinove, zapravo su fizički pinovi 11, 12, 13, 14 na Atmegi 328P. To bi bile četiri donje igle s lijeve strane.

Arduino GPIO portovi 11, 10 i 9, koje smo koristili za izlazne pinove, zapravo su fizički pinovi 17, 16, 15 na Atmegi 328P. To bi bile tri donje igle s desne strane.

Priključio sam LED diode na ove pinove kao i prije.

Korak 5: Zaključak

Zaključak
Zaključak

TTL čipovi djeluju, ali potrebno je mnogo njih da se bilo što izgradi. FPGA rade jako dobro, ali nisu jeftine. Ako možete živjeti s manje IO pinova i nižom brzinom, onda bi vam Atmega 328P mogao biti čip.

Neke stvari koje treba imati na umu:

FPGA:

Za

- Može podnijeti signale velike brzine. Budući da ne postoji CPU za uska grla u obradi sve do jedne instrukcije odjednom, ograničavajući faktor je kašnjenje prostiranja kroz vrata na danom krugu. U mnogim slučajevima to može biti mnogo brže od sata koji je isporučen s čipom. Za moj dizajn, izračunato kašnjenje omogućilo bi twoBitAdder-u da odgovori na oko 100 milijuna promjena ulaznih vrijednosti u sekundi (100Mhz) iako je ugrađeni sat samo kristal od 12Mhz.

- Kako dizajn postaje sve složeniji, performanse postojećih krugova se ne degradiraju (mnogo). Budući da dodavanje sklopova u tkaninu jednostavno stavlja nešto novo u neiskorištene nekretnine, to ne utječe na postojeća kola.

- Ovisno o FPGA -i, broj dostupnih IO pinova može biti vrlo velik i općenito nisu zaključani u bilo koju određenu svrhu.

Kon

- Može biti skupo i/ili teško doći do njega.

- Obično dolazi u BGA paketu koji zahtijeva neku vrstu ploče za rad s čipom u bilo kojem amaterskom projektu. Ako ga ugrađujete u dizajn s prilagođenom višeslojnom SMT PCB-om, to nije problem.

- Većina proizvođača FPGA -a nudi vlastiti softver za dizajn zatvorenog koda, koji u nekim slučajevima može koštati novca ili imati datum isteka licence.

Arduino kao FPGA:

Za

- Jeftino, a lako ga je nabaviti. Samo potražite atmega328p-pu na Amazonu. Oni bi trebali iznositi oko 4 USD po komadu. Nekoliko ih prodavača prodaje u lotovima od 3 ili 4 komada.

- Ovo je DIP paket, što znači da savršeno pristaje na ploču s vanjskim iglama.

- Ovo je 5V uređaj koji može olakšati povezivanje s drugim 5V uređajima.

Kon

- ATMEGA328P ima ograničen broj IO pinova (23), a nekoliko njih je rezervirano za određene zadatke.

- S povećanjem složenosti kola povećava se količina koda pokrenutog u metodi Arduino petlje, što znači da je trajanje svakog ciklusa duže.

- Čak i ako je složenost kruga niska, svaki ciklus zahtijeva mnogo CPU uputa za dohvaćanje vrijednosti ulaznog pina, zapisivanje vrijednosti izlaznog pina i povratak na vrh petlje. S kristalom od 16 MHz, čak i pri jednoj instrukciji po ciklusu takta, petlja neće raditi više od možda milijun puta u sekundi (1 MHz). Za većinu elektroničkih amaterskih projekata to je ipak brže nego što je potrebno.

Preporučeni: