Բովանդակություն:
- Քայլ 1. Նախագծեք միացում, որը կներկայացնի «FPGA» - ն
- Քայլ 2: Մուտքագրեք FPGA- ն
- Քայլ 3. FPGA- ից Arduino
- Քայլ 4. Arduino- ից մինչև DIP չիպ հացի տախտակի վրա:
- Քայլ 5: Եզրակացություն
Video: Arduino որպես էժան Bboardboard FPGA. 5 քայլ (նկարներով)
2024 Հեղինակ: John Day | [email protected]. Վերջին փոփոխված: 2024-01-30 09:50
Սարքավորման տրամաբանական սխեմաների նախագծումը կարող է հաճելի լինել: Դա անելու հին դպրոցական եղանակը NAND դարպասներով էր ՝ հացի տախտակի վրա, միացված jumper լարերով: Սա դեռ հնարավոր է, բայց շատ բան չի պահանջվում, մինչև դարպասների թիվը դուրս գա վերահսկողությունից: Ավելի նոր տարբերակ է օգտագործել FPGA (դաշտային ծրագրավորվող դարպասների զանգված): Այս չիպերը կարող են վերալիցքավորվել և դառնալ ցանկացած թվային տրամաբանական միացում, որը կարող եք նախագծել, բայց էժան և մատչելի չեն: Ես ցույց կտամ, թե ինչպես կարող է այս FPGA- ն փոխարինվել Arduino UNO- ի էժան Atmega չիպով ՝ արդյունավետ կերպով թվային միացումը դնելով DIP փաթեթի մեջ, որը շատ հարմար է հացահատիկի համար:
Քայլ 1. Նախագծեք միացում, որը կներկայացնի «FPGA» - ն
Ես կկառուցեմ 2 բիթ + 2 բիթ գումարիչ: Այն տևում է երկու զույգ տրամաբանական մուտքագրման կապում, և թողարկում է ելքային կապերի մեկ եռյակ:
NAND դարպասների հետ դա անելու համար տես նկարի սխեմատիկ պատկերը: Դրա համար անհրաժեշտ է 14 NAND դարպաս: Ես օգտագործեցի 4 քառակի NAND gate TTL չիպսեր և դրանք միացրեցի հացի տախտակին:
Ես ավելացրել եմ մի քանի LED (չմոռանաք ընթացիկ սահմանափակող ռեզիստորները) ՝ ցույց տալու համար, թե երբ են մուտքի և ելքի կապերը միացված (բարձր), և երբ անջատված (ցածր): Մուտքային կապերը քշելու համար դրանք կամ ցատկեցի գետնին կամ դրական հզորության ռելսին:
Այս սխեման աշխատում է, բայց այն արդեն զբաղեցնում է 4 TTL չիպ և հանդիսանում է լարերի առնետի բույն: Եթե ավելի շատ կտորներ անհրաժեշտ լինեին, ապա ավելի շատ հացի տախտակներ կլինեին, և ավելի շատ թռչկոտողներ: Շատ արագ շղթայի չափը դուրս կգա վերահսկողությունից:
Մի կողմնակի նշումով, TTL դարպասների հետ աշխատելիս դրանք չեն թողնում ճշգրիտ 0V կամ 5V, ինչպես կարելի էր սպասել: Նրանք հաճախ 3V- ի սահմաններում թողարկում են «բարձր», բայց ճշգրիտ լարումը շատ լայն տիրույթում է: Նույն սխեմայով, որն օգտագործում է CMOS համարժեք չիպսերը, ավելի լավ կլինի ճշգրիտ 0V- ից մինչև 5V ճոճանակներ:
Քայլ 2: Մուտքագրեք FPGA- ն
FPGA- ն ֆանտաստիկ չիպ է, որը կարող է բառացիորեն դառնալ տրամաբանական դարպասների ցանկացած համադրություն ՝ միացված ցանկացած համադրության մեջ: Մեկը նախագծում է «շրջանը» ապարատային դիզայնի լեզվով (HDL): Կան բազմաթիվ նման լեզուներ, որոնցից մեկը կոչվում է Verilog: Նկարում պատկերված.v ֆայլը երկու բիթ ավելացնողի Verilog համարժեքն է: Ստորև բերված.pch ֆայլը նույնպես անհրաժեշտ է verilog ֆայլում նշված մուտքային և ելքային կապերը չիպի իրական ապարատային կապերին նշանակելու համար:
Այս դեպքում ես օգտագործում եմ Lattice Semiconductors iCEstick զարգացման խորհուրդը (https://www.latticesemi.com/icestick): Փաստացի FPGA չիպը iCE40HX-1k է ՝ 1000-ից մի փոքր ավելի դարպասներով, որոնք յուրաքանչյուրը կարող է դառնալ ցանկացած տրամաբանական դարպաս: Դա նշանակում է, որ յուրաքանչյուր դարպաս կարող է լինել NAND դարպաս, կամ OR դարպաս, NOT gate, NOR, XOR և այլն: Բացի այդ, յուրաքանչյուր դարպաս կարող է կարգավորել ավելի քան երկու մուտք: Սա հատուկ է յուրաքանչյուր արտադրողի համար, սակայն iCE40- ի յուրաքանչյուր դարպաս կարող է կարգավորել 4 մուտք: Այսպիսով, յուրաքանչյուր դարպաս հսկայականորեն ավելի ունակ է, քան 2 մուտքային NAND դարպասները:
Ես պետք է նշանակեի 4 մուտքային սոճին և 3 ելքային կապերը համապատասխանաբար 91, 90, 88, 87, 81, 80 և 79 ֆիզիկական կապումներին: Սա հատուկ է fpga չիպին և դրա վրա տեղադրված ջարդման տախտակին, և ինչպես են այդ կապումներն միացված PMOD նավահանգստին: Սա հասանելի է այս FPGA տախտակի տվյալների թերթերում:
Attանցը տրամադրում է Verilog- ի սխեմաները սինթեզելու (FPGA- ին համարժեք CPU- ների համար հավաքածու) գործիքների շղթա, բայց ես օգտագործել եմ բաց կոդով բաց գործիքային ցանցի icestorm (https://www.clifford.at/icestorm/): Տեղադրման հրահանգները հասանելի են այդ կայքում: Տեղադրված icestorm- ով և verilog- ով և pcf ֆայլով, այս սխեման FPGA- ում բեռնելու հրահանգներն են.
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
Սա հիանալի է աշխատում, բայց ներառելով այս iCEstick- ի առաքումը կարժենա մոտ $ 30: Սա թվային միացում կառուցելու ամենաէժան միջոցը չէ, բայց այն հզոր է: Այն ունի ավելի քան 1000 դարպասներ և այս փոքրիկ միացման համար օգտագործում է դրանցից միայն 3 -ը: NAND դարպասի համարժեքը օգտագործեց 14 դարպաս: Դա պայմանավորված է նրանով, որ յուրաքանչյուր դարպաս կարող է դառնալ ցանկացած տեսակի դարպաս, և յուրաքանչյուր դարպաս իրականում 4 մուտքի դարպաս է: Յուրաքանչյուր դարպաս կարող է ավելին անել: Եթե ձեզ ավելի շատ դարպասներ են պետք, iCEstick- ն ունի ավելի մեծ եղբայր ՝ 8000 դարպասով, որի արժեքը մոտ երկու անգամ է: Այլ արտադրողներ այլ առաջարկներ ունեն, բայց գինը կարող է բավականին կտրուկ դառնալ:
Քայլ 3. FPGA- ից Arduino
FPGA- ները հիանալի են, բայց կարող են լինել թանկարժեք, դժվար ձեռք բերված, և այնքան էլ հարմար չեն հացի տախտակին: Հացաթխման համար հարմար և էժան չիպ է համարվում Atmega 328 P- ն, որը գալիս է կոկիկ DIP փաթեթով ՝ կատարյալ հացաթխման համար: Այն կարելի է ձեռք բերել նաև մոտ 4 դոլարով: Սա Arduino UNO- ի սիրտն է: Դուք, իհարկե, կարող եք օգտագործել ամբողջ ՄԱԿ -ը, բայց լինել էժան, մենք կարող ենք Atmega 328 P- ն հանել ՄԱԿ -ից և օգտագործել այն ինքնուրույն: Ես, այնուամենայնիվ, օգտագործեցի ՄԱԿ -ի խորհուրդը որպես Atmega- ի ծրագրավորող:
Այս պահին ձեզ հարկավոր կլինի
1. Arduino UNO, շարժական Atmega 328P պրոցեսորով:
2. Մեկ այլ Atmega 328P Arduino բեռնիչով նախապես այրված ՝ փոխարինելու այն, որը մենք պատրաստվում ենք դուրս բերել UNO- ից: (Լրացուցիչ `ենթադրելով, որ դուք դեռ ցանկանում եք օգտագործել UNO):
Նպատակն է verilog ֆայլը վերածել arduino նախագծի, որը կարող է բեռնվել 328P- ում: Arduino- ն հիմնված է C ++ - ի վրա: Հարմարավետությամբ կա թարգմանիչ Verilog- ից C ++, որը կոչվում է Verilator (https://www.veripool.org/wiki/verilator): Verilator- ը նախատեսված է օգտագործել ապարատային դիզայներների կողմից, ովքեր պետք է նմանակեն իրենց դիզայնը ՝ նախքան այդ նմուշները թանկարժեք սարքավորումների վրա դնելը: Verilator cross- ը verilog- ը կազմում է C ++ - ին, այնուհետև օգտվողը տրամադրում է թեստային զրահ `մոդելավորված մուտքային ազդանշաններ տրամադրելու և ելքային ազդանշանները գրանցելու համար: Մենք պատրաստվում ենք այն օգտագործել `Arduino գործիքների շղթայի միջոցով Verilog- ի դիզայնը սեղմելու համար Atmega 328P- ում:
Նախ տեղադրեք Verilator- ը: Հետևեք հրահանգներին ՝
Տեղադրեք նաև Arduino IDE- ն և ստուգեք, որ այն կարող է միանալ Arduino UNO- ին USB- ի միջոցով:
Մենք կօգտագործենք նույն verilog ֆայլը, ինչ FPGA- ի դեպքում, բացառությամբ, որ կապերի անունները պետք է փոխվեն: Յուրաքանչյուրի սկզբում ավելացրել եմ ընդգծված նշան (_): Սա անհրաժեշտ է, քանի որ arduino գրադարանները ներառում են վերնագրի ֆայլ, որը թարգմանում է այնպիսի բաներ, ինչպիսիք են B0, B001 և այլն, երկուական թվերի: Մյուս մուտքային քորոցների անունները լավ կլինեին, ինչպես կա, բայց B0- ն և B1- ը կառաջացնեին կառուցվածքի ձախողումը:
ԵրկուBitAdder.v և iCEstick.pcf պարունակող գրացուցակում գործարկեք հետևյալը.
ուղղիչ -Պատ -ccc twoBitAdder.v
Սա կստեղծի ենթակայք, որը կոչվում է obj_dir, որը պարունակում է մի քանի նոր ֆայլ: Մեզ պետք են միայն վերնագիր և cpp ֆայլեր ՝ VtwoBitAdder.h, VtwoBitAdder.cpp, VtwoBitAdder_Syms.h և VtwoBitAdder_Syms.cpp:
Arduino IDE- ում ստեղծեք նոր ուրվագիծ, որը կոչվում է twoBitAdder.ino: Սա կստեղծի ino ֆայլը նոր գրացուցակում, որը նույնպես կոչվում է twoBitAdder, ձեր Arduino էսքիզների գրքույկի գրացուցակում: Պատճենեք ձեր VtwoBitAdder.h և VtwoBitAdder.cpp ֆայլերը ձեր Arduino թղթապանակի այս երկուBitAdder պանակում:
Այժմ պատճենեք վերնագրի ֆայլերը ուղղիչի տեղադրումից:
cp/usr/local/share/verilator/include/verilated*.
վերջապես պատճենեք std c ++ գրադարանում ՝ https://github.com/maniacbug/StandardCplusplus- ից: Տեղադրման հրահանգների համաձայն «Սա տեղադրված է սովորական Arduino գրադարանի պես: Բացեք բաշխման բովանդակությունը« գրադարաններ »պանակում ՝ ձեր ուրվագծային տեքստի ներքո: Օրինակ, իմ ուրվագծային գիրքը գտնվում է/home/maniacbug/Source/Arduino- ում, ուստի այս գրադարանը գտնվում է/home/maniacbug/Source/Arduino/libraries/StandardCplusplus- ում:
Տեղադրելուց հետո համոզվեք, որ վերականգնել ձեր Arduino IDE- ն »:
Այժմ փոխարինեք twoBitAdder.ino- ի բովանդակությունը այս քայլին տրվածով: Սա ստուգիչ զենք է, որն ակնկալում է verilator- ը, որը սահմանում է մուտքի/ելքի կապերը, այնուհետև օղակում, կարդում է մուտքային կապերը, սնվում դրանք VtwoBitAdder- ին (մեր սխեմայի թարգմանված տարբերակը), այնուհետև կարդում է VtwoBitAdder- ի ելքերը և կիրառվում է դրանք դեպի ելքային կապում:
Այս ծրագիրը պետք է կազմի և գործի դնի Arduino UNO- ում:
Քայլ 4. Arduino- ից մինչև DIP չիպ հացի տախտակի վրա:
Այժմ, երբ ծրագիրը աշխատում է Arduino- ով, մենք այլևս կարիք չունենք բուն Arduino տախտակի: Մեզ անհրաժեշտ է միայն պրոցեսորը:
Arduino UNO վարդակից ուշադիր հեռացրեք Atmega 328P- ը և ըստ ցանկության տեղադրեք դրա փոխարինողը:
Տեղադրեք Atmega 328P- ը սեղանի վրա: Վերջը դրեք ՝ երկտողը մատնացույց անելով հացի տախտակին: Պին 1 -ը վերին ձախ քորոցն է: Պին 2 -ը հաջորդն է ներքևում, և այսպես շարունակ ՝ ներքևի ձախ մասում գտնվող 14 -րդ կապում: Այնուհետև կապում 15 -ը գտնվում է ներքևի աջ մասում, իսկ 16 -ից 28 -ի կապումները հաշվում են չիպի աջ կողմում:
Միացրեք 8 և 22 կապերը գետնին:
Միացրեք կապում 7 -ը VCC- ին (+5V):
9 -րդ և 10 -րդ կապերի միջև միացրեք 16 ՄՀց քվարցային բյուրեղ: Նաև փոքր կոնդենսատոր (22pF) 9 -րդ և գետնի միջև, իսկ 10 -րդ կապի և գետնի միջև: Սա Atmega 328P- ին տալիս է 16 ՄՀց ժամացույցի արագություն: Կան այլ հրահանգներ 328P- ին սովորեցնելու փոխարեն օգտագործել իր ներքին 8 ՄՀց ժամացույցը, որը կփրկի մի քանի մաս, բայց դա կդանդաղեցնի պրոցեսորը:
Arduino GPIO նավահանգիստները 5, 6, 7 և 8, որոնք մենք օգտագործում էինք մուտքային կապերի համար իրականում ֆիզիկական 11, 12, 13, 14 կապում են Atmega 328P- ում: Դա կլինի ձախից չորս ներքևի կապում:
Arduino GPIO նավահանգիստները 11, 10 և 9, որոնք մենք օգտագործում էինք ելքային կապերի համար իրականում 17, 16, 15 ֆիզիկական կապում են Atmega 328P- ում: Դա կլինի աջ ներքևի երեք կապում:
Ես LED- ները միացրեցի այս կապումներին, ինչպես նախկինում:
Քայլ 5: Եզրակացություն
TTL չիպսերն աշխատում են, բայց դրանցից շատ բան է պահանջվում որևէ բան կառուցելու համար: FPGA- ները իսկապես լավ են աշխատում, բայց էժան չեն: Եթե կարող եք ապրել ավելի քիչ IO կապումներով և ավելի ցածր արագությամբ, ապա Atmega 328P- ը կարող է ձեզ համար չիպ լինել:
Որոշ բաներ, որոնք պետք է հիշել.
FPGA:
Պրո
- Կարող է կարգավորել բարձր արագության ազդանշաններ: Քանի որ չկա մի պրոցեսոր, որը կարող է խոչընդոտել մշակումը միաժամանակ մեկ հրահանգի, սահմանափակող գործոնը տվյալ շրջանագծի դարպասների միջոցով տարածման հետաձգումն է: Շատ դեպքերում դա կարող է շատ ավելի արագ լինել, քան չիպով նախատեսված ժամացույցը: Իմ նախագծման համար հաշվարկված ուշացումը թույլ կտար երկուBitAdder- ին արձագանքել մեկ վայրկյանում մուտքային արժեքների մոտ 100 միլիոն փոփոխությունների (100 ՄՀց), չնայած ինքնաթիռի ժամացույցը ընդամենը 12 ՄՀց բյուրեղ է:
- Քանի որ դիզայնը դառնում է ավելի բարդ, գոյություն ունեցող սխեմաների աշխատանքը չի վատթարանում (շատ): Քանի որ հյուսվածքներին սխեմաներ ավելացնելը պարզապես ինչ-որ նոր բան է դնում չօգտագործված անշարժ գույքի մեջ, դա չի ազդում առկա սխեմաների վրա:
- Կախված FPGA- ից, IO- ի հասանելի եղունգների թիվը կարող է շատ մեծ լինել, և դրանք ընդհանրապես փակված չեն որևէ հատուկ նպատակի համար:
Կոն
- Կարող է լինել թանկ և (կամ) դժվար ձեռք բերված:
- Սովորաբար գալիս է BGA փաթեթով, որը չիպերի հետ ցանկացած սիրողական նախագծում աշխատելու համար պահանջում է ինչ -որ ճեղքման տախտակ: Եթե դուք կառուցում եք այն դիզայնի մեջ ՝ սովորական բազմաշերտ SMT PCB- ով, սա խնդիր չէ:
- FPGA արտադրողներից շատերը տրամադրում են փակ ծրագրավորման իրենց ծրագրակազմը, որը որոշ դեպքերում կարող է գումար արժենալ կամ ունենալ լիցենզիայի գործողության ժամկետ:
Arduino որպես FPGA:
Պրո
- Էժան, և հեշտ է ձեռք բերել: Պարզապես որոնեք atmega328p-pu Amazon- ում: Դրանք պետք է կազմեն մոտ 4 դոլար/հատ: Մի քանի վաճառողներ դրանք վաճառում են 3 կամ 4 լոտերով:
- Սա DIP փաթեթ է, ինչը նշանակում է, որ այն հիանալի տեղավորվում է տախտակի վրա իր արտաքին կապում:
- Սա 5 Վ լարման սարք է, որը կարող է հեշտացնել ինտերֆեյսը այլ 5 Վ սարքերի հետ:
Կոն
- ATMEGA328P- ն ունի IO կապի սահմանափակ քանակ (23), և դրանցից մի քանիսը վերապահված են հատուկ առաջադրանքների համար:
- Քանի որ միացման բարդությունը մեծանում է, Arduino loop մեթոդով գործարկվող կոդի քանակը մեծանում է, այսինքն ՝ յուրաքանչյուր ցիկլի տևողությունն ավելի երկար է:
- Նույնիսկ եթե սխեմայի բարդությունը ցածր է, յուրաքանչյուր ցիկլ պահանջում է պրոցեսորի բազմաթիվ հրահանգներ `մուտքային քորոցների արժեքները բերելու և ելքային քորոցների արժեքները գրելու և օղակի վերև վերադառնալու համար: 16 ՄՀց բյուրեղով, նույնիսկ ժամացույցի մեկ ցիկլի մեկ ցուցումով, օղակը չի աշխատի ավելի քան 1 միլիոն անգամ մեկ վայրկյանում (1 ՄՀց): Էլեկտրոնիկայի սիրողական նախագծերի մեծ մասի համար դա, սակայն, ավելի արագ է, քան անհրաժեշտ է:
Խորհուրդ ենք տալիս:
ELEGOO Kit Lab կամ Ինչպես ավելի հեշտացնել իմ կյանքը որպես ծրագրավորող. 5 քայլ (նկարներով)
ELEGOO Kit Lab կամ Ինչպես ավելի հեշտացնել իմ կյանքը որպես ծրագրավորող. Projectրագրի նպատակները Մեզանից շատերը խնդիրներ ունեն ՄԱԿ-ի վերահսկիչների շուրջ ծաղրված մոդելի հետ: Հաճախ բաղադրիչների լարերը դժվարանում են բազմաթիվ բաղադրիչների դեպքում: Մյուս կողմից, Arduino- ի ներքո ծրագրավորումը կարող է լինել բարդ և կարող է պահանջել շատ
Arduino որպես ISP -- Այրեք վեցանկյուն ֆայլ AVR- ում -- Ապահովիչ AVR -- Arduino- ն որպես ծրագրավորող. 10 քայլ
Arduino- ն որպես ISP || Այրեք վեցանկյուն ֆայլ AVR- ում || Ապահովիչ AVR || Arduino- ն որպես ծրագրավորող. ………………….. ամեն ինչ arduino- ի մասին է, ինչպես isp: Եթե ցանկանում եք վերբեռնել վեցանկյուն ֆայլ կամ եթե ցանկանում եք տեղադրել ձեր ապահովիչը AVR- ում, ապա կարիք չկա ծրագրավորող գնել, կարող եք անել
$ 2 Arduino: ATMEGA328- ը ՝ որպես ինքնուրույն: Հեշտ, էժան և շատ փոքր: ամբողջական ուղեցույց. 6 քայլ (նկարներով)
$ 2 Arduino: ATMEGA328- ը ՝ որպես ինքնուրույն: Հեշտ, էժան և շատ փոքր: ամբողջական ուղեցույց. Նրանք կարժենան ընդամենը 2 դոլար, կարող են անել նույնը, ինչ ձեր Arduino- ն և ձեր նախագծերը դարձնել չափազանց փոքր: Մենք ծածկելու ենք քորոցների դասավորությունը
Mingրագրավորում ATTiny85, ATTiny84 և ATMega328P. Arduino որպես ISP: 9 քայլ (նկարներով)
Recentlyրագրավորում ATTiny85, ATTiny84 և ATMega328P. Arduino As ISP: Նախաբան Ես վերջերս մշակում եմ մի քանի ESP8266 IoT նախագծեր և պարզում եմ, որ հիմնական պրոցեսորը պայքարում էր բոլոր առաջադրանքները կատարելու համար, ուստի որոշեցի բաշխել որոշ ավելի քիչ կարևոր գործողություններ այլ միկրո
Ինչպես օգտագործել Wiimote- ը որպես համակարգչային մկնիկ ՝ օգտագործելով մոմերը որպես սենսոր !!: 3 քայլ
Ինչպես օգտագործել Wiimote- ը որպես համակարգչային մկնիկ ՝ օգտագործելով մոմերը որպես սենսոր