Բովանդակություն:
- Քայլ 1: Ակնարկ
- Քայլ 2: Նյութեր
- Քայլ 3: Խաղի պատրաստում
- Քայլ 4: Displayուցադրել արդյունքը
- Քայլ 5: Ամեն ինչ միասին դնել
- Քայլ 6: Ապագա փոփոխություններ
- Քայլ 7: Եզրակացություն
Video: FPGA աստերոիդ խաղ. 7 քայլ (նկարներով)
2024 Հեղինակ: John Day | [email protected]. Վերջին փոփոխված: 2024-01-30 09:51
Մեր CPE 133 եզրափակիչ նախագծի համար մենք որոշեցինք աստերոիդների խաղ ստեղծել մեր FPGA- ում ՝ օգտագործելով երկու կոճակ անջատիչներ և 7 հատվածի էկրան: Խաղը գործում է այնպես, որ աստերոիդը ձվադրում է պատահականորեն ընտրված երեք շարքերից մեկում և ցավոտ գալիս դեպի նավը ՝ 7 հատվածից բաղկացած ցուցադրման մյուս կողմում: Վերին և ստորին կոճակները կարող են օգտագործվել ձեր նավը աստերոիդի ճանապարհից հեռացնելու համար: Չկարողանալով դա անել, էկրանը մի պահ կարդում է «BAnG», այնուհետև արագ վերագործարկում է խաղը, որպեսզի օգտագործողը կարողանա նորից փորձել: Ստորև բերված է ծրագրի նկարագրության համառոտ նկարագրությունը, որպեսզի ցանկացած օգտվող կարողանա կրկնօրինակել կամ բարելավել մեր դիզայնը:
Քայլ 1: Ակնարկ
Նախագիծը հիմնականում բաղկացած է վերջնական վիճակի մեքենաներից (FSM), որոնք տրամաբանությամբ FPGA- ն փոխանցում են այն պետությունների միջև, որոնք պահում և ցուցադրում են նավերի և ժայռերի դիրքերի տարբեր արժեքներ: Երկու հիմնական մոդուլներն են ժայռի և նավի համար նախատեսված FSM խաղերը և երկու հատվածից մինչև 7 հատվածի ցուցադրման ապակոդավորող FSM- ը, որոնք միասին ինտեգրված են ՝ օգտագործելով VHDL- ում շատ պարզ կառուցվածքային մոդել:
FSM- ները ստեղծվել են նավի դիրքի, ժայռի դիրքի և 7-հատվածանոց ապակոդավորման համար: Նավի FSM- ի նպատակն այն է, որ նավը կարողանա տեղափոխվել ճիշտ դիրք, երբ նվագարկիչը սեղմում է վեր կամ վար կոճակը: FSM- ն անհրաժեշտ է, քանի որ այն պետք է հիշի, թե որ դիրքում է վերջին անգամ ճիշտ դիրքի անցնելու համար:
Theայռի FSM- ի նպատակն է ժայռը տեղափոխել ճիշտ դիրքի `հիմնվելով այն շարքի վրա և վերջին շարքի վերջին դիրքի վրա: Բացի այդ, այն հետևում է այն մոդուլի դիրքին, որը կցուցադրի այն և կեղծ պատահականորեն ընտրում է հաջորդ տողում հայտնվող նոր տող:
FSM- ը 7-հատվածի ցուցադրման ապակոդավորման համար օգտագործվել է ոչ միայն նավը և ժայռը ցուցադրելու, այլև «BAnG» ցուցադրելու համար, երբ նավի դիրքը և ժայռի դիրքերը նույնն են:
Քայլ 2: Նյութեր
Նախագծում օգտագործված նյութերն էին.
- Basile3 զարգացման խորհուրդ Digilent, Inc.
- Vivado Design Suite
- sseg_dec.vhd (Այս ֆայլը տրամադրվել է մեզ Polylearn կայքում և գրել է Բրայան Միլին)
- Clk_div.vhd (Այս ֆայլը տրամադրվել է մեզ Polylearn կայքում և գրվել է Բրայան Միլիի կողմից)
- Երեք սահմանափակ վիճակի մեքենա (FSM)
Քայլ 3: Խաղի պատրաստում
Խաղի մոդուլը ստեղծվել է վարքագծային մոդելավորման միջոցով `նկարագրելով նավի և ժայռի վիճակները իրենց համապատասխան FSM- ների համար: Դրա առավելությունն այն է, որ շատ ավելի հեշտ է սխեման վարքագծով մոդելավորել `նկարագրելով այն, ինչ անում է, այլ ոչ թե պարզել սարքավորումների նախագծման համար անհրաժեշտ բոլոր բաղադրիչները:
Rockայռի վիճակները կատարվել են ժայռի առաջին դիրքի համար կեղծ պատահական թվերի գեներատորի միջոցով: Դա իրականացնելու համար մենք գեներատորին տվեցինք սեփական ժամացույցը, որը չափազանց արագ էր խաղի արագության համեմատ: Յուրաքանչյուր աճող եզրին ավելանում է երեք բիթանոց համար, և նրա բոլոր արժեքները համապատասխանում են նավի մեկնարկի երեք վիճակից մեկին: Հետևաբար, երեք արժեքներ համապատասխանում են դիրքին 3 -ին (վերևի աջ կողմում), երեքը `7 -ին (կենտրոնին), իսկ երկուսը` 11 -ին (ներքևի աջ):
Երբ պատահական սերունդ է առաջացել և աստերոիդը ստացել է նախնական վիճակ, այն առանց ընդհատումների հորիզոնական հոսում է դեպի նավը:
0 ← 1 ← 2 ← 3
4 ← 5 ← 6 ← 7
11 ← 10 ← 9 ← 8
Rockամացույցը, որն օգտագործվում է ժայռի հաջորդ պետական տրամաբանության համար, վերահսկում է խաղի արագությունը. մենք փորձարկման և սխալի միջոցով պարզեցինք, որ 9999999 -ը լավ արժեք է իր առավելագույն հաշվարկի համար:
Նավի տրամաբանությունը գործում է ՝ նախաստորագրելով դեպի ձախ դիրքի կենտրոնական դիրքը (դիրք 4): Եթե սեղմված է վերին կամ ստորին կոճակը, նավը վեր ու վար կշարժվի դեպի 0 և 11 դիրքերը, որոնք համապատասխանում են սեղմված կոճակին:
Որպեսզի նավի շարժումը օգտվողի համար լավ զգա, մենք նրա շարժումը ասինխրոն չենք դարձրել: Մենք օգտագործել ենք ժամացույցը դրա վիճակի փոփոխությունների համար և օգտագործել ենք առավելագույնը 5555555:
Քայլ 4: Displayուցադրել արդյունքը
Երկուականից մինչև 7 հատվածի ապակոդավորիչը ընդունում է նավի և աստերոիդի դիրքի 4-բիթանոց փոփոխականները և ցուցադրում համապատասխան պատկերը (կամ նավը և ժայռը, կամ «BAnG» հաղորդագրությունը):
Դա հասնում է դրան ՝ նախ ստուգելով, թե արդյոք երկուսը հավասար են, այնուհետև ցուցադրելով «BAnG» հաղորդագրությունը, եթե չեկը ճշմարիտ է դառնում:
Եթե այն ճշմարիտ չվերադառնա, ապա վերծանողը կցուցադրի նավն ու ժայռը ՝ դրանք փոխելով ժամացույցի շատ բարձր հաճախականությամբ և խաբելով աչքին ՝ տեսնելով դրանք, կարծես դրանք միաժամանակ ցուցադրվում են:
Քայլ 5: Ամեն ինչ միասին դնել
Մենք ընդգրկեցինք նավի և ժայռի FSM- ը մեկ մեծ FSM- ում, որը միացրել էինք ցուցադրման FSM- ին: Խաղի մուտքերն են BASYS3 տախտակի վերևի և ներքևի կոճակը և համակարգի ժամացույցը: Արդյունքները հատվածի և անոդի վեկտորներն են ՝ յոթ հատված-ցուցադրում:
Այս մուտքերն ու ելքերը կերևան այն սահմանափակումների ֆայլում, որտեղ դրանք քարտեզագրված են:
Քայլ 6: Ապագա փոփոխություններ
Հետագայում նախագծին նավերի շարժման ավելի շատ գործառույթներ ավելացնելը բարելավում կլինի: Դա կարող է կատարվել պարզապես կոճակի ևս 2 մուտքագրում տալով և նավին թույլ տալ 0, 4 և 8 -ից տարբեր դիրքեր զբաղեցնել (մեկ այլ հնարավոր փոփոխություն) կարող է լինել աստերոիդի հաջորդ վիճակի վերահսկումը, որպեսզի այն դանդաղ սկսվի և արագությունը բարձրացնի 1.5 անգամ ամեն անգամ, երբ նա բաց է թողնում նավը, մինչև որ հարված է ստանում, որտեղ այն կվերագործարկվեր և նորից կդանդաղեր: Դա կբարձրացնի խաղի դժվարությունը և այն ավելի զվարճալի կդարձնի օգտվողի համար, եթե այն իրականացվի, և դա կարելի է անել ՝ ստեղծելով փոփոխական ժայռի հաջորդ ժամացույցի առավելագույն հաշվարկման համար, բազմապատկելով այդ փոփոխականը 1,5 անգամ ամեն անգամ, երբ աստերոիդը չի կատարում հարվածել, և ամեն անգամ ռոքի հարվածից այն վերականգնել սկզբնական արժեքին:
Քայլ 7: Եզրակացություն
Այս նախագիծը մեզ օգնեց ավելի լավ հասկանալ սահմանափակ վիճակի մեքենաները, ժամացույցները և յոթ հատվածից բաղկացած դիսփլեյների վրա ինտերակտիվ ցուցադրումը:
Սահմանափակ վիճակի մեքենաների մեջ ամենամեծը այն է, որ կարևոր է իմանալ (հիշել), թե ինչ վիճակում եք գտնվում, հաջորդ ցանկալի վիճակին անցնելու համար: Ronակատագրի հեգնանքով ՝ կյանքի լավ խորհուրդ; դուք պետք է իմանաք, թե որտեղ եք գտնվում, որպեսզի իմանաք, թե ուր եք գնում:
Manipամացույցների տարբեր նմուշներ շահարկելով ՝ մենք կարողացանք պատահականորեն թվեր առաջացնել, ժայռը տեղափոխել հաջորդ դիրք և կառավարել նավի, ժայռի և խաղի ավարտի հաղորդագրության ցուցադրումը:
Իմացանք, որ մեկից ավելի անոդ չի կարող ցուցադրվել միաժամանակ: Մեզ տրված մոդուլը օգտվեց այն հանգամանքից, որ մարդու աչքը կարող է տեսնել տարբերությունը միայն մինչև որոշակի հաճախականություն: Այսպիսով, ընտրվեց անոդների միացման ավելի մեծ հաճախականություն: Նավն ու ժայռը միևնույն ժամանակ տեսնելը իրականում ակնարկ է, քանի որ յուրաքանչյուրը ցուցադրվում է առանձին, բայց շատ արագ: Այդ հայեցակարգը կիրառվեց նավի, ժայռի և «BAnG» հաղորդագրության շարժումը ցուցադրելու համար:
Խորհուրդ ենք տալիս:
DIY 37 Leds Arduino ռուլետկա խաղ. 3 քայլ (նկարներով)
DIY 37 Leds Arduino Ռուլետկա խաղ. Ռուլետկա կազինո խաղ է, որը կոչվում է ֆրանսերեն բառի անունով, որը նշանակում է փոքրիկ անիվ
BBC Micro: bit and Scratch - Ինտերակտիվ ղեկ և մեքենա վարելու խաղ. 5 քայլ (նկարներով)
BBC Micro: bit and Scratch - Ինտերակտիվ ղեկ և մեքենա Ես կարծում էի, որ սա կատարյալ հնարավորություն էր ՝ իմ ThreadBoard- ի միջոցով ներկառուցված համակարգ ստեղծելու համար: Իմ ոգեշնչումը քերծվածքների համար
Էլեկտրոնային խաղ Tic-Tac-Toe խաղ փայտե տուփի մեջ. 5 քայլ
Էլեկտրոնային խաղ Tic-Tac-Toe- ը փայտե տուփի մեջ
Aruduino LED խաղ Արագ կտտացնելով երկու խաղացողի խաղ. 8 քայլ
Aruduino LED խաղ Արագ սեղմում երկու խաղացողի խաղ. Այս նախագիծը ոգեշնչված է @HassonAlkeim- ից: Եթե պատրաստ եք խորը հայացք նետել, այստեղ կա մի հղում, որը կարող եք ստուգել https://www.instructables.com/id/Arduino-Two-Player-Fast-Button-Clicking-Game/: Այս խաղը Alkeim's- ի կատարելագործված տարբերակն է: Դա է
FPGA արձագանքման խաղ. 10 քայլ
FPGA արձագանքման խաղ. Ամառային Ռադերֆորդի և Ռեգիտա Սոետանդարի կողմից