Բովանդակություն:

Arduino որպես էժան Bboardboard FPGA. 5 քայլ (նկարներով)
Arduino որպես էժան Bboardboard FPGA. 5 քայլ (նկարներով)

Video: Arduino որպես էժան Bboardboard FPGA. 5 քայլ (նկարներով)

Video: Arduino որպես էժան Bboardboard FPGA. 5 քայլ (նկարներով)
Video: Lesson 01 Arduino Boards | Robojax Arduino Step By Step Course 2024, Նոյեմբեր
Anonim
Arduino- ն որպես էժան Bboardboard FPGA
Arduino- ն որպես էժան Bboardboard FPGA

Սարքավորման տրամաբանական սխեմաների նախագծումը կարող է հաճելի լինել: Դա անելու հին դպրոցական եղանակը 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- ն
Մուտքագրեք FPGA- ն
Մուտքագրեք FPGA- ն
Մուտքագրեք 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- ից մինչև Arduino
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- ից մինչև DIP Chip հացի տախտակի վրա
Arduino- ից մինչև DIP Chip հացի տախտակի վրա

Այժմ, երբ ծրագիրը աշխատում է 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 ՄՀց): Էլեկտրոնիկայի սիրողական նախագծերի մեծ մասի համար դա, սակայն, ավելի արագ է, քան անհրաժեշտ է:

Խորհուրդ ենք տալիս: