Orodha ya maudhui:

Arduino Kama Bodi ya Mkate Nafuu FPGA: Hatua 5 (na Picha)
Arduino Kama Bodi ya Mkate Nafuu FPGA: Hatua 5 (na Picha)

Video: Arduino Kama Bodi ya Mkate Nafuu FPGA: Hatua 5 (na Picha)

Video: Arduino Kama Bodi ya Mkate Nafuu FPGA: Hatua 5 (na Picha)
Video: CS50 Live, серия 003 2024, Novemba
Anonim
Arduino Kama Breadboard ya bei rahisi FPGA
Arduino Kama Breadboard ya bei rahisi FPGA

Kubuni mizunguko ya mantiki ya vifaa inaweza kuwa ya kufurahisha. Njia ya zamani ya shule ya kufanya hivyo ilikuwa na milango ya NAND, kwenye bodi ya mkate, iliyounganishwa na waya za kuruka. Hii bado inawezekana, lakini haichukui mengi kabla ya idadi ya milango kutoka mikononi. Chaguo jipya zaidi ni kutumia FPGA (Uwanja wa Mpangilio wa Lango). Chips hizi zinaweza kujirudisha wenyewe kuwa mzunguko wowote wa mantiki ya dijiti unayoweza kubuni, lakini si ya bei rahisi na inapatikana kwa urahisi. Nitaonyesha jinsi FPGA hii inaweza kubadilishwa na chip ya bei rahisi ya Atmega kutoka Arduino UNO, ikiweka vizuri mzunguko wa dijiti kwenye kifurushi cha DIP, ambacho ni rafiki wa mkate.

Hatua ya 1: Buni Mzunguko Ambayo "FPGA" Itawakilisha

Buni Mzunguko Kwamba
Buni Mzunguko Kwamba
Buni Mzunguko Kwamba
Buni Mzunguko Kwamba
Buni Mzunguko Kwamba
Buni Mzunguko Kwamba

Nitaunda nyongeza 2 kidogo + 2 kidogo. Inachukua jozi mbili za pini za kuingiza mantiki, na hutoa kanya moja ya pini za pato.

Ili kufanya hivyo na milango ya NAND, angalia picha kwenye picha. Inahitaji milango 14 ya NAND. Nilitumia chips za TTL 4 za lango la NAND, na kuziunganisha kwenye ubao wa mkate.

Niliongeza LED zingine (usisahau vipingamizi vya sasa) kuonyesha wakati pini za pembejeo na pato zilikuwa juu (juu), na zilipokuwa mbali (chini). Kuendesha pini za kuingiza, mimi ama niliiziruka kwa reli ya chini au reli nzuri ya nguvu.

Mzunguko huu unafanya kazi, lakini tayari inachukua vidonge 4 vya TTL, na ni kiota cha panya cha waya. Ikiwa bits zaidi zinahitajika, kutakuwa na bodi nyingi za mkate, na kuruka zaidi. Haraka sana saizi ya mzunguko ingeweza kutoka mkononi.

Kwa kumbuka upande, wakati wa kufanya kazi na milango ya TTL, haitoi kabisa 0V au 5V kama vile mtu angetarajia. Mara nyingi hutoa karibu 3V kwa "juu", lakini voltage halisi iko katika anuwai nyingi. Mzunguko huo huo unaotumia chips sawa za CMOS ingekuwa bora haswa 0V kwa swings 5V haswa.

Hatua ya 2: Ingiza FPGA

Ingiza FPGA
Ingiza FPGA
Ingiza FPGA
Ingiza FPGA

FPGA ni chip ya kupendeza, ambayo inaweza kuwa mchanganyiko wa milango ya mantiki, iliyounganishwa pamoja katika mchanganyiko wowote. Mtu huunda "mzunguko" katika lugha ya usanifu wa maunzi (HDL). Kuna lugha nyingi kama hizo, moja ambayo inaitwa Verilog. Faili ya.v kwenye picha ni sawa na Verilog ya nyongeza mbili. Faili ya.pch hapa chini pia inahitajika kupeana pini za kuingiza na kutoa zinazoitwa kwenye faili ya verilog kwa pini halisi za vifaa kwenye chip.

Katika kesi hii ninatumia bodi ya ukuzaji wa ICEstick ya Lattice Semiconductors (https://www.latticesemi.com/icestick). Chip halisi ya FPGA ni iCE40HX-1k, na milango zaidi ya 1000, ambayo kila moja inaweza kuwa lango la mantiki. Hiyo inamaanisha kila lango linaweza kuwa lango la NAND, au lango la AU, SI lango, NOR, XOR, nk Kwa kuongezea kila lango linaweza kushughulikia pembejeo zaidi ya mbili. Hii ni maalum kwa kila mtengenezaji, lakini kwenye iCE40 kila lango linaweza kushughulikia pembejeo 4. Kwa hivyo kila lango lina uwezo mkubwa kuliko milango 2 ya kuingiza NAND.

Ilinibidi nipe pini 4 ya kuingiza na pini 3 za pato kwa pini za mwili 91, 90, 88, 87, 81, 80, na 79 mtawaliwa. Hii ni maalum kwa chip ya fpga na bodi ya kuzuka iko, na jinsi pini hizo zinavyounganishwa kwa bandari ya PMOD. Hii inapatikana katika hifadhidata za bodi hii ya FPGA.

Lattice hutoa mlolongo wao wa zana ili kusanikisha (mizunguko ya FPGA sawa na mkusanyiko wa CPU) kutoka Verilog, lakini nilitumia mnyororo wa zana ya chanzo wazi ya chanzo (https://www.clifford.at/icestorm/). Maagizo ya ufungaji yanapatikana kwenye wavuti hiyo. Pamoja na barafu iliyowekwa, na faili ya verilog na pcf, amri za kupakia mzunguko huu kwenye FPGA ni:

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

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

icepack mbiliBitAdder.asc mbiliBitAdder.bin

iceprog mbiliBitAdder.bin

Hii inafanya kazi vizuri, lakini pamoja na kusafirisha hii ICEstick itagharimu karibu $ 30. Hii sio njia rahisi kabisa ya kujenga mzunguko wa dijiti, lakini ina nguvu. Ina milango zaidi ya 1000 na kwa mzunguko huu mdogo hutumia 3 tu. Lango la NAND sawa na milango 14. Hii ni kwa sababu ya ukweli kwamba kila lango linaweza kuwa lango la aina yoyote, na kila lango kwa kweli ni lango 4 la kuingiza. Kila lango linaweza kufanya zaidi. Ikiwa unahitaji milango zaidi, kijiti ina kaka kubwa na milango 8000, ambayo inagharimu karibu mara mbili. Watengenezaji wengine wana matoleo mengine lakini bei inaweza kupata mwinuko kabisa.

Hatua ya 3: Kutoka FPGA hadi Arduino

Kutoka FPGA hadi Arduino
Kutoka FPGA hadi Arduino

FPGA ni nzuri, lakini inaweza kuwa ghali, ngumu kupatikana, na sio bodi ya mkate sana. Chipu ya urafiki na ya bei rahisi ya mkate ni Atmega 328 P, ambayo inakuja kwenye kifurushi nadhifu cha DIP, kamili kwa upandaji mkate. Pia inaweza kuwa kwa karibu $ 4. Huu ndio moyo wa Arduino UNO. Kwa kweli unaweza kutumia UNO nzima, lakini uwe na bei rahisi, tunaweza kuvuta Atmega 328 P kutoka UNO, na kuitumia yenyewe. Nilitumia bodi ya UNO kama programu kwa Atmega ingawa.

Kwa wakati huu utahitaji

1. Arduino UNO, na Atmega 328P CPU inayoondolewa.

2. Atmega nyingine 328P na Arduino bootloader kabla ya kuchomwa moto, kuchukua nafasi ya ile tunayotaka kuchukua kutoka UNO. (Kwa hiari kudhani bado unataka kuwa na UNO inayoweza kutumika).

Lengo ni kubadilisha faili ya verilog kuwa mradi wa arduino ambao unaweza kupakiwa kwenye 328P. Arduino inategemea C ++. Kwa urahisi kuna mtafsiri kutoka Verilog hadi C ++, anayeitwa Verilator (https://www.veripool.org/wiki/verilator). Verilator imekusudiwa kutumiwa na wabuni wa vifaa ambao wanahitaji kuiga miundo yao kabla ya kufanya miundo hiyo kwa vifaa vya gharama kubwa. Msalaba wa Verilator hukusanya verilog kwa C ++, kisha mtumiaji hutoa jaribio la majaribio ili kutoa ishara za kuingiza zilizoiga na kurekodi ishara za pato. Tutatumia kukandamiza muundo wa verilog kwenye Atmega 328P ukitumia mnyororo wa zana wa Arduino.

Kwanza kufunga Verilator. Fuata maagizo kwenye

Sakinisha pia IDE ya Arduino, na ujaribu kuwa inaweza kuungana na Arduino UNO juu ya USB.

Tutatumia faili sawa ya verilog na FPGA, isipokuwa kwamba majina ya pini yanahitaji kubadilishwa. Niliongeza kiini cha chini (_) mwanzoni mwa kila moja. Hii inahitajika kwa sababu maktaba za arduino zinajumuisha faili ya kichwa inayotafsiri vitu kama B0, B001, nk, kwa nambari za kibinadamu. Majina mengine ya pini ya kuingiza yangekuwa sawa kama ilivyo, lakini B0 na B1 wangesababisha ujenzi ushindwe.

Katika saraka iliyo na mbiliBitAdder.v na iCEstick.pcf, fanya zifuatazo:

verilator -Wall --cc mbiliBitAdder.v

Hii itaunda kichwa kidogo kinachoitwa obj_dir kilicho na faili mpya kadhaa. Tunahitaji tu faili za kichwa na cpp, VtwoBitAdder.h, VtwoBitAdder.cpp, VtwoBitAdder_Syms.h, na VtwoBitAdder_Syms.cpp.

Katika IDE ya Arduino, tengeneza mchoro mpya uitwao twoBitAdder.ino. Hii itaunda faili ya ino katika saraka mpya inayoitwa pia mbiliBitAdder, ndani ya saraka yako ya sketchbook ya Arduino. Nakili faili zako za VtwoBitAdder.h na VtwoBitAdder.cpp kwenye folda hii ya mbiliBitAdder kwenye folda yako ya Arduino.

Sasa nakili faili za kichwa kutoka kwa usanikishaji wa verilator.

cp / usr / mitaa / shiriki / verilator / pamoja / verilated *.

mwishowe nakili katika maktaba ya std c ++ kutoka https://github.com/maniacbug/StandardCplusplus. Kwa maagizo yao ya usanikishaji Hii imewekwa kama maktaba ya kawaida ya Arduino. Ondoa yaliyomo kwenye usambazaji kwenye folda ya 'maktaba' chini ya kitabu chako cha sketch. Kwa mfano, kitabu changu cha sketch kiko nyumbani / maniacbug / Chanzo / Arduino, kwa hivyo maktaba hii iko ndani / nyumbani / maniacbug / Chanzo / Arduino / maktaba / StandardCplusplus.

Hakikisha kuweka upya IDE yako ya Arduino baada ya kuiweka."

Sasa badilisha yaliyomo kwenye mbiliBitAdder.ino na ile iliyotolewa kwenye hatua hii. Huu ni mshipi wa majaribio ambao verilator anatarajia, ambayo huweka pini za kuingiza / kutoa, kisha kwenye kitanzi, inasoma pini za kuingiza, huwapea VtwoBitAdder (toleo lililotafsiriwa la mzunguko wetu), halafu inasoma matokeo kutoka kwa VtwoBitAdder na inatumika kwa pini za pato.

Programu hii inapaswa kukusanya na kutekeleza kwenye Arduino UNO.

Hatua ya 4: Kutoka Arduino hadi DIP Chip kwenye Bodi ya Mkate

Kutoka Arduino hadi DIP Chip kwenye Bodi ya Mkate
Kutoka Arduino hadi DIP Chip kwenye Bodi ya Mkate

Sasa kwa kuwa programu inaendelea kwenye Arduino, hatuhitaji tena bodi ya Arduino yenyewe. Tunachohitaji tu ni CPU.

Ondoa Atmega 328P kwa uangalifu kutoka kwenye tundu la Arduino UNO, na kwa hiari ingiza uingizwaji wake.

Weka Atmega 328P kwenye ubao wa mkate. Weka mwisho na divot inayoonyesha juu ya ubao wa mkate. Pini 1 ni pini ya juu kushoto. Pini 2 ndio inayofuata chini, na kadhalika kubandika 14 ambayo iko chini kushoto. Kisha pini 15 iko chini kulia, na pini 16 hadi 28 hesabu kurudisha upande wa kulia wa chip.

Unganisha pini 8 na 22 ardhini.

Unganisha pini 7 kwa VCC (+ 5V).

Unganisha kioo cha Quartz cha 16Mhz kati ya pini 9 na 10. Pia capacitor ndogo (22pF) kati ya pini 9 na ardhi, na kati ya pini 10 na ardhi. Hii inatoa Atmega 328P kasi ya saa 16Mhz. Kuna maagizo mahali pengine juu ya kufundisha 328P kutumia saa yake ya ndani ya 8Mhz ambayo ingeokoa sehemu kadhaa, lakini hiyo itapunguza kasi ya processor.

Bandari za Arduino GPIO 5, 6, 7, na 8, ambazo tulitumia kwa pini za kuingiza ni pini halisi 11, 12, 13, 14 kwenye Atmega 328P. Hiyo itakuwa pini nne za chini kushoto.

Bandari za Arduino GPIO 11, 10, na 9, ambazo tulitumia kwa pini za pato kwa kweli ni pini za mwili 17, 16, 15 kwenye Atmega 328P. Hiyo itakuwa pini tatu za chini upande wa kulia.

Niliunganisha LED kwenye pini hizi kama hapo awali.

Hatua ya 5: Hitimisho

Hitimisho
Hitimisho

Chips za TTL hufanya kazi, lakini inachukua mengi yao kujenga chochote. FPGA hufanya kazi vizuri, lakini sio rahisi. Ikiwa unaweza kuishi na pini chache za IO, na kasi ya chini, basi Atmega 328P inaweza kuwa chip kwako.

Vitu vingine vya kuzingatia:

FPGA:

Pro

- Inaweza kushughulikia ishara za kasi. Kwa sababu hakuna CPU ya kusindika kwa chupa hadi maagizo moja kwa wakati, sababu inayopunguza ni ucheleweshaji wa uenezaji kupitia milango kwenye mzunguko uliopewa. Katika hali nyingi hii inaweza kuwa haraka sana kuliko saa iliyotolewa na chip. Kwa muundo wangu, kucheleweshwa kwa hesabu kungeruhusu mbiliBitAdder kujibu mabadiliko karibu milioni 100 kwa nambari za kuingiza kwa sekunde (100Mhz) ingawa saa ya bodi ni kioo cha 12Mhz tu.

- Kama muundo unavyozidi kuwa ngumu utendaji wa mizunguko iliyopo haipungui (mengi). Kwa sababu kuongeza mizunguko kwenye kitambaa ni kuweka tu kitu kipya katika mali isiyohamishika isiyotumika, haiathiri mizunguko iliyopo.

- Kulingana na FPGA, idadi ya pini zinazopatikana za IO zinaweza kuwa kubwa sana, na kwa ujumla hazijafungwa kwa kusudi fulani.

Con

- Inaweza kuwa ghali na / au ngumu kupatikana.

- Kawaida huja kwenye kifurushi cha BGA ambacho kinahitaji aina fulani ya bodi ya kuzuka ili kufanya kazi na chip katika mradi wowote wa amateur. Ikiwa unaijenga kuwa muundo na PCB ya safu anuwai ya SMT, hii sio shida.

- Watengenezaji wengi wa FPGA hutoa programu yao ya muundo wa chanzo iliyofungwa, ambayo wakati mwingine inaweza kugharimu pesa, au kuwa na tarehe ya kumalizika kwa leseni.

Arduino kama FPGA:

Pro

- Nafuu, na ni rahisi kupata. Tafuta tu atmega328p-pu kwenye Amazon. Wanapaswa kuwa karibu $ 4 / kipande. Wauzaji kadhaa huwauza kwa kura 3 au 4.

- Hii ni kifurushi cha DIP, maana yake inafaa kabisa kwenye ubao wa mkate na pini zake za nje.

- Hii ni kifaa cha 5V, ambacho kinaweza kufanya ujumuishaji na vifaa vingine vya 5V rahisi.

Con

- ATMEGA328P ina idadi ndogo ya pini za IO (23), na kadhaa kati yao zimehifadhiwa kwa majukumu maalum.

- Kadiri ugumu wa mzunguko unavyoongezeka, idadi ya nambari inayoendeshwa kwa njia ya kitanzi ya Arduino inaongezeka, inamaanisha muda wa kila mzunguko ni mrefu zaidi.

- Hata ikiwa ugumu wa mzunguko ni mdogo, kila mzunguko unahitaji maagizo mengi ya CPU ili kuchukua maadili ya pini ya kuingiza, na kuandika maadili ya pini, na kurudi juu ya kitanzi. Na kioo cha 16Mhz, hata kwa maagizo moja kwa kila mzunguko wa kitanzi, kitanzi hakitatembea zaidi ya labda mara milioni 1 kwa sekunde (1Mhz). Kwa miradi mingi ya umeme ya amateur ambayo ni haraka kuliko inahitajika.

Ilipendekeza: