Sisukord:
- Samm: kujundage vooluring, mida "FPGA" esindab
- Samm: sisestage FPGA
- Samm: FPGA -lt Arduinole
- Samm 4: Arduinost DIP -kiibini leivalaual
- 5. samm: järeldus
Video: Arduino odava leivaplaadina FPGA: 5 sammu (piltidega)
2024 Autor: John Day | [email protected]. Viimati modifitseeritud: 2024-01-30 08:49
Riistvara loogikalülituste kujundamine võib olla lõbus. Vana kooli viis seda teha oli NAND -väravatega, leivaplaadil, mis oli ühendatud hüppajajuhtmetega. See on endiselt võimalik, kuid ei lähe palju aega, enne kui väravate arv käest ära läheb. Uuem võimalus on kasutada FPGA (Field Programmable Gate Array). Need kiibid võivad end ümber kujundada mis tahes digitaalseks loogikaahelaks, mille saate kujundada, kuid pole odavad ja kergesti kättesaadavad. Näitan, kuidas seda FPGA -d saab asendada odava Atmega kiibiga Arduino UNO -lt, pannes digitaalse vooluahela tõhusalt DIP -paketti, mis on väga leivasõbralik.
Samm: kujundage vooluring, mida "FPGA" esindab
Ma ehitan 2 -bitise + 2 -bitise liitja. See võtab kaks paari loogilisi sisendnööpe ja väljastab ühe tripleti väljundnööpnõela.
Selleks, et seda teha NAND -väravatega, vaadake joonisel olevat skeemi. See vajab 14 NAND väravat. Ma kasutasin 4 quad NAND gate TTL kiipi ja ühendasin need leivalauaga.
Lisasin mõned valgusdioodid (ärge unustage voolu piiravaid takisteid), et näidata, millal sisend- ja väljundpoldid olid sisse lülitatud (kõrge) ja millal need olid väljas (madal). Sisendtihvtide juhtimiseks hüppasin need kas maapealsele rööpale või positiivse võimsusega rööpale.
See vooluring töötab, kuid võtab juba 4 TTL -kiipi ja on rottide juhtmete pesa. Kui oleks vaja rohkem juppe, oleks rohkem leivalaudu ja rohkem hüppajaid. Väga kiiresti läks ahela suurus käest.
Vahemärkusena tuleb märkida, et TTL -väravatega töötades ei väljasta need täpselt 0 V ega 5 V, nagu võiks eeldada. Sageli väljastavad nad "kõrge" jaoks umbes 3 V, kuid täpne pinge on väga laias vahemikus. Sama skeem, mis kasutab CMOS -i samaväärseid kiipe, oleks parem täpselt 0V kuni täpselt 5V kiikudega.
Samm: sisestage FPGA
FPGA on fantastiline kiip, millest võib sõna otseses mõttes saada mis tahes kombinatsioon loogikaväravast, mis on ühendatud mis tahes kombinatsiooniga. Üks kujundab "vooluringi" riistvara disainikeeles (HDL). Selliseid keeli on mitu, millest üks kannab nime Verilog. Pildil olev.v -fail on kahe bitise liitja Verilogi ekvivalent. Selle all olevat.pch -faili on vaja ka verilog -failis nimetatud sisend- ja väljundpistikute määramiseks kiibil olevatele riistvarapistikutele.
Sel juhul kasutan Lattice Semiconductors iCEsticki arendusplaati (https://www.latticesemi.com/icestick). Tegelik FPGA kiip on iCE40HX-1k, millel on veidi üle 1000 värava, millest igaüks võib muutuda mis tahes loogikaväravaks. See tähendab, et iga värav võib olla NAND -värav või VÕI -värav, MITTE -värav, NOR, XOR jne. Lisaks saab iga värav käsitseda rohkem kui kahte sisendit. See on iga tootja jaoks spetsiifiline, kuid iCE40 puhul saab iga värav hakkama 4 sisendiga. Seega on iga värav tunduvalt võimekam kui 2 sisend -NAND -väravat.
Pidin 4 sisendmänni ja 3 väljundnõela määrama vastavalt füüsilistele tihvtidele 91, 90, 88, 87, 81, 80 ja 79. See on spetsiifiline fpga kiibi ja selle vahekaardil ning sellel, kuidas need tihvtid PMOD -pordiga ühendatakse. See on saadaval selle FPGA plaadi andmelehtedel.
Lattice pakub oma tööriistaketti, et sünteesida (protsessorite kompileerimiseks FPGA) ahelaid Verilogist, kuid ma kasutasin tasuta avatud lähtekoodiga tööriistaketi icestorm (https://www.clifford.at/icestorm/). Paigaldusjuhised on sellel saidil saadaval. Kui icestorm on installitud ning verilog ja pcf -fail, on selle vooluahela FPGA -le laadimise käsud järgmised:
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
See töötab suurepäraselt, kuid selle iCEsticki saatmine maksab umbes 30 dollarit. See ei ole odavaim viis digitaalahela ehitamiseks, kuid see on võimas. Sellel on üle 1000 värava ja selle väikese vooluringi jaoks kasutab see ainult 3 neist. NAND värava ekvivalentis kasutati 14 väravat. See on tingitud asjaolust, et igast väravast võib saada ükskõik milline värav ja iga värav on tegelikult 4 sisendvärav. Iga värav suudab rohkem. Kui vajate rohkem väravaid, on iCEstickil suurem vend 8000 väravaga, mis maksab umbes kaks korda. Teistel tootjatel on muid pakkumisi, kuid hind võib olla üsna järsk.
Samm: FPGA -lt Arduinole
FPGA -d on suurepärased, kuid võivad olla kallid, raskesti kättesaadavad ja ei ole väga leibade jaoks sõbralikud. Leivaplaadisõbralik ja odav kiip on Atmega 328 P, mis on saadaval korralikus DIP -pakendis, mis sobib ideaalselt leivalauale. Seda saab ka umbes 4 dollari eest. See on Arduino UNO süda. Loomulikult võiksite kasutada kogu UNO -d, kuid olge odav, saame Atmega 328 P UNO -lt maha tõmmata ja kasutada seda iseenesest. Kuid ma kasutasin UNO plaati Atmega programmeerijana.
Sel hetkel vajate
1. Arduino UNO koos eemaldatava Atmega 328P protsessoriga.
2. Teine Atmega 328P, millel on eelpõletatud Arduino alglaadur, et asendada see, mille kavatseme UNO-st välja võtta. (Valikuline, eeldades, et soovite siiski kasutada kasutatavat UNO -d).
Eesmärk on muuta verilogi fail arduino projektiks, mida saab laadida 328P -sse. Arduino põhineb C ++ -l. Mugavalt on olemas tõlkija Verilogist C ++ keelde, nimega Verilator (https://www.veripool.org/wiki/verilator). Verilator on mõeldud kasutamiseks riistvara disaineritele, kes peavad enne nende disainilahenduste kasutamist kallile riistvarale oma disaini simuleerima. Verilator cross kompileerib verilogi väärtuseks C ++, seejärel annab kasutaja testrakmed simuleeritud sisendsignaalide edastamiseks ja väljundsignaalide salvestamiseks. Kasutame seda verilogi kujunduse toppimiseks Atmega 328P -sse, kasutades Arduino tööriistaketti.
Esmalt installige Verilator. Järgige juhiseid aadressil
Installige ka Arduino IDE ja kontrollige, kas see saab USB kaudu Arduino UNO -ga ühenduse luua.
Kasutame sama verilogi faili nagu FPGA puhul, välja arvatud see, et tihvtide nimesid tuleb muuta. Lisasin igale allakriipsutuse (_). Seda on vaja, sest arduino teegid sisaldavad päisefaili, mis tõlgib näiteks B0, B001 jne kahendarvudesse. Teised sisendpinna nimed oleksid olnud kenad, kuid B0 ja B1 oleksid ehituse ebaõnnestumise põhjustanud.
Käivitage kataloogis, mis sisaldab twoBitAdder.v ja iCEstick.pcf järgmist:
verilaator -sein --cc twoBitAdder.v
See loob alamkataloogi nimega obj_dir, mis sisaldab mitmeid uusi faile. Vajame ainult päise- ja cpp -faile VtwoBitAdder.h, VtwoBitAdder.cpp, VtwoBitAdder_Syms.h ja VtwoBitAdder_Syms.cpp.
Looge Arduino IDE -s uus visand nimega twoBitAdder.ino. See loob ino -faili uude kataloogi, mida nimetatakse ka twoBitAdderiks, teie Arduino visandiraamatu kataloogi. Kopeerige oma failid VtwoBitAdder.h ja VtwoBitAdder.cpp sellesse Arduino kausta kausta twoBitAdder.
Nüüd kopeerige päisefailid verilaatori installist.
cp/usr/local/share/verilator/include/verilated*.
kopeerige lõpuks std c ++ raamatukogusse aadressilt https://github.com/maniacbug/StandardCplusplus. Nende installimisjuhiste kohaselt "See on installitud nagu tavaline Arduino raamatukogu. Pakkige levitamise sisu oma visandiraamatu all olevasse kausta" teegid ". Näiteks minu visandiraamat asub aadressil/home/maniacbug/Source/Arduino, seega on see raamatukogu on kataloogis/home/maniacbug/Source/Arduino/libraries/StandardCplusplus.
Pärast selle installimist lähtestage kindlasti Arduino IDE."
Asendage nüüd saidi twoBitAdder.ino sisu sellel etapil pakutavaga. See on testija, mida verilaator ootab ja mis seadistab sisendi/väljundi nööpnõelad, seejärel tsüklisse, loeb sisendpoldid, toidab need VtwoBitAdderile (meie vooluahela tõlgitud versioon), seejärel loeb VtwoBitAdderi väljundeid ja rakendab need väljundtihvtidele.
See programm peaks kompileerima ja käivitama Arduino UNO -s.
Samm 4: Arduinost DIP -kiibini leivalaual
Nüüd, kui programm Arduinos töötab, ei vaja me enam Arduino tahvlit ennast. Kõik, mida vajame, on protsessor.
Eemaldage Atmega 328P ettevaatlikult Arduino UNO pesast ja sisestage valikuliselt selle asendaja.
Asetage Atmega 328P leivaplaadile. Pange ots leivalauale nii, et dott oleks ülespoole suunatud. Tihvt 1 on ülemine vasak tihvt. Tihvt 2 on järgmine allapoole ja nii edasi nööpnõelale 14, mis asub all vasakul. Seejärel on tihvt 15 all paremal ja tihvtid 16 kuni 28 loendavad kiibi paremat külge üles.
Ühendage tihvtid 8 ja 22 maandusega.
Ühendage tihvt 7 VCC -ga (+5V).
Ühendage 16Mhz kvartskristall tihvtide 9 ja 10 vahele. Samuti väike kondensaator (22pF) tihvti 9 ja maa vahele ning tihvti 10 ja maa vahele. See annab Atmega 328P 16Mhz taktsagedusele. Mujal on juhiseid 328P õpetamiseks selle asemel kasutama oma sisemist 8Mhz kella, mis säästaks paar osa, kuid see aeglustaks protsessorit.
Arduino GPIO pordid 5, 6, 7 ja 8, mida kasutasime sisendnööpide jaoks, on tegelikult Atmega 328P füüsilised nööbid 11, 12, 13, 14. See oleks vasakul neli alumist tihvti.
Arduino GPIO pordid 11, 10 ja 9, mida kasutasime väljundnõelte jaoks, on tegelikult Atmega 328P füüsilised nööbid 17, 16, 15. See oleks paremal kolm alumist tihvti.
Ma ühendasin LED -id nende tihvtidega nagu varem.
5. samm: järeldus
TTL -kiibid töötavad, kuid millegi ehitamiseks kulub neid palju. FPGA -d töötavad tõesti hästi, kuid pole odavad. Kui suudate elada vähemate IO -tihvtide ja madalama kiirusega, võib Atmega 328P olla teie jaoks kiip.
Mõned asjad, mida meeles pidada:
FPGA:
Pro
- Saab hakkama suure kiirusega signaalidega. Kuna puudub protsessor, mis kitsendab töötlemist kuni ühe käsuni korraga, on piiravaks teguriks vooluahela väravate kaudu levimise viivitus. Paljudel juhtudel võib see olla palju kiirem kui kiibiga kaasas olev kell. Minu disaini puhul oleks arvutatud viivitus võimaldanud twoBitAdderil reageerida umbes 100 miljonile muutusele sisendväärtustes sekundis (100 MHz), kuigi pardal olev kell on vaid 12 MHz kristall.
- Kuna disain muutub keerulisemaks, ei halvene olemasolevate vooluahelate jõudlus (palju). Kuna ahelate lisamine kangale lihtsalt paneb kasutamata kinnisvarasse midagi uut, ei mõjuta see olemasolevat vooluringi.
- Sõltuvalt FPGA -st võib saadaolevate IO -tihvtide arv olla väga suur ja üldiselt ei ole need mingil konkreetsel eesmärgil lukustatud.
Con
- See võib olla kallis ja/või raskesti kättesaadav.
- Tavaliselt on see saadaval BGA -pakendis, mis nõuab mis tahes amatöörprojektis kiibiga töötamiseks mingit purunemisplaati. Kui ehitate selle disainiks kohandatud mitmekihilise SMT-trükkplaadiga, pole see probleem.
- Enamik FPGA tootjaid pakub oma suletud lähtekoodiga projekteerimistarkvara, mis võib mõnel juhul maksta raha või mille litsentsi aegumiskuupäev on kehtiv.
Arduino kui FPGA:
Pro
- Odav ja lihtne saada. Lihtsalt otsige Amazonist atmega328p-pu. Need peaksid olema umbes 4 dollarit tükk. Paljud müüjad müüvad neid 3 või 4 kaupa.
- See on DIP -pakett, mis sobib ideaalselt leivaplaadile koos väliste tihvtidega.
- See on 5 V seade, mis muudab teiste 5 V seadmetega liidestamise lihtsaks.
Con
- ATMEGA328P -l on piiratud arv IO -kontakte (23) ja mitmed neist on reserveeritud konkreetsete ülesannete jaoks.
- Ahela keerukuse kasvades suureneb Arduino silmuse meetodil käivitatud koodi hulk, mis tähendab, et iga tsükli kestus on pikem.
- Isegi kui vooluahela keerukus on väike, nõuab iga tsükkel sisendpinna väärtuste toomiseks ja väljundpinge väärtuste kirjutamiseks ning ahela algusesse naasmiseks palju protsessori juhiseid. 16Mhz kristalli korral ei tööta tsükkel isegi ühe käsutsükli kohta tsükli jooksul rohkem kui miljon korda sekundis (1Mhz). Enamiku amatöör -elektroonika projektide puhul on see siiski palju kiirem kui vaja.
Soovitan:
Odava LDC kondensaatori mikrofoni muutmine: 7 sammu (piltidega)
Odava LDC kondensaatorimikrofoni muutmine: olen olnud pikka aega helimees ja innukas isetegija. Mis tähendab, et minu lemmikprojektid on seotud heliga. Olen ka kindlalt veendunud, et selleks, et isetegemise projekt oleks lahe, peab projekti tegemise väärtuseks olema üks kahest tulemusest
Odava Attiny Arduino plaadi valmistamine: 4 sammu (piltidega)
Odava Attiny Arduino plaadi valmistamine: enamasti olen ma probleemides, kui mul on vaja Arduinot mõnes projektis, kus mul on vaja vähe sisend-/väljundpistikuid. Tänu Arduino-Tiny platvormile saab Arduino programmi põletada Avr-tillukesse seeriasse nagu Attiny 85/45Arduino-Tiny on avatud lähtekoodiga ATtiny komplekt
ARUPI - odava hinnaga automatiseeritud salvestusseade/autonoomne salvestusseade (ARU) helimaastiku ökoloogidele: 8 sammu (koos piltidega)
ARUPI - odavate automatiseeritud salvestusseade/autonoomne salvestusseade (ARU) helimaastiku ökoloogidele: selle juhendi on kirjutanud Anthony Turner. Projekt töötati välja Kenti ülikooli arvutikooli kuuri suure abiga (hr Daniel Knox oli suureks abiks!). See näitab teile, kuidas luua automaatset helisalvestust
Odava radari kiiruse märk: 11 sammu (koos piltidega)
Odava radari kiiruse märk: kas olete kunagi tahtnud ehitada oma odava radari kiiruse märgi? Ma elan tänaval, kus autod sõidavad liiga kiiresti, ja muretsen oma laste turvalisuse pärast. Arvasin, et oleks palju turvalisem, kui saaksin paigaldada oma radari kiiruse märgi, mis kuvab
Vanade sülearvutiosade taaskasutamine odava kaasaskantava süsteemi loomiseks: 3 sammu (koos piltidega)
Vanade sülearvutiosade taaskasutamine odava kaasaskantava süsteemi loomiseks: hiljuti suri mu vana sülearvuti ja ma pidin uue ostma (RIP! 5520 jääte ilma). Sülearvuti emaplaat suri ja kahjustused olid parandatavad. Kuni viimase ajani tõin ma vaarikapiruka ja hakkasin IOT sutffiga nokitsema, kuid vajasin spetsiaalset