INHOUDSOPGAWE:

Arduino as 'n goedkoop broodbord FPGA: 5 stappe (met foto's)
Arduino as 'n goedkoop broodbord FPGA: 5 stappe (met foto's)

Video: Arduino as 'n goedkoop broodbord FPGA: 5 stappe (met foto's)

Video: Arduino as 'n goedkoop broodbord FPGA: 5 stappe (met foto's)
Video: Wat is (een) Arduino, en welk bord kan je het beste kopen? (2019) 2024, November
Anonim
Arduino as 'n goedkoop broodplank -FPGA
Arduino as 'n goedkoop broodplank -FPGA

Dit kan lekker wees om hardeware -logika -stroombane te ontwerp. Die ou skool se manier om dit te doen was met NAND -hekke, op 'n broodbord, bedraad met springdrade. Dit is nog steeds moontlik, maar dit neem nie veel voordat die aantal hekke handuit ruk nie. 'N Nuwer opsie is om 'n FPGA (Field Programmable Gate Array) te gebruik. Hierdie skyfies kan hulself herlei tot 'n digitale logiese kring wat u kan ontwerp, maar is nie goedkoop en geredelik beskikbaar nie. Ek sal wys hoe hierdie FPGA vervang kan word deur 'n goedkoop Atmega -chip van 'n Arduino UNO, wat die digitale stroombaan effektief in 'n DIP -pakket plaas, wat baie broodbordvriendelik is.

Stap 1: Ontwerp die stroombaan wat die "FPGA" sal verteenwoordig

Ontwerp die stroombaan wat die
Ontwerp die stroombaan wat die
Ontwerp die stroombaan wat die
Ontwerp die stroombaan wat die
Ontwerp die stroombaan wat die
Ontwerp die stroombaan wat die

Ek sal 'n 2 bit + 2 bit adder bou. Dit neem twee pare logiese invoerpenne en gee 'n drieling uitvoerpenne uit.

Sien die skematiese op die foto om dit met NAND -hekke te doen. Dit benodig 14 NAND -hekke. Ek het 4 NAND -hek -TTL -skyfies gebruik, en dit op die broodbord vasgemaak.

Ek het 'n paar LED's bygevoeg (moenie die huidige beperkende weerstande vergeet nie) om aan te toon wanneer die invoer- en uitsetpenne aan (hoog) en wanneer hulle af is (laag). Om die invoerpenne aan te dryf, het ek dit óf na die grondrail gespring óf na die positiewe kragrail.

Hierdie stroombaan werk, maar dit neem reeds 4 TTL -skyfies op en is 'n rotnes van drade. As meer stukkies nodig was, sou daar meer broodborde en meer springers wees. Die grootte van die stroombaan sou baie vinnig handuit ruk.

Aan die ander kant, wanneer hulle met TTL -hekke werk, lewer hulle nie presies 0V of 5V soos wat 'n mens sou verwag nie. Hulle lewer dikwels ongeveer 3V vir "hoog", maar die presiese spanning is in 'n baie wye reeks. Dieselfde stroombaan wat die CMOS -ekwivalente skyfies gebruik, het 'n beter skakeling van presies 0V tot presies 5V.

Stap 2: Voer die FPGA in

Voer die FPGA in
Voer die FPGA in
Voer die FPGA in
Voer die FPGA in

'N FPGA is 'n fantastiese chip wat letterlik 'n kombinasie van logiese hekke kan word wat in enige kombinasie aan mekaar gekoppel is. Die een ontwerp die "kring" in 'n hardeware -ontwerptaal (HDL). Daar is verskeie sulke tale, waarvan een Verilog genoem word. Die.v -lêer op die foto is die Verilog -ekwivalent van die tweebitsadder. Die.pch -lêer daaronder is ook nodig om die invoer- en uitvoerpenne wat in die verilog -lêer genoem word, aan werklike hardeware -penne op die chip toe te ken.

In hierdie geval gebruik ek 'n Lattice Semiconductors iCEstick -ontwikkelingsbord (https://www.latticesemi.com/icestick). Die werklike FPGA-chip is 'n iCE40HX-1k, met 'n bietjie meer as 1000 hekke, wat elkeen 'n logiese hek kan word. Dit beteken dat elke hek 'n NAND -hek kan wees, of 'n OF -hek, NIE hek, NOR, XOR, ens. Boonop kan elke hek meer as twee insette hanteer. Dit is spesifiek vir elke vervaardiger, maar op die iCE40's kan elke hek 4 insette hanteer. Elke hek is dus baie meer bekwaam as die 2 ingang NAND -hekke.

Ek moes die 4 invoerhout en die 3 uitvoerpenne onderskeidelik toewys aan fisiese penne 91, 90, 88, 87, 81, 80 en 79. Dit is spesifiek vir die fpga -chip en die uitbreekbord waarop dit is, en hoe die penne aan die PMOD -poort gekoppel word. Dit is beskikbaar in die gegewensblaaie vir hierdie FPGA -bord.

Lattice bied hul eie werktuigketting om (die FPGA -ekwivalent van die opstel van CPU's) stroombane van Verilog te sintetiseer, maar ek het die gratis open source tool chain chain icestorm (https://www.clifford.at/icestorm/) gebruik. Die installasie -instruksies is op daardie webwerf beskikbaar. Met die installering van ysstorm en die verilog- en pcf -lêer, is die opdragte om hierdie kring op die FPGA te laai:

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

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

yspak twoBitAdder.asc twoBitAdder.bin

iceprog twoBitAdder.bin

Dit werk goed, maar die aflewering van hierdie iCEstick kos ongeveer $ 30. Dit is nie die goedkoopste manier om 'n digitale stroombaan te bou nie, maar dit is kragtig. Dit het meer as 1000 hekke en vir hierdie klein stroombaan gebruik dit slegs 3 daarvan. Die NAND -hekekwivalent het 14 hekke gebruik. Dit is te danke aan die feit dat elke hek enige soort hek kan word, en elke hek eintlik 'n 4 -ingangshek is. Elke hek kan meer doen. As u meer hekke benodig, het die iCEstick 'n groter broer met 8000 hekke, wat ongeveer dubbel kos. Ander vervaardigers het ander aanbiedings, maar die prys kan redelik skerp word.

Stap 3: Van FPGA tot Arduino

Van FPGA tot Arduino
Van FPGA tot Arduino

FPGA's is wonderlik, maar kan duur wees, moeilik bekombaar en is nie baie broodvriendelik nie. 'N Broodplankvriendelike en goedkoop chip is die Atmega 328 P, wat in 'n netjiese DIP -pakket kom, ideaal vir broodplankry. Dit kan ook vir ongeveer $ 4 gekry word. Dit is die hart van die Arduino UNO. U kan natuurlik die hele UNO gebruik, maar wees goedkoop; ons kan die Atmega 328 P van die UNO af trek en dit self gebruik. Ek het wel die UNO -bord as programmeerder vir die Atmega gebruik.

Op hierdie punt het u nodig

1. 'n Arduino UNO, met die verwyderbare Atmega 328P -SVE.

2. Nog 'n Atmega 328P met die Arduino-laaiprogram wat vooraf verbrand is, om die een wat ons uit die UNO gaan haal, te vervang. (Opsioneel as u nog steeds 'n bruikbare UNO wil hê).

Die doel is om die verilog -lêer om te skakel in 'n arduino -projek wat in die 328P gelaai kan word. Arduino is gebaseer op C ++. Daar is gerieflik 'n vertaler van Verilog na C ++, genaamd Verilator (https://www.veripool.org/wiki/verilator). Verilator is bedoel om gebruik te word deur hardeware -ontwerpers wat hul ontwerpe moet simuleer voordat hulle die ontwerpe aan duur hardeware verbind. Verilator cross stel die verilog saam na C ++, dan bied die gebruiker 'n toetsharnas om gesimuleerde insetseine te verskaf en die uitsetseine aan te teken. Ons gaan dit gebruik om die verilog -ontwerp met die Arduino -werktuigketting in die Atmega 328P te druk.

Installeer eers Verilator. Volg die instruksies op

Installeer ook die Arduino IDE en toets of dit via USB aan die Arduino UNO kan koppel.

Ons gebruik dieselfde verilog -lêer as vir die FPGA, behalwe dat die name van die penne verander moet word. Ek het 'n onderstreep (_) by die begin van elk gevoeg. Dit is nodig omdat die arduino -biblioteke 'n koptekstlêer bevat wat dinge soos B0, B001, ens, na binêre getalle vertaal. Die ander invoerpenname sou goed gewees het soos dit is, maar B0 en B1 sou veroorsaak het dat die bou misluk het.

Voer die volgende in die gids met twoBitAdder.v en iCEstick.pcf uit:

verilator -Wall --cc twoBitAdder.v

Dit sal 'n subgids genaamd obj_dir skep wat verskeie nuwe lêers bevat. Ons benodig slegs die kop- en cpp -lêers, VtwoBitAdder.h, VtwoBitAdder.cpp, VtwoBitAdder_Syms.h en VtwoBitAdder_Syms.cpp.

Skep in die Arduino IDE 'n nuwe skets genaamd twoBitAdder.ino. Dit skep die ino -lêer in 'n nuwe gids, ook genoem twoBitAdder, in u Arduino -sketsboekgids. Kopieer u VtwoBitAdder.h- en VtwoBitAdder.cpp -lêers na hierdie twoBitAdder -lêergids in u Arduino -lêergids.

Kopieer nou die koplêers van die verilator -installasie.

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

kopieer uiteindelik in die std c ++ biblioteek vanaf https://github.com/maniacbug/StandardCplusplus. Volgens hul installasie -instruksies Dit word geïnstalleer net soos 'n gewone Arduino -biblioteek. Pak die inhoud van die verspreiding uit in die gids 'biblioteke' onder u sketsboek. My sketsboek is byvoorbeeld by/home/maniacbug/Source/Arduino, dus hierdie biblioteek is in/home/maniacbug/Source/Arduino/biblioteke/StandardCplusplus.

Stel u Arduino IDE terug nadat u dit geïnstalleer het."

Vervang nou die inhoud van twoBitAdder.ino met die een wat op hierdie stap verskaf word. Dit is 'n toetsharnas wat die verilator verwag, wat die invoer-/uitvoerpenne stel, dan in die lus, die invoerpenne lees, dit na die VtwoBitAdder (die vertaalde weergawe van ons stroombaan) voer, dan die uitsette van VtwoBitAdder lees en dit toepas hulle na die uitvoerpenne.

Hierdie program moet opstel en uitvoer op die Arduino UNO.

Stap 4: Van Arduino tot DIP Chip op 'n broodbord

Van Arduino tot DIP Chip op 'n broodbord
Van Arduino tot DIP Chip op 'n broodbord

Noudat die program op die Arduino loop, hoef ons nie meer die Arduino -bord self nie. Al wat ons nodig het, is die SVE.

Verwyder die Atmega 328P versigtig uit die Arduino UNO -aansluiting en plaas die vervanging daarvan moontlik.

Sit die Atmega 328P op die broodbord. Sit die uiteinde met die skeut op die broodbord. Speld 1 is die pen links bo. Speld 2 is die volgende een, ensovoorts na pen 14 wat links onder is. Dan is pen 15 regs onder, en penne 16 tot 28 tel terug aan die regterkant van die skyfie.

Verbind penne 8 en 22 met die grond.

Koppel pen 7 aan VCC (+5V).

Koppel 'n 16Mhz kwarts kristal tussen penne 9 en 10. Ook 'n klein kondensator (22pF) tussen pen 9 en grond, en tussen pen 10 en grond. Dit gee die Atmega 328P die 16Mhz kloksnelheid. Daar is elders instruksies om die 328P te leer om eerder die interne 8Mhz -klok te gebruik, wat 'n paar dele kan bespaar, maar dit sal die verwerker vertraag.

Die Arduino GPIO -poorte 5, 6, 7 en 8, wat ons vir die invoerpenne gebruik het, is eintlik die fisiese penne 11, 12, 13, 14 op die Atmega 328P. Dit sou die vier onderste penne aan die linkerkant wees.

Die Arduino GPIO -poorte 11, 10 en 9, wat ons vir die uitvoerpenne gebruik het, is eintlik die fisiese penne 17, 16, 15 op die Atmega 328P. Dit sou die onderste drie penne aan die regterkant wees.

Ek het die LED's soos voorheen aan hierdie penne gekoppel.

Stap 5: Gevolgtrekking

Afsluiting
Afsluiting

TTL -skyfies werk, maar dit verg baie daarvan om enigiets te bou. FPGA's werk baie goed, maar is nie goedkoop nie. As u met minder IO -penne en 'n laer spoed kan leef, is 'n Atmega 328P moontlik die chip vir u.

'N Paar dinge om in gedagte te hou:

FPGA:

Pro

- Kan hoëspoedseine hanteer. Omdat daar geen CPU is om 'n bottelnekverwerking tot een instruksie op 'n slag te verwerk nie, is die beperkende faktor die voortplantingsvertraging deur die hekke op die gegewe stroombaan. In baie gevalle kan dit baie vinniger wees as die horlosie wat by die chip aangebring is. Vir my ontwerp sou die berekende vertraging die tweeBitAdder moontlik gemaak het om te reageer op ongeveer 100 miljoen veranderinge in insetwaardes per sekonde (100Mhz), alhoewel die ingeboude klok slegs 'n 12Mhz kristal is.

- Namate die ontwerp ingewikkelder raak, verswak die prestasie van die bestaande kringe nie (veel). Omdat die byvoeging van stroombane bloot iets nuuts in ongebruikte vaste eiendom plaas, beïnvloed dit nie die bestaande stroombane nie.

- Afhangende van die FPGA, kan die aantal beskikbare IO -penne baie hoog wees en word dit gewoonlik nie vir 'n spesifieke doel toegesluit nie.

Kon

- Kan duur en/of moeilik wees om te kry.

- Gewoonlik kom dit in 'n BGA -pakket wat 'n soort uitbreekbord benodig om met die chip in enige amateurprojek te werk. As u dit in 'n ontwerp bou met 'n aangepaste multi-laag SMT-printplaat, is dit geen probleem nie.

- Die meeste FPGA -vervaardigers bied hul eie sagteware vir geslote bronne aan, wat in sommige gevalle geld kan kos of 'n lisensie se vervaldatum kan hê.

Arduino as 'n FPGA:

Pro

- Goedkoop en maklik om te kry. Soek net na atmega328p-pu op Amazon. Hulle behoort ongeveer $ 4 per stuk te wees. Verskeie verkopers verkoop dit in baie van 3 of 4.

- Dit is 'n DIP -pakket, wat beteken dat dit perfek pas op 'n broodbord met sy eksterne penne.

- Dit is 'n 5V -toestel wat die koppelvlak met ander 5V -toestelle maklik kan maak.

Kon

- Die ATMEGA328P het 'n beperkte aantal IO -penne (23), en verskeie daarvan is voorbehou vir spesifieke take.

- Namate die kringkompleksiteit toeneem, neem die hoeveelheid kode wat uitgevoer word in die Arduino -lusmetode toe, wat beteken dat die duur van elke siklus langer is.

- Selfs as die kompleksiteit van die kring laag is, benodig elke siklus baie CPU -instruksies om die invoerpenwaardes te haal en die uitsetpenwaardes te skryf en terug te keer na die bokant van die lus. Met 'n 16Mhz -kristal, selfs met een instruksie per kloksiklus, loop die lus nie meer as miskien 1 miljoen keer per sekonde (1Mhz) nie. Vir die meeste amateurelektronika -projekte is dit egter baie vinniger as wat nodig is.

Aanbeveel: