Përmbajtje:

Arduino si një bukë e lirë FPGA: 5 hapa (me fotografi)
Arduino si një bukë e lirë FPGA: 5 hapa (me fotografi)

Video: Arduino si një bukë e lirë FPGA: 5 hapa (me fotografi)

Video: Arduino si një bukë e lirë FPGA: 5 hapa (me fotografi)
Video: VL53L1X Лазерный дистанционный датчик времени полета 400 см 2024, Nëntor
Anonim
Arduino si një FPGA e lirë e bukës
Arduino si një FPGA e lirë e bukës

Dizajnimi i qarqeve logjike të harduerit mund të jetë argëtues. Mënyra e vjetër e shkollës për ta bërë këtë ishte me portat NAND, në një dërrasë buke, të lidhur me tela kërcyes. Kjo është ende e mundur, por nuk duhet shumë para se numri i portave të dalë jashtë kontrollit. Një opsion më i ri është përdorimi i një FPGA (Fusha e Portave të Programueshme të Fushave). Këto patate të skuqura mund të rindërtohen për t'u bërë çdo qark logjik dixhital që mund të krijoni, por nuk janë të lira dhe të disponueshme. Unë do të tregoj se si kjo FPGA mund të zëvendësohet me një çip të lirë Atmega nga një Arduino UNO, duke vënë në mënyrë efektive qarkun dixhital në një paketë DIP, e cila është shumë miqësore me bukën.

Hapi 1: Hartoni qarkun që "FPGA" do të përfaqësojë

Dizajnoni qarkun që
Dizajnoni qarkun që
Dizajnoni qarkun që
Dizajnoni qarkun që
Dizajnoni qarkun që
Dizajnoni qarkun që

Unë do të ndërtoj një mbledhës 2 bit + 2 bit. Duhen dy palë kunja logjike të hyrjes dhe nxjerr një trefishtë kunjash dalës.

Për ta bërë këtë me portat NAND, shihni skemën në figurë. Duhen 14 porta NAND. Kam përdorur 4 patate të skuqura me katër kuadrate NAND TTL, dhe i kam lidhur në tabelën e bukës.

Shtova disa LED (mos harroni rezistencat kufizuese aktuale) për të treguar kur kunjat e hyrjes dhe daljes ishin të ndezura (të larta), dhe kur ato ishin të fikura (të ulëta). Për të drejtuar kunjat e hyrjes, unë ose i hodha në hekurudhën tokësore ose në binarët e fuqisë pozitive.

Ky qark funksionon, por tashmë merr 4 patate të skuqura TTL dhe është fole e telave të një miu. Nëse do të duheshin më shumë copa, do të kishte më shumë dërrasa buke dhe më shumë kërcyes. Shumë shpejt madhësia e qarkut do të dilte nga dora.

Nga ana tjetër, kur punoni me portat TTL, ato nuk dalin saktësisht 0V ose 5V siç mund të prisni. Ata shpesh dalin rreth 3V për "të lartë", por tensioni i saktë është në një gamë shumë të gjerë. I njëjti qark duke përdorur patate të skuqura CMOS do të kishte më mirë saktësisht 0V deri në saktësisht 5V lëkundje.

Hapi 2: Futni FPGA

Futni FPGA
Futni FPGA
Hyni në FPGA
Hyni në FPGA

Një FPGA është një çip fantastik, që mund të bëhet fjalë për fjalë çdo kombinim i portave logjike, të lidhura së bashku në çdo kombinim. Njëra harton "qarkun" në një gjuhë të projektimit të harduerit (HDL). Ka shumë gjuhë të tilla, njëra prej të cilave quhet Verilog. Skedari.v në figurë është ekuivalenti Verilog i mbledhësit me dy bit. Skedari.pch më poshtë është gjithashtu i nevojshëm për të caktuar kunjat hyrëse dhe dalëse të emërtuara në skedarin verilog në kunjat e vërtetë të harduerit në çip.

Në këtë rast unë jam duke përdorur një bord zhvillimi të Lattice Semiconductors iCEstick (https://www.latticesemi.com/icestick). Çipi aktual FPGA është një iCE40HX-1k, me pak më shumë se 1000 porta, të cilat secila mund të bëhet çdo portë logjike. Kjo do të thotë se çdo portë mund të jetë një portë NAND, ose një portë OR, JO portë, NOR, XOR, etj. Për më tepër secila portë mund të trajtojë më shumë se dy hyrje. Kjo është specifike për secilin prodhues, por në iCE40 secila portë mund të trajtojë 4 hyrje. Kështu çdo portë është shumë më e aftë se 2 portat hyrëse NAND.

Më duhej të caktoja 4 pishat hyrëse dhe 3 kunjat dalëse në kunjat fizike 91, 90, 88, 87, 81, 80 dhe 79 respektivisht. Kjo është specifike për çipin fpga dhe bordin e daljes në të, dhe se si ato kunja janë lidhur me portën PMOD. Kjo është në dispozicion në fletët e të dhënave për këtë bord FPGA.

Lattice siguron zinxhirin e tyre të veglave për të sintetizuar (FPGA ekuivalente me përpilimin për CPU) qarqet nga Verilog, por unë përdorja zinxhirin e lirë të mjeteve me burim të hapur icestorm (https://www.clifford.at/icestorm/). Udhëzimet e instalimit janë në dispozicion në atë faqe. Me icestorm të instaluar dhe skedarin verilog dhe pcf, komandat për të ngarkuar këtë qark në FPGA janë:

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

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

akullore twoBitAdder.asc twoBitAdder.bin

iceprog twoBitAdder.bin

Kjo funksionon shkëlqyeshëm, por përfshirja e transportit të këtij iCEstick do të kushtojë rreth 30 dollarë. Kjo nuk është mënyra më e lirë për të ndërtuar një qark dixhital, por është e fuqishme. Ka mbi 1000 porta dhe për këtë qark të vogël përdor vetëm 3 prej tyre. Ekuivalenti i portës NAND përdorte 14 porta. Kjo është për shkak të faktit se çdo portë mund të bëhet çdo lloj porte, dhe secila portë është në të vërtetë një portë me 4 hyrje. Çdo portë mund të bëjë më shumë. Nëse keni nevojë për më shumë porta, iCEstick ka një vëlla më të madh me 8000 porta, që kushton rreth dyfish. Prodhuesit e tjerë kanë oferta të tjera, por çmimi mund të bëhet mjaft i lartë.

Hapi 3: Nga FPGA në Arduino

Nga FPGA në Arduino
Nga FPGA në Arduino

FPGA -të janë të shkëlqyera, por mund të jenë të shtrenjta, të vështira për t'u arritur dhe nuk janë shumë miqësore me bordin e bukës. Një çip miqësor dhe i lirë është Atmega 328 P, i cili vjen në një paketë të pastër DIP, perfekte për ngrënien e bukës. Gjithashtu mund të blihet për rreth 4 dollarë. Kjo është zemra e Arduino UNO. Sigurisht që mund të përdorni të gjithë UNO -në, por të jeni të lirë, ne mund ta tërheqim Atmega 328 P nga UNO -ja dhe ta përdorim vetë. Sidoqoftë, unë e përdor bordin e UNO si programues për Atmega.

Në këtë pikë do t'ju duhet

1. Një Arduino UNO, me procesorin e lëvizshëm Atmega 328P.

2. Një Atmega 328P tjetër me bootloader Arduino të djegur paraprakisht, për të zëvendësuar atë që do të nxjerrim nga UNO. (Opsionale duke supozuar se akoma dëshironi të keni një UNO të përdorshëm).

Qëllimi është të konvertohet skedari verilog në një projekt arduino që mund të ngarkohet në 328P. Arduino bazohet në C ++. Me lehtësi ekziston një përkthyes nga Verilog në C ++, i quajtur Verilator (https://www.veripool.org/wiki/verilator). Verilator ka për qëllim të përdoret nga stilistët e harduerit të cilët kanë nevojë të simulojnë modelet e tyre para se t'i kryejnë ato modele në pajisje të shtrenjta. Verilator cross përpilon verilogun në C ++, atëherë përdoruesi siguron një parzmore testimi për të siguruar sinjale të simuluara të hyrjes dhe regjistruar sinjalet e daljes. Ne do ta përdorim atë për të mbushur modelin e verilogut në Atmega 328P duke përdorur zinxhirin e mjeteve Arduino.

Së pari instaloni Verilatorin. Ndiqni udhëzimet në

Gjithashtu instaloni Arduino IDE dhe provoni që mund të lidhet me Arduino UNO përmes USB.

Ne do të përdorim të njëjtën skedar verilog si për FPGA, përveç që emrat e kunjave duhet të ndryshohen. Shtova një nënvizim (_) në fillim të secilës. Kjo është e nevojshme sepse bibliotekat arduino përfshijnë një skedar me kokë që përkthen gjëra si B0, B001, etj., Në numra binarë. Emrat e tjerë të pin-ve të hyrjes do të ishin mirë ashtu siç janë, por B0 dhe B1 do të kishin bërë që ndërtimi të dështonte.

Në drejtorinë që përmban dyBitAdder.v dhe iCEstick.pcf, ekzekutoni sa vijon:

verilator -Mur --cc twoBitAdder.v

Kjo do të krijojë një nëndrejtori të quajtur obj_dir që përmban disa skedarë të rinj. Na duhen vetëm skedarët e kokës dhe cpp, VtwoBitAdder.h, VtwoBitAdder.cpp, VtwoBitAdder_Syms.h, dhe VtwoBitAdder_Syms.cpp.

Në Arduino IDE, krijoni një skicë të re të quajtur twoBitAdder.ino. Kjo do të krijojë skedarin ino në një drejtori të re të quajtur edhe dyBitAdder, brenda drejtorisë suaj të skicave Arduino. Kopjoni skedarët tuaj VtwoBitAdder.h dhe VtwoBitAdder.cpp në këtë dosje twoBitAdder në dosjen tuaj Arduino.

Tani kopjoni skedarët e kokës nga instalimi i verilatorit.

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

më në fund kopjoni në bibliotekën std c ++ nga https://github.com/maniacbug/StandardCplusplus. Sipas udhëzimeve të tyre të instalimit "Kjo është e instaluar ashtu si një bibliotekë e rregullt Arduino. Shpaketoni përmbajtjen e shpërndarjes në dosjen" bibliotekat "nën skicën tuaj. Për shembull, skica ime është në/home/maniacbug/Source/Arduino, kështu që kjo bibliotekë është në/shtëpi/maniacbug/Burimi/Arduino/bibliotekat/StandardCplusplus.

Sigurohuni që të rivendosni Arduino IDE tuaj pasi ta instaloni."

Tani zëvendësoni përmbajtjen e twoBitAdder.ino me atë të dhënë në këtë hap. Ky është një parzmore provë që pret verilatori, e cila vendos kunjat e hyrjes/daljes, pastaj në lak, lexon kunjat e hyrjes, i ushqen ato në VtwoBitAdder (versioni i përkthyer i qarkut tonë), pastaj lexon rezultatet nga VtwoBitAdder dhe zbatohet ato në kunjat e daljes.

Ky program duhet të përpilohet dhe ekzekutohet në Arduino UNO.

Hapi 4: Nga Arduino në DIP Chip në një Bord të Bukës

Nga Arduino në DIP Chip në një Bord të Bukës
Nga Arduino në DIP Chip në një Bord të Bukës

Tani që programi po funksionon në Arduino, nuk kemi më nevojë për vetë bordin Arduino. E tëra që na nevojitet është CPU.

Hiqeni Atmega 328P me kujdes nga priza Arduino UNO dhe futni opsionalisht zëvendësimin e tij.

Vendoseni Atmega 328P në dërrasën e bukës. Vendoseni fundin me divotin drejtuar në tabelën e bukës. Pin 1 është kunja e sipërme e majtë. Kunja 2 është tjetra poshtë, dhe kështu me radhë tek kunja 14 e cila është në pjesën e poshtme të majtë. Pastaj kunja 15 është poshtë djathtas, dhe kunjat 16 deri në 28 numërohen përsëri në anën e djathtë të çipit.

Lidhni kunjat 8 dhe 22 me tokën.

Lidhni pinin 7 me VCC (+5V).

Lidhni një kristal kuarci 16Mhz midis kunjave 9 dhe 10. Gjithashtu një kondensator të vogël (22pF) midis kunjit 9 dhe tokës, dhe midis kunjit 10 dhe tokëzimit. Kjo i jep Atmega 328P shpejtësinë e orës 16Mhz. Ka udhëzime diku tjetër për të mësuar 328P që në vend të tij të përdorë orën e tij të brendshme 8Mhz e cila do të kursejë disa pjesë, por kjo do të ngadalësojë procesorin.

Portet Arduino GPIO 5, 6, 7 dhe 8, të cilat i përdorëm për kunjat e hyrjes janë në të vërtetë kunjat fizike 11, 12, 13, 14 në Atmega 328P. Këto do të ishin katër kunjat e poshtme në të majtë.

Portet Arduino GPIO 11, 10 dhe 9, të cilat i përdorëm për kunjat e daljes janë në të vërtetë kunjat fizike 17, 16, 15 në Atmega 328P. Kjo do të ishte tre kunjat e poshtme në të djathtë.

I lidha LED -et me këto kunja si më parë.

Hapi 5: Përfundimi

Përfundim
Përfundim

Patate të skuqura TTL funksionojnë, por duhen shumë prej tyre për të ndërtuar ndonjë gjë. FPGA funksionojnë vërtet mirë, por nuk janë të lira. Nëse mund të jetoni me më pak kunja IO dhe shpejtësi më të ulët, atëherë një Atmega 328P mund të jetë çipi për ju.

Disa gjëra për tu mbajtur në mend:

FPGA:

Pro

- Mund të trajtojë sinjale me shpejtësi të lartë. Për shkak se nuk ka një CPU për të bllokuar përpunimin deri në një udhëzim në të njëjtën kohë, faktori kufizues është vonesa e përhapjes përmes portave në qarkun e caktuar. Në shumë raste kjo mund të jetë shumë më e shpejtë se sa ora e dhënë me çipin. Për modelin tim, vonesa e llogaritur do të kishte lejuar që twoBitAdder t'i përgjigjej rreth 100 milion ndryshimeve në vlerat hyrëse për sekondë (100Mhz) edhe pse ora në bord është vetëm një kristal 12Mhz.

- Ndërsa dizajni bëhet më kompleks, performanca e qarqeve ekzistuese nuk degradon (shumë). Për shkak se shtimi i qarqeve në pëlhurë është thjesht vendosja e diçkaje të re në pronat e paluajtshme të paluajtshme, nuk ndikon në qarkun ekzistues.

- Në varësi të FPGA -së, numri i kunjave të IO -ve në dispozicion mund të jetë shumë i lartë, dhe ato në përgjithësi nuk janë të kyçura në ndonjë qëllim të veçantë.

Kon

- Mund të jetë e shtrenjtë dhe/ose e vështirë për tu arritur.

- Zakonisht vjen në një paketë BGA që kërkon një lloj bordi breakout për të punuar me çipin në çdo projekt amator. Nëse e ndërtoni atë në një dizajn me një PCB SMT me shumë shtresa të personalizuara, ky nuk është problem.

- Shumica e prodhuesve të FPGA ofrojnë softuerin e tyre të projektimit me burim të mbyllur, i cili në disa raste mund të kushtojë para, ose të ketë një datë skadimi të licencës.

Arduino si një FPGA:

Pro

- E lirë, dhe e lehtë për tu marrë. Thjesht kërkoni atmega328p-pu në Amazon. Ato duhet të jenë rreth 4 dollarë/copë. Disa shitës i shesin në shumë 3 ose 4.

- Kjo është një paketë DIP, që do të thotë se përshtatet në mënyrë perfekte në një dërrasë buke me kunjat e saj të jashtme.

- Kjo është një pajisje 5V, e cila mund ta bëjë të lehtë lidhjen me pajisjet e tjera 5V.

Kon

- ATMEGA328P ka një numër të kufizuar të kunjave të IO (23), dhe disa prej tyre janë të rezervuara për detyra specifike.

- Ndërsa kompleksiteti i qarkut rritet, sasia e kodit të ekzekutuar në metodën e ciklit Arduino rritet, që do të thotë se kohëzgjatja e secilit cikël është më e gjatë.

- Edhe nëse kompleksiteti i qarkut është i ulët, secili cikël kërkon shumë udhëzime të CPU -së për të marrë vlerat e pinit hyrës, dhe për të shkruar vlerat e pinit dalës dhe për t'u kthyer në krye të lakut. Me një kristal 16Mhz, edhe me një udhëzim për ciklin e orës, laku nuk do të funksionojë më shumë se ndoshta 1 milion herë në sekondë (1Mhz). Për shumicën e projekteve elektronike amatore kjo është shumë më e shpejtë seç duhet.

Recommended: