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: Kako radi računar 2024, Novembar
Anonim
Arduino kao jeftina FPGA ploča
Arduino kao jeftina FPGA ploča

Dizajniranje hardverskih logičkih kola može biti zabavno. Stari način da se to učini bilo je s NAND kapijama, na ploči za kruh, ožičenim kratkospojnicima. To je još uvijek moguće, ali ne treba mnogo prije nego što broj kapija izmakne kontroli. Novija opcija je upotreba FPGA (Field Programmable Gate Array) polja. Ovi se čipovi mogu prepraviti 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, čime se digitalno kolo učinkovito stavlja 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 sabirač. 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. Potrebno mu je 14 NAND kapija. Koristio sam 4 quad NAND gate TTL čipa i ožičio ih na ploči za kruh.

Dodao sam neke LED diode (ne zaboravite na otpornike za ograničavanje struje) 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.

Ovo kolo radi, ali već zauzima 4 TTL čipa i predstavlja pacovsko gnijezdo žica. Da je potrebno više komada, bilo bi više ploča za kruh i više skakača. Vrlo brzo veličina kola 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 "visoki", 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 "kolo" na 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 je također potrebna za dodjeljivanje 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 koja logička kapija. To znači da svaka kapija može biti NAND kapija ili kapija ILI, a ne kapija, NOR, XOR itd. Osim toga, svaka kapija može rukovati s više od dva ulaza. Ovo je specifično za svakog proizvođača, ali na iCE40 -u svaka kapija može rukovati sa 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 respektivno. Ovo je specifično za fpga čip i probojnu ploču na kojoj se nalazi, te kako su ti pinovi spojeni na PMOD port. Ovo je dostupno u tehničkim podacima za ovu FPGA ploču.

Lattice nudi vlastiti lanac alata za sintetiziranje (FPGA ekvivalent kompilaciji za CPU -ove) sklopova iz Veriloga, ali sam koristio besplatni lanac otvorenih alata icestorm (https://www.clifford.at/icestorm/). Upute za instalaciju dostupne su na toj web stranici. 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

icepack 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 kola, ali je moćan. Ima preko 1000 vrata, a za ovo maleno kolo koristi samo 3. Ekvivalent NAND kapije koristio je 14 vrata. To je zbog činjenice da svaka kapija može postati bilo koja kapija, a svaka kapija je zapravo 4 kapija. Svaka kapija može učiniti više. Ako vam treba više kapija, iCEstick ima većeg brata sa 8000 vrata, što košta otprilike dvostruko. Drugi proizvođači imaju i drugu ponudu, ali cijena može biti prilično velika.

Korak 3: Od FPGA do Arduina

Od FPGA do Arduina
Od FPGA do Arduina

FPGA -e su odlične, ali mogu biti skupe, teško ih je nabaviti i nisu prilagođene pločama. Jeftini č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đe 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 izvući Atmegu 328 P s UNO -a i koristiti je sami. Ipak, koristio sam UNO ploču kao programer za Atmegu.

U ovom trenutku će vam trebati

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

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

Cilj je pretvoriti verilog datoteku u arduino projekt koji se može učitati u 328P. Arduino je zasnovan na C ++. Zgodno postoji prevoditelj sa Veriloga na C ++, nazvan Verilator (https://www.veripool.org/wiki/verilator). Verilator je namijenjen dizajnerima hardvera koji trebaju simulirati svoje dizajne prije nego što ih povežu sa skupim hardverom. Verilator cross kompilira verilog u C ++, zatim korisnik daje testni pojas za pružanje simuliranih ulaznih signala i snimanje izlaznih signala. Koristit ćemo ga za ubacivanje 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, osim što je potrebno promijeniti nazive pinova. Dodao sam donju crtu (_) na početak svakog. To je potrebno jer arduino biblioteke sadrže 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 sledeć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 datoteke, 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 sketchbook direktorija. Kopirajte svoje datoteke VtwoBitAdder.h i VtwoBitAdder.cpp u ovu fasciklu twoBitAdder u vašoj mapi Arduino.

Sada kopirajte datoteke zaglavlja iz instalacije verifikatora.

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

konačno kopirajte u std c ++ biblioteku sa https://github.com/maniacbug/StandardCplusplus. Prema njihovim uputama za instalaciju "Ovo je instalirano kao obična Arduino biblioteka. Raspakirajte sadržaj distribucije u mapu" biblioteke "ispod vaše skice. Na primjer, moja skica je na/home/maniacbug/Source/Arduino, pa je ova biblioteka 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 testni pojas koji verilator očekuje, koji postavlja ulazne/izlazne pinove, zatim u petlji, čita ulazne pinove, šalje ih u VtwoBitAdder (prevedena verzija našeg kola), zatim čita izlaze iz VtwoBitAddera i primjenjuje ih na izlazne pinove.

Ovaj program treba kompajlirati i izvršiti na Arduino UNO -u.

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

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 nije potrebna sama ploča Arduino. Sve što nam treba je CPU.

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

Stavite Atmegu 328P na matičnu 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, i tako dalje do pina 14 koji se nalazi dolje lijevo. Zatim je pin 15 donji desni donji dio, a pinovi 16 do 28 računaju 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 daje Atmegi 328P brzinu takta od 16 Mhz. Na drugim mjestima postoje upute o tome kako naučiti 328P da umjesto toga koristi svoj interni 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 rade, 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 je Atmega 328P možda čip za vas.

Neke stvari koje treba imati na umu:

FPGA:

Pro

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

- Kako dizajn postaje sve složeniji, performanse postojećih kola 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.

Con

- 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 sa č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 novac ili imati datum isteka licence.

Arduino kao FPGA:

Pro

- Jeftino, a lako ga je nabaviti. Samo potražite atmega328p-pu na Amazonu. Trebale bi biti 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 pinovima.

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

Con

- 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 kola niska, svaki ciklus zahtijeva mnogo CPU uputstava za dohvaćanje vrijednosti ulaznih pinova, zapisivanje vrijednosti izlaznih pinova i povratak na vrh petlje. Sa kristalom od 16 MHz, čak i pri jednoj instrukciji po ciklusu takta, petlja neće raditi više od možda 1 milion puta u sekundi (1 MHz). Za većinu elektroničkih amaterskih projekata to je ipak brže nego što je potrebno.

Preporučuje se: