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

FPGA աստերոիդ խաղ. 7 քայլ (նկարներով)
FPGA աստերոիդ խաղ. 7 քայլ (նկարներով)

Video: FPGA աստերոիդ խաղ. 7 քայլ (նկարներով)

Video: FPGA աստերոիդ խաղ. 7 քայլ (նկարներով)
Video: «Մոր և մանկան անկյուն». Պետք է հասկանալ՝ հոգեբանական խնդրով երեխան ներառելի է, թե ոչ 21.10.2019 2024, Նոյեմբեր
Anonim
FPGA աստերոիդների խաղ
FPGA աստերոիդների խաղ

Մեր 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» հաղորդագրության շարժումը ցուցադրելու համար:

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