Sisällysluettelo:

Arduino halvalla leipälevyllä FPGA: 5 vaihetta (kuvilla)
Arduino halvalla leipälevyllä FPGA: 5 vaihetta (kuvilla)

Video: Arduino halvalla leipälevyllä FPGA: 5 vaihetta (kuvilla)

Video: Arduino halvalla leipälevyllä FPGA: 5 vaihetta (kuvilla)
Video: GATE OPENING DRIVE from a conventional tube and a wiper motor! 2024, Marraskuu
Anonim
Arduino halpa leipälauta FPGA
Arduino halpa leipälauta FPGA

Laitteiston logiikkapiirien suunnittelu voi olla hauskaa. Vanhan koulun tapa tehdä tämä oli NAND -porteilla, leipätaululla, kytketty hyppyjohtimilla. Tämä on edelleen mahdollista, mutta ei mene paljon ennen kuin porttien määrä kaatuu käsistä. Uudempi vaihtoehto on käyttää FPGA: ta (Field Programmable Gate Array). Näistä siruista voi muodostua minkä tahansa digitaalisen logiikkapiirin, jonka voit suunnitella, mutta ne eivät ole halpoja ja helposti saatavilla. Näytän, kuinka tämä FPGA voidaan korvata halvalla Atmega -sirulla Arduino UNO: sta, jolloin digitaalipiiri saadaan tehokkaasti DIP -pakettiin, joka on erittäin leipälautaystävällinen.

Vaihe 1: Suunnittele piiri, jota "FPGA" edustaa

Suunnittele piiri
Suunnittele piiri
Suunnittele piiri, joka
Suunnittele piiri, joka
Suunnittele piiri
Suunnittele piiri

Rakennan 2 -bittisen + 2 -bittisen lisäajan. Se vaatii kaksi paria loogisia tulonappeja ja antaa yhden triplettin ulostulonappeja.

Jos haluat tehdä tämän NAND -porteilla, katso kuvan kaavio. Se tarvitsee 14 NAND -porttia. Käytin 4 quad NAND -portin TTL -sirua ja kytkin ne leipäpöydälle.

Lisäsin joitain LED -valoja (älä unohda virranrajoitusvastuksia) näyttääksesi, milloin tulo- ja lähtönastat olivat päällä (korkea) ja milloin ne olivat pois päältä (alhaiset). Syöttötappien ajamiseksi joko hyppäsin ne maadoituskiskoon tai positiiviseen voimakiskoon.

Tämä piiri toimii, mutta se vie jo 4 TTL -sirua ja on rotan pesä johtoja. Jos tarvittiin lisää palasia, leipälautoja ja hyppääjiä olisi enemmän. Hyvin nopeasti piirin koko karkaisi käsistä.

Sivuhuomautuksena: kun työskentelet TTL -porttien kanssa, ne eivät lähetä tarkasti 0V tai 5V odotetulla tavalla. Ne tuottavat usein noin 3 V: n "korkealle", mutta tarkka jännite on hyvin laajalla alueella. Samalla piirillä, joka käyttää CMOS -vastaavia siruja, olisi parempi täsmälleen 0V - 5V keinu.

Vaihe 2: Anna FPGA

Anna FPGA
Anna FPGA
Anna FPGA
Anna FPGA

FPGA on fantastinen siru, josta voi kirjaimellisesti tulla mikä tahansa logiikkaporttien yhdistelmä, joka on yhdistetty mihin tahansa yhdistelmään. Yksi suunnittelee "piirin" laitteiston suunnittelukielellä (HDL). Tällaisia kieliä on useita, joista yksi on nimeltään Verilog. Kuvan.v -tiedosto on Verilog -vastine kahden bitin summaimelle. Sen alla olevaa.pch -tiedostoa tarvitaan myös määrittämään verilog -tiedostossa nimetyt tulo- ja lähtönastat sirun todellisille laitteistotappeille.

Tässä tapauksessa käytän Lattice Semiconductors iCEstick -kehityskorttia (https://www.latticesemi.com/icestick). Varsinainen FPGA-siru on iCE40HX-1k, jossa on hieman yli 1000 porttia, joista jokaisesta voi tulla mikä tahansa logiikkaportti. Tämä tarkoittaa, että jokainen portti voi olla NAND -portti tai TAI -portti, EI portti, NOR, XOR jne. Lisäksi jokainen portti pystyy käsittelemään enemmän kuin kahta tuloa. Tämä on kullekin valmistajalle ominaista, mutta iCE40: n jokainen portti pystyy käsittelemään 4 tuloa. Siten jokainen portti on huomattavasti tehokkaampi kuin 2 tuloa NAND -porttia.

Minun oli määritettävä 4 tulomäntyä ja 3 lähtötappia fyysisille nastoille 91, 90, 88, 87, 81, 80 ja 79. Tämä on ominaista fpga -sirulle ja sen purkukortille, ja se, miten nämä nastat on kytketty PMOD -porttiin. Tämä on saatavana tämän FPGA -kortin tietolomakkeista.

Lattice tarjoaa oman työkaluketjunsa syntetisoimaan (CPU: n kokoamista vastaava FPGA) virtapiirejä Verilogista, mutta käytin ilmaista avoimen lähdekoodin työkaluketjun icestormia (https://www.clifford.at/icestorm/). Asennusohjeet löytyvät kyseiseltä sivustolta. Kun icestorm on asennettu ja verilog- ja pcf -tiedosto, komennot tämän piirin lataamiseksi FPGA: han ovat:

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

Tämä toimii hyvin, mutta tämän iCEstickin lähettäminen sisältää noin 30 dollaria. Tämä ei ole halvin tapa rakentaa digitaalinen piiri, mutta se on tehokas. Siinä on yli 1000 porttia ja tämä pieni piiri käyttää vain 3 niistä. NAND -porttivastaavassa käytettiin 14 porttia. Tämä johtuu siitä, että jokaisesta portista voi tulla mikä tahansa portti, ja jokainen portti on itse asiassa 4 tuloporttia. Jokainen portti voi tehdä enemmän. Jos tarvitset lisää portteja, iCEstickillä on isompi veli 8000 portilla, mikä maksaa noin kaksinkertaisen. Muilla valmistajilla on muita tarjouksia, mutta hinta voi nousta melko jyrkäksi.

Vaihe 3: FPGA: sta Arduinoon

FPGA: sta Arduinoon
FPGA: sta Arduinoon

FPGA: t ovat hienoja, mutta ne voivat olla kalliita, vaikeasti hankittavia eivätkä kovin leipätauluystävällisiä. Leipälautaystävällinen ja halpa siru on Atmega 328 P, joka toimitetaan siistissä DIP -pakkauksessa, joka on täydellinen leipälautailuun. Sen voi saada myös noin 4 dollarilla. Tämä on Arduinon UNO: n sydän. Voit tietysti käyttää koko UNO: ta, mutta ole halpa, voimme vetää Atmega 328 P: n irti UNO: sta ja käyttää sitä itse. Käytin kuitenkin UNO -levyä Atmegan ohjelmoijana.

Tässä vaiheessa tarvitset

1. Arduino UNO, jossa irrotettava Atmega 328P -suoritin.

2. Toinen Atmega 328P, jossa Arduino-käynnistyslatain on esipoltettu, korvaamaan sen, jonka aiomme ottaa pois UNO: sta. (Valinnainen olettaen, että haluat silti käyttää käyttökelpoista UNO: ta).

Tavoitteena on muuntaa verilog -tiedosto arduino -projektiksi, joka voidaan ladata 328P: hen. Arduino perustuu C ++: een. Kätevästi on kääntäjä Verilogista C ++: ksi, nimeltään Verilator (https://www.veripool.org/wiki/verilator). Verilator on tarkoitettu laitteistosuunnittelijoiden käytettäväksi, joiden on simuloitava mallejaan ennen kuin ne sitoutuvat kalliisiin laitteisiin. Verilator -risti kääntää verilogin C ++: ksi, sitten käyttäjä tarjoaa testisarjan simuloitujen tulosignaalien tuottamiseksi ja lähtösignaalien tallentamiseksi. Aiomme käyttää sitä verilog -mallin täyttämiseen Atmega 328P: hen Arduino -työkaluketjun avulla.

Asenna ensin Verilator. Noudata ohjeita osoitteessa

Asenna myös Arduino IDE ja testaa, että se voi muodostaa yhteyden Arduino UNOon USB: n kautta.

Käytämme samaa verilog -tiedostoa kuin FPGA: ssa, paitsi että nastojen nimet on muutettava. Lisäsin alaviivan (_) jokaisen alkuun. Tätä tarvitaan, koska arduino -kirjastot sisältävät otsikkotiedoston, joka muuntaa esimerkiksi B0, B001 jne. Binääriluvuiksi. Muut syöttönastanimet olisivat olleet kunnossa sellaisenaan, mutta B0 ja B1 olisivat aiheuttaneet koontiversion epäonnistumisen.

Suorita seuraavat hakemistossa twoBitAdder.v ja iCEstick.pcf:

verilaattori -seinä --cc twoBitAdder.v

Tämä luo alihakemiston nimeltä obj_dir, joka sisältää useita uusia tiedostoja. Tarvitsemme vain otsikko- ja cpp -tiedostot, VtwoBitAdder.h, VtwoBitAdder.cpp, VtwoBitAdder_Syms.h ja VtwoBitAdder_Syms.cpp.

Luo Arduino IDE: ssä uusi luonnos nimeltä twoBitAdder.ino. Tämä luo ino -tiedoston uuteen hakemistoon, jota kutsutaan myös twoBitAdderiksi, Arduino -luonnoskirjahakemistoosi. Kopioi VtwoBitAdder.h- ja VtwoBitAdder.cpp -tiedostot tähän twoBitAdder -kansioon Arduino -kansiossasi.

Kopioi nyt otsikkotiedostot verilaattorin asennuksesta.

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

lopuksi kopioi std c ++ -kirjastoon osoitteesta https://github.com/maniacbug/StandardCplusplus. Asennusohjeiden mukaan Tämä on asennettu aivan kuten tavallinen Arduino -kirjasto. Pura jakelun sisältö luonnoskirjaasi alla olevaan kirjastojen kansioon. Esimerkiksi luonnoskirjani on osoitteessa/home/maniacbug/Source/Arduino, joten tämä kirjasto on kohteessa/home/maniacbug/Source/Arduino/libraries/StandardCplusplus.

Muista nollata Arduino IDE sen asennuksen jälkeen."

Korvaa nyt twoBitAdder.ino sisältö tässä vaiheessa annetulla sisällöllä. Tämä on verilaattorin odottama testisarja, joka asettaa tulo-/lähtönastat, sitten silmukassa, lukee tulonapit, syöttää ne VtwoBitAdderiin (piirimme käännetty versio), lukee sitten VtwoBitAdderin lähdöt ja soveltaa ne ulostulonappeihin.

Tämän ohjelman pitäisi koota ja suorittaa Arduino UNO: ssa.

Vaihe 4: Arduinosta DIP -siruun leipätaululla

Arduinosta DIP -siruun leipätaululla
Arduinosta DIP -siruun leipätaululla

Nyt kun ohjelma on käynnissä Arduinolla, emme enää tarvitse itse Arduino -levyä. Tarvitsemme vain suorittimen.

Irrota Atmega 328P varovasti Arduino UNO -liittimestä ja aseta sen tilalle vaihtoehtoisesti.

Aseta Atmega 328P leipälevylle. Aseta pää leikkuulaudalle niin, että jako osoittaa ylöspäin. Nasta 1 on vasen ylätappi. Nasta 2 on seuraava alaspäin ja niin edelleen nasta 14, joka on vasemmassa alakulmassa. Sitten tappi 15 on alhaalla oikealla ja nastat 16-28 lasketaan takaisin sirun oikealle puolelle.

Liitä nastat 8 ja 22 maahan.

Liitä nasta 7 VCC (+5V).

Liitä 16 MHz: n kvartsikide nastojen 9 ja 10 väliin. Myös pieni kondensaattori (22 pF) nastan 9 ja maan väliin sekä nastan 10 ja maan väliin. Tämä antaa Atmega 328P: lle 16 MHz kellotaajuuden. Muualla on ohjeita 328P: n opettamisesta käyttämään sen sijaan sisäistä 8 MHz: n kelloa, joka säästää pari osaa, mutta joka hidastaa prosessoria.

Arduino GPIO -portit 5, 6, 7 ja 8, joita käytimme tulonappeihin, ovat itse asiassa Atmega 328P: n fyysiset nastat 11, 12, 13, 14. Siinä olisi neljä vasemmanpuoleista pohjatappia.

Arduino GPIO -portit 11, 10 ja 9, joita käytimme lähtötappeihin, ovat itse asiassa Atmega 328P: n fyysiset nastat 17, 16, 15. Se olisi kolme alinta nastaa oikealla.

Liitin LEDit näihin nastoihin kuten ennenkin.

Vaihe 5: Johtopäätös

Johtopäätös
Johtopäätös

TTL -sirut toimivat, mutta niiden rakentaminen vaatii paljon. FPGA: t toimivat todella hyvin, mutta eivät halpoja. Jos pystyt elämään vähemmän IO -nastoja ja pienemmällä nopeudella, Atmega 328P voi olla siru sinulle.

Jotkut asiat pitää mielessä:

FPGA:

Pro

- Kestää nopeita signaaleja. Koska prosessoria ei ole pullonkaulan käsittelyyn vain yhteen käskyyn kerrallaan, rajoittava tekijä on etenemisviive annetun piirin porttien läpi. Monissa tapauksissa tämä voi olla paljon nopeampaa kuin sirun mukana toimitettu kello. Suunnitteluni osalta laskettu viive olisi antanut twoBitAdderin vastata noin 100 miljoonaan syöttöarvojen muutokseen sekunnissa (100 MHz), vaikka sisäinen kello on vain 12 MHz: n kide.

- Kun suunnittelu monimutkaistuu, nykyisten piirien suorituskyky ei heikkene (paljon). Koska piirien lisääminen kankaaseen tuo yksinkertaisesti jotain uutta käyttämättömään kiinteistöön, se ei vaikuta olemassa oleviin piireihin.

- FPGA: sta riippuen käytettävissä olevien IO -nastojen määrä voi olla erittäin suuri, eikä niitä yleensä lukita mihinkään tiettyyn tarkoitukseen.

Con

- Voi olla kallista ja/tai vaikeasti saavutettavissa.

- Toimitetaan yleensä BGA -paketissa, joka vaatii jonkinlaisen katkaisulaudan toimimaan sirun kanssa missä tahansa amatööriprojektissa. Jos rakennat sen muotoiluun mukautetulla monikerroksisella SMT-piirilevyllä, tämä ei ole ongelma.

- Useimmat FPGA -valmistajat tarjoavat oman suljetun lähdekoodin suunnitteluohjelmistonsa, joka voi joissain tapauksissa maksaa rahaa tai jolla on lisenssin vanhenemispäivä.

Arduino FPGA: na:

Pro

- Halpa ja helppo saada. Etsi vain atmega328p-pu Amazonista. Niiden pitäisi olla noin 4 dollaria/kappale. Useat myyjät myyvät niitä erinä 3 tai 4.

- Tämä on DIP -paketti, joka sopii täydellisesti leipälautaan ulkoisten nastojen kanssa.

- Tämä on 5 V: n laite, joka voi tehdä liitännän muiden 5 V: n laitteiden kanssa helpoksi.

Con

- ATMEGA328P: ssä on rajoitettu määrä IO -nastoja (23), ja monet niistä on varattu tiettyihin tehtäviin.

- Kun piirin monimutkaisuus kasvaa, Arduino -silmukamenetelmässä ajettavan koodin määrä kasvaa, mikä tarkoittaa, että kunkin syklin kesto on pidempi.

- Vaikka piirin monimutkaisuus on vähäistä, jokainen sykli vaatii monia CPU -ohjeita tulonapin arvojen noutamiseksi ja lähtönastan arvojen kirjoittamiseksi ja silmukan alkuun palaamiseksi. 16 Mhz: n kristallilla, jopa yhdellä käskyä kellokierrosta kohden, silmukka ei kulje yli miljoona kertaa sekunnissa (1 Mhz). Useimpien amatööri -elektroniikkaprojektien kohdalla se on kuitenkin paljon nopeampaa kuin tarvitaan.

Suositeltava: