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

FPGA արձագանքման խաղ. 10 քայլ
FPGA արձագանքման խաղ. 10 քայլ

Video: FPGA արձագանքման խաղ. 10 քայլ

Video: FPGA արձագանքման խաղ. 10 քայլ
Video: Лекция №1 "Что умеют FPGA и зачем они нужны?" 2024, Նոյեմբեր
Anonim
FPGA արձագանքման խաղ
FPGA արձագանքման խաղ

Ամառային Ռադերֆորդի և Ռեգիտա Սոետանդարի կողմից

Քայլ 1: Ներածություն

CPE 133- ի մեր վերջին նախագծի համար մենք նախագծեցինք ռեակցիայի խաղ VHDL- ում ՝ Basys3 տախտակի համար: Այս խաղը կարող է առավել սերտ համեմատվել «Stacker» արկադային խաղի հետ, որտեղ խաղացողը պետք է ճիշտ ժամանակին գցի բլոկները: Basys3 տախտակը միացված է տախտակին, որն ունի փոփոխվող լուսադիոդներ: Այս LED լույսերը կփոխարինվեն որոշակի հաճախականությամբ `կախված մակարդակից: Այս խաղը օգտագործում է ժամացույցի բաժանարարը և 4 թվանշանի 7 հատվածի ցուցադրումը, ինչպես նաև սահմանափակ վիճակի մեքենա: Երբ նվագարկիչը միացնում է ճիշտ անջատիչը, երբ միջին LED- ը լուսավորվում է, խաղացողը կանցնի խաղի հաջորդ մակարդակին ՝ մեծացնելով փոփոխվող LED- ների հաճախականությունը: Սա յուրաքանչյուր հաջորդ մակարդակ դարձնում է ավելի բարդ, քան նախորդ մակարդակը: Երբ նվագարկիչը հաջողությամբ հաղթում է 7 -րդ մակարդակին, ամենաբարձր մակարդակին, հատվածի էկրանին կհայտնվի հաղորդագրություն, և բոլոր LED- ները միաժամանակ կմիացվեն և կանջատվեն:

Քայլ 2: Նյութեր

Նյութեր
Նյութեր
Նյութեր
Նյութեր
Նյութեր
Նյութեր

Ձեզ անհրաժեշտ նյութերն են.

  • Digilent Basys3 տախտակ ՝ միկրո USB մալուխով
  • Breadboard
  • 5 LED
  • 5 դիմադրություն (մենք օգտագործում էինք 220 օմ)
  • 11 jumper լարերը
  • Համակարգիչ Vivado- ի հետ

Քայլ 3. Բարձր մակարդակի դիագրամ Սև արկղի ձևավորում

Բարձր մակարդակի դիագրամ Սև արկղի ձևավորում
Բարձր մակարդակի դիագրամ Սև արկղի ձևավորում
Բարձր մակարդակի դիագրամ Սև արկղի ձևավորում
Բարձր մակարդակի դիագրամ Սև արկղի ձևավորում

Ինչպես տեսնում եք, մեր բարձր մակարդակի բլոկ -դիագրամը սկսվում է մեր ենթամոդուլից ՝ ClkDivide- ից, անհրաժեշտ ժամացույցներ ձեռք բերելով: Այս ժամացույցները մուտքագրվում են տարբեր գործընթացային բլոկների մեջ: Ըստ էության, խաղը պետք է ընդունի, որ երբ օգտվողը ճիշտ է միացնում անջատիչը, LED- ները պետք է սկսեն ավելի արագ փոխվել, և ցուցադրումը պետք է բարձրանա մեկ մակարդակով: Բլոկ -դիագրամը կարող է մի փոքր խենթ թվալ, բայց դա այն պատճառով, որ կան շատ ազդակներ, որոնք հաստատվում են որոշակի գործընթացում, իսկ հետո այդ ազդանշանը սահմանում է մեկ այլ ազդանշան մեկ այլ գործընթացի բլոկում:

Ի վերջո, խաղի միակ մուտքը Basys3 տախտակի մուտքային ժամացույցն է, որն աշխատում է 100 ՄՀց հաճախականությամբ, յոթ անջատիչ Basys3 տախտակին և վերակայման կոճակը: Արտադրվողը յոթ հատվածի ցուցադրման անոդն է, ցուցադրման համար յոթ հատվածը և LED- ները:

Քայլ 4: CLKDivide

CLK Բաժանել
CLK Բաժանել
CLK Բաժանել
CLK Բաժանել
CLK Բաժանել
CLK Բաժանել

Clockամացույցի բաժանարար այս ենթամոդուլը ստեղծեց ավելի դանդաղ ժամացույց `կախված այն արժեքից, որը մենք քարտեզագրել ենք դրան մեր հիմնական ֆայլում: Այս ենթամոդուլն օգտագործեցինք Clk400, PushClk և newlck որոշելու համար: Այս ենթամոդուլը որպես մուտքագրում վերցնում է ժամացույց և 32 բիթ բաժանարար: Դանդաղեցված ժամացույցը թողարկվում է: Կա բաժանարար և դանդաղ ժամացույցի գործընթացի արգելափակում: Ընթացքում մի ժամանակավոր փոփոխական է, որը մենք անվանում էինք հաշվարկ, որը հաշվարկվում է ամեն անգամ, երբ մուտքագրված ժամացույցի բարձրացող ծայրը հարվածում է: Երբ այն հասնում է բաժանարարի թվին, դանդաղեցված ժամացույցը միանում է և հաշվում զրոյականացում:

Քայլ 5: Տեղափոխել գործընթացի արգելափակումը

Shift գործընթացի արգելափակում
Shift գործընթացի արգելափակում

Shift գործընթացի բլոկը վերահսկում է LED- ների փոփոխական շարժումը և արագությունը: Theգայունության ցուցակում են newclk և Stop ազդանշանները: Stop- ը կարճ հետաձգում է առաջացնում, երբ օգտագործողը անցնում է մակարդակը: Եթե Stop- ը բարձր չէ, ապա LED- ները սովորականին փոխարինվում են ՝ հիմնվելով newclk- ի արագության վրա: Այս փոփոխական օրինաչափությունը վերահսկվում է երկու փոփոխականով ՝ Հետևել և հաշվարկել: Count- ը որոշում է, թե որ LED- ը պետք է միացված լինի, մինչդեռ Track- ը որոշում է, թե արդյոք հաշվարկը պետք է հաշվի վեր կամ վար: Կա ևս մեկ ազդանշան ՝ Վերջնական, որը կիրառվում է միայն այն դեպքում, երբ Մակարդակը «111» է ՝ նշելով, որ խաղացողը հաղթել է խաղը: Վերջնականը հերթափոխվում է 0 -ից 1 ժամացույցի յուրաքանչյուր եզրին `LED- ները անընդհատ միացնելու և անջատելու համար: Սա պարզապես տեսողական տարր է վերջնական ցուցադրման համար:

Այս հերթափոխի գործընթացը կատարյալ վայր է այս նախագծի մեկնարկի համար: Եթե դուք կարող եք ձեր LED- ները ճիշտ և հետևողականորեն փոխարինել, ապա այստեղից դուք պարզապես պետք է ավելացնեք վարքագիծը ՝ հավասարվելիս:

Քայլ 6: Վերջնական վիճակի մեքենա

Վերջնական վիճակի մեքենա
Վերջնական վիճակի մեքենա

Մենք ստեղծեցինք վերջնական վիճակի մեքենա, որը թելադրում է վարքագիծը, երբ սեղմվում է մուտքի անջատիչը կամ վերականգնման կոճակը: Յուրաքանչյուր վիճակ «մակարդակ» է, և եթե անջատիչը միացված է սխալ պահին կամ սեղմվում է «զրոյական», մակարդակը վերադառնում է «000»: Հակառակ դեպքում, եթե անջատիչը ճիշտ միացված է, ապա մակարդակը բարձրանում է մինչև վերջնական վիճակի հասնելը ՝ «111», և հայտնվում է վերջնական ցուցադրումը: FSM- ը հիմնված է երկու գործընթացային բլոկների վրա sync_proc և comb_proc: Sync_proc- ն օգտագործում է այն ժամացույցը, որը մենք անվանում էինք PushClk: Այս ժամացույցը վերահսկում է, թե որքան արագ է հաջորդ վիճակը դառնում ներկա վիճակը: Այս ժամացույցը պետք է լինի բավականին արագ; մենք ընտրեցինք արագություն, որը մոտ երկու անգամ ավելի մեծ էր, քան մեր ամենաարագ LED արագությունը:

Մենք կիրառեցինք այս ծածկագիրը `օգտագործելով FSM մակարդակների համար. այնուհանդերձ, այս նախագծից հետո մենք հասկացանք, որ ԱԴM-ի առավել արդյունավետ օգտագործումը կարող էր լինել հաշվելու, վերականգնման կամ մնալու վիճակ ունենալը: Եթե ոչինչ չի սեղմվում, ապա այն գտնվում է մնալու վիճակում: Եթե վերականգնումը սեղմվում է կամ նվագարկիչը խափանվել է, այն գտնվում է վերականգնման վիճակում: Correctlyիշտ սեղմելու դեպքում այն գտնվում է հաշվելու վիճակում: Այս խաղում նույնպես FSM- ն օգտագործելու շատ այլ եղանակներ կան:

Քայլ 7. Displayուցադրման գործընթացի արգելափակումը մակարդակով

Displayուցադրման գործընթացի արգելափակում մակարդակով
Displayուցադրման գործընթացի արգելափակում մակարդակով

Level- ը վերահսկում է processուցադրման գործընթացի բլոկը: Theգայունության ցուցակի փոփոխականներն են Level, Reset և Clk400: 7 հատվածի ցուցադրումը սկսվում է առաջին մակարդակի համար ցուցադրելով «1»: Այն հաշվում է մինչև 7 -ը ամեն անգամ, երբ օգտվողը անցնում է մակարդակ ՝ օգտագործողին ցույց տալու, թե ինչ մակարդակի վրա է: Երբ օգտագործողը կանցնի 7 -րդ մակարդակը, այն ցուցադրում է «COOL» ՝ նշելով, որ խաղացողը հաղթել է խաղը: Այս «COOL» էկրանն աշխատում է 400 Հց ժամացույցից, որը մենք անվանում էինք Clk400: Եթե Reset- ը սեղմված է, էկրանը վերադառնում է «1»:

Քայլ 8: LED արագությունը մակարդակով վերահսկելը

LED արագության վերահսկում մակարդակով
LED արագության վերահսկում մակարդակով

Վերջապես, Level- ը վերահսկում է LED- ների արագությունը: Մակարդակը զգայունության ցուցակի միակ ազդանշանն է: D1- ը ազդանշան է, որը մտնում է ockամացույցի բաժանարար գործընթացի մեջ ՝ նորկլք ստանալու համար: Ամեն անգամ, երբ մակարդակը փոխվում է, կամ վիճակը փոխվում է, գործընթացի արգելափակումը «Արագություն»: Այս գործընթացը որոշում է D1- ի արժեքը: Կան D1- ի 8 սահմանված արժեքներ, որոնք մենք ընտրել ենք ՝ ելնելով այն բանից, թե որքան արագ էինք ցանկանում, որ յուրաքանչյուր մակարդակ գործարկվի: D1- ը փոքրանում է ամեն անգամ, երբ մակարդակը բարձրանում է, որպեսզի newclk- ն ավելի արագ աշխատի:

Քայլ 9: Սարքավորումների հավաքում

Սարքավորումների հավաքում
Սարքավորումների հավաքում

Մենք հացահատիկը միացրեցինք Basys3- ին `pmod միակցիչներից մեկով: Pmod նավահանգիստներից վեցն օգտագործվել են արականից արական միակցիչին միացնելու համար, մեկը գետնի համար, իսկ մյուս հինգը ՝ 5 LED- ների համար: Մենք նաև տեղադրեցինք ռեզիստոր յուրաքանչյուր LED- ի համար: Այս դիմադրիչները 220Ω են և կանխում են LED- ների կարճ միացումը և այրումը: Չնայած յուրաքանչյուր LED ունի որոշակի դիմադրություն, դիմադրությունը բավարար չէ աղբյուրից լարումը խոչընդոտելու համար:

Քայլ 10: Funվարճացեք:

Այս խաղը շատ հեշտ է խաղալ: Խաղացողը սկսում է տախտակի 1 ծայրամասային աջ անջատիչից ՝ V17: Նրանք պետք է անջատիչը բարձր շրջեն, երբ միջին LED- ը միացված է: Հետո նրանք մեկ անջատիչ տեղափոխում են ձախ և անում նույնը: Եթե խաղացողը հասնի մինչև վերջ, նրանք կհայտնվեն յոթերորդ անջատիչում ՝ W14: Եթե նրանք հաղթեն խաղին, նրանք կտեսնեն իսկապես զվարճալի ավարտվող ցուցադրում:

Պետք է նշել, որ այս խաղը ստեղծելիս արագությունը լիովին կախված է ձեզանից: Եթե մեր ընտրած արագությունները չափազանց դանդաղ են, ազատ զգացեք արագացնել այն և դարձնել այն ավելի դժվար: Չկա նաև մակարդակների սահմանված քանակ: Եթե ցանկանում եք այն դարձնել ավելի շատ մակարդակներ, կան փոփոխություններ, որոնք պետք է կատարվեն FSM- ում և Level- ով որոշվող գործընթացի բլոկներում, բայց դրանք շատ պարզ փոփոխություններ են:

Մենք նաև ընտրեցինք օգտագործել անջատիչները տախտակի վրա որպես օգտագործողի մուտքագրում, բայց դա հնարավոր է նաև Basys3 տախտակի կոճակով; կոճակը կվերացնի անջատիչների վերակայման անհրաժեշտությունը ամեն անգամ, երբ օգտվողը սկսում է նորից: Սկզբում մենք օգտագործում էինք կոճակ, սակայն դա սխալներ առաջացրեց մակարդակի սահմանման մեջ, քանի որ այն կբարձրանա մի քանի մակարդակով, եթե կոճակը պահելու ժամանակ հարվածի PushClk- ի երկու բարձրացող եզրեր:

Ստորև բերված է մի տեսանյութ, որը ցույց է տալիս, թե ինչպես խաղալ, անցնելով առաջին 4 մակարդակները և վերջնական ավարտի ցուցադրումը:

Այս նախագծի հիմնական ֆայլը ներառված է ստորև:

Աղբյուրներ

Basys3 տեղեկատու ձեռնարկ

Ոգեշնչում նախագծի համար - Arduino Stop It խաղ

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