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

Պոնգ խաղ ՝ 6 քայլ
Պոնգ խաղ ՝ 6 քայլ

Video: Պոնգ խաղ ՝ 6 քայլ

Video: Պոնգ խաղ ՝ 6 քայլ
Video: «Աղուէս» դաս 8 - Խաղի օրինակ PING PONG։ Lesson 8 - Game example Ping Pong 2024, Նոյեմբեր
Anonim
Պոնգ խաղ
Պոնգ խաղ

Նյութեր:

Basys3 FPGA խորհուրդը

VGA մալուխ

Վիվադո

Այս հրահանգի նպատակն է մշակել պոնգյան խաղ, որը կցուցադրվի մոնիտորի վրա: Willրագիրը կօգտագործի VHDL- ը `ծրագրավորման համար և օգտագործում է Basys3 FPGA ծածկագիրը կատարելու համար, և պատկերը փոխանցում է VGA ինտերֆեյսի միջոցով: Այս ձեռնարկը նախատեսված է այն մարդկանց համար, ովքեր ունեն VHDL- ի մի փոքր նախնական գիտելիքներ: Ձեռնարկը կբաժանվի 6 տարբեր բաժինների ՝ Ակնարկ, գործընթաց, միավորների կառավարիչ, պատկերի ստեղծում, պոնգ խաղ և VGA:

Քայլ 1: Ակնարկ

Ակնարկ
Ակնարկ

Վերոնշյալ պատկերը ծրագրի ընդհանուր սխեմատիկ ձևավորումն է:

Խաղի նպատակը

Խաղը բաղկացած է լոգարիթմական թիակով ցուցադրումից, որը կարող է կառավարվել օգտվողի կողմից և ամրացված պատից, որը հանդես է գալիս որպես վերին սահման: Երբ օգտվողը սեղմում է մեկնարկի կոճակը, որը վերևի կոճակն է, գնդակը կսկսի ցատկել վերև և դուրս կընկնի պատից և կփորձի հարվածել թիակին: Եթե գնդակը դիպչում է թիակին, այն նորից վեր է թռչում և շարունակում թռիչքը, քանի դեռ այն բաց չի թողնում թիակը: Խաղը ավարտվում է, երբ գնդակը չի կարողանում հարվածել թիակին: Օգտագործողը կկարողանա օգտագործել ձախ և աջ կոճակները `թիակի շարժումը որոշելու համար: Խաղը վերականգնելու համար օգտագործողը պետք է սեղմի կենտրոնական կոճակը: Վազքի ժամանակը կարձանագրվի 7 հատվածի էկրանին: Կան հինգ մակարդակներ, և յուրաքանչյուր տասը վայրկյանը մեկ մակարդակը բարձրանում է, մինչև որ հասնեք 5 -րդ մակարդակին, որտեղ այն մնում է մինչև օգտագործողի պարտությունը: Մակարդակները որոշվում են գնդակի արագությամբ; սա նշանակում է, որ յուրաքանչյուր տասը վայրկյանը մեկ գնդակի արագությունը մեծանում է ՝ դրանով իսկ մեծացնելով խաղի դժվարությունը:

Համակարգի ճարտարապետություն

Ստորև բերված սխեման համակարգի հիմնական ընդհանուր վերին մակարդակի բլոկ-դիագրամն է: Համակարգն ունի չորս մուտք ՝ Button R, Button L, Start և Reset և ժամացույց: Այն ունի հորիզոնական և ուղղահայաց համաժամացման ելքեր ՝ RBG (որը վերաբերում է որոշակի վայրում պիքսելների գույնին) և Score (որը 7-հատվածի ցուցադրման ավտոբուսի դերում է): Վերևի կոճակը կօգտագործվի որպես սկիզբ կոճակը, իսկ ձախ և աջ կոճակները կօգտագործվեն թիակը համապատասխան ուղղություններով տեղափոխելու համար: 7-հատվածի ցուցադրումը կօգտագործվի հաշիվը գրանցելու համար, ինչը այն վայրկյանների քանակն է, որը խաղացողը խաղում է առանց խաղը պարտվելու: Թիվը կցուցադրվի որպես տասնորդական թիվ:

Շրջանային ճարտարապետություն. Մենք կկառուցենք մեր գիզմոն `օգտագործելով մեկ FSM, որը պարունակում է ավելի փոքր FSM, ենթա-FSM- ը կվերահսկի խաղի դժվարությունը, մինչդեռ հիմնական FSM- ը կվերահսկի խաղի ընդհանուր հոսքը: Մեր gizmo- ն կօգտագործի նաև ժամացույցի առնվազն երեք բաժանարար ՝ մեկը հաշվի համար (ժամանակը), մեկը ՝ ցուցադրման թարմացման արագությունը և մեկը, որը միացված է DeMux- ի ելքին, որպեսզի մենք կարողանանք վերահսկել խաղի արագությունը: կշարունակվի աճող դժվարություններով: Որքան երկար խաղաք, խաղը շատ ավելի արագ կշարժվի: Մենք կունենանք DeMux- ի ենթա-FSM- ի ներկա վիճակի վերահսկման մուտքագրում, որպեսզի կարողանանք վերահսկել, թե որքան արագ կընթանա խաղը, որքան ժամանակ դուք այն խաղաք: Մենք կօգտագործենք մի քանի հաշվիչ ՝ մեկը ցուցադրումը թարմացնելու և մեկը հաշիվը հաշվելու համար ՝ շարունակելով խաղալ: Այս նախագիծն ունի երկու հիմնական մոդուլ և ենթամոդուլների զանգված, որոնք շահարկելու են մուտքային տվյալները: Երկու հիմնական ենթամոդուլներն են VGA վարորդը, ինչպես նաև կոճակի տրամաբանական մոդուլը: VGA վարորդը բաղկացած կլինի ծրագրավորվող հիշողությունից, ժամացույցի բաժանարարից և տրամաբանությունից, որը կշահի գույնի ելքը: Կոճակի տրամաբանական մոդուլը բաղկացած կլինի նաև ժամացույցի բաժանարարից և ծրագրավորվող հիշողությունից, ինչպես նաև 7-հատվածանոց ցուցադրման համար երկուականից տասնորդական փոխարկիչ `համապատասխան ժամացույցի բաժանարարով:

Քայլ 2: Պատկերի մշակում

Theրագրի Image Process բաժնի համար մենք որոշելու ենք գնդակի և թիակի շարժը: Programրագիրն ունի նավահանգիստներ, որոնք ներառում են ձախ, աջ, վերին և կենտրոնական կոճակները, ներկա վիճակը, ժամացույցը, գնդակի X և Y դիրքերը, թիակի ձախ և աջ եզրը և ձախողումը: Ներկայիս վիճակը օգտագործվում է միացման ազդանշանը որոշելու համար: Կոդը անցնում է բազմաթիվ դեպքերի վրա, որոնցով գնդակը կարող է շարժվել, և պայմաններ է դրել գնդակի ուղին որոշելու համար: Հաջորդ գործընթացի բլոկը որոշում է այն ուղղությունը, որով թիավարությունը շարժվում է ՝ ելնելով օգտագործողի կողմից սեղմված կոճակից: Thisրագրի այս մասի ծածկագիրը կցված է մանրամասն մեկնաբանություններով, որոնք նկարագրում են, թե ինչ է անում յուրաքանչյուր հատված:

Քայլ 3: Հաշվարկների կառավարիչ

Score Handler
Score Handler

Այս բաժինը բաղկացած է ֆայլերից, որոնք վերաբերում են Basys3- ի տախտակի 7 հատվածների ցուցադրման վրա հաշիվը վայրկյաններով ցուցադրելուն: Այն ներառում է ժամացույցի բաժանարար, որն օգտագործվում է վայրկյանները հաշվելու համար, միավորների հաշվիչը հաշվում է այն վայրկյանները, որոնք օգտվողը խաղում է, հատվածի վարորդը վերցնում է հաշիվը և այն վերածում է անոդների և կաթոդների `էկրանին ցուցադրվելու համար, ինչպես նաև որոշում է այն դիրքը: համարը կցուցադրվի, և վերջապես, հատվածի կառավարիչը երկուական թվերը փոխակերպում է տասնորդական թվերի `էկրանին ցուցադրվելու համար: Հաշիվը կարգավորողը միավորում է բոլոր կտորները և քարտեզագրում ազդանշանները: Բոլոր հինգ ֆայլերի ծածկագիրը կցված է ստորև:

Ockամացույցի բաժանարար

Clockամացույցի բաժանարարն ունի մուտքեր Clk (ժամացույց), CEN (միացնել) և Div (բաժանարար) և ելք Clk_out: Եթե միացման ազդանշանը միացված է, ապա ժամացույցը կհաշվի բարձրացող եզրին:

Միավորների հաշվիչ

Thescore հաշվիչն ունի մուտքեր Clk (ockամացույց) և RST (Վերագործարկում) և ելքեր Clk_Out և Q, որոնք էապես գործում են որպես միավորի ելք:

Սեգմենտի վարորդ

Սեգմենտի վարորդն ունի մուտքեր D1, D10, D100, D1000 և ockամացույց: «D» - ից հետո թվերը վերաբերում են 7 հատվածի ցուցադրման տասնորդական տեղին: Արդյունքները անոդներն ու թվանշանն են: Theամացույցը հաշվում և նշանակում է թվերը և դրա դիրքը: Օրինակ ՝ «9» -ը կցուցադրվի մեկ տեղում ՝ «0» –ով հազարներով, հարյուրներով և տասնյակներով: Երբ այն անցնում է «10» -ին, թիվը այժմ կունենա «1» տասնյակ տեղում և «0» ՝ հազարավոր, հարյուրավոր և մեկ տեղում:

Սեգմենտների կառավարիչ

Սեգմենտների կառավարիչը որպես մուտքագրում ունի թվանշան, իսկ ելք `կաթոդներ: Ըստ էության, կաթոդի ցուցադրման երկուական թվերը էկրանին տասնորդական թվեր են թողնում:

Score Handler

Score Handler- ը բաղկացած է նախորդ չորս սուբյեկտներից և դնում է բոլորը միասին և քարտեզագրում ազդանշանները: Այն նաև միացնում և անջատում է հաշվիչը ՝ ելնելով ներկա վիճակից:

Քայլ 4: Պատկերի ստեղծում

Պատկերի ստեղծումը բաղկացած է չորս բաղադրիչներից ՝ Շարժապատկերում, ձախողման հաշվիչ, Թարմացնել պատկեր և Սկսնակ հաշվիչ: Այս ֆայլերը վերաբերում են, թե ինչպես ստեղծել պատկերներ ցուցադրման մոնիտորի վրա:

Անիմացիա

Շարժապատկերային ֆայլն ունի մուտքեր Clk (ockամացույցի ազդանշան), CEN (հաշվելը միացնել), RST (ազդանշանի վերակայում), B_X (գնդակի X դիրք), B_Y (գնդակի Y դիրք), P_L (թիակի ձախ դիրք) և P_R (թիակի աջ դիրքը): Արդյունքներն են ՝ WA (հասցեն, որին գրում ենք գույնը) և WD (գույնը, որը գրվում է որոշված հասցեում): Ֆայլն ունի Play_Counter, որը հաշվիչ է, որը կօգտագործվի որպես MUX- ի հսկիչ մուտք, կոդավորիչ, որը կարող է ճիշտ գույները ճիշտ տեղերում թողնել, և վերջապես մուլտիպլեքսեր, որը ցուցադրում է ճիշտ գույնը `հիմնված թիակի դիրքի և գնդակ:

Թարմացնել պատկերը

Թարմացնել պատկերը ֆայլը օգտագործվում է պատկերը թարմացնելու համար, քանի որ գնդակի դիրքն ու թիակը փոխվում են: Ֆայլը ներառում է Animation, Start Counter և Fail Counter ֆայլերի բաղադրիչները: Այն քարտեզագրում է յուրաքանչյուր բաղադրիչի ազդանշանները և օգտագործում է պետական տրամաբանությունը `ազդանշանները և ելքային հասցեները որոշելու համար:

Սկսել հաշվիչը

Սկսնակ հաշվիչը օգտագործում է Clk, RS և CEN մուտքերը և թողարկում է WA և WD: Այն օգտագործում է հաշվիչ և փոխարկում `MUX- ի կառավարման հսկողությունը որոշելու համար: Multiplexer- ն այնուհետև օգտագործում է մուտքը `ճիշտ գույնի հասցեները որոշելու համար և այս տվյալները ուղարկում է VGA վարորդին: Սա օգտագործվում է «Պոնգ» ցուցադրելու համար, երբ օգտագործողը սկսում է խաղը:

Fail Counter

The fail հաշվիչն օգտագործվում է «Game Over» - ը ցուցադրելու համար, երբ օգտագործողը պարտվում է խաղը: Այն ունի Clk, RST և CEN ազդանշան: Այն օգտագործում է հաշվիչ և փոխակերպման բանաձև `MUX- ի կառավարման մուտքը որոշելու համար: Multiplexer- ն այնուհետև օգտագործում է մուտքը `ճիշտ գույնի հասցեները որոշելու համար և այս տվյալները ուղարկում է VGA վարորդին:

Քայլ 5. Պոնգ խաղ

Պոնգ խաղ
Պոնգ խաղ

Նախագծի այս հատվածը ներառում է Pong Master, Finite State Machine (FSM), Timer և Start Debounce ֆայլերը:

Timամաչափ

Timամաչափը ելքեր ունի Clk (ockամացույց) և PS (Ներկայիս վիճակ) և erամաչափ և Clk_out մուտքերը: Theամաչափը օգտագործվում է խաղի արագությունը մոտ հինգ վայրկյանը մեկ փոխելու համար:

Flow FSM

Flow FSM- ն ունի մուտքեր Clk, Fail, Timer, Bttn_S (Start Button) և Buttn_RST (Reset Button) և ելք Pres_S (Present State Output): FSM- ն օգտագործում է ժամաչափը `ներկայիս վիճակը հաջորդ վիճակին թարմացնելու համար և շարունակում է թարմացնել հաջորդ վիճակը, մինչև խաղը հասնի 5 -րդ մակարդակի, որտեղ այն մնում է մինչև խաղի ավարտը:

Սկսեք Debounce- ը

Start Debounce- ը գնդակի մեկնարկային վերադարձն է: Այն ունի մուտքեր S_in և Clk, իսկ ելք S_out:

Pong Master Այս ֆայլը օգտագործում է բոլոր նախորդ բաղադրիչները և այնպես է դարձնում, որ բոլոր բաղադրիչները լինեն ակնթարթային: Դա հիմնական ֆայլն է, որը միավորում է բոլոր նախորդ բաղադրիչները, որոնք մենք միասին ենք կառուցել:

Քայլ 6: VGA վարորդ

VGA (Visual Graphics Array) վարորդը ծրագրակազմ է, որն օգտագործվում է հրամաններ կամ տվյալներ ընդունելու համար, որոնք ուղարկվում են ցուցադրման էկրանին: Վարորդը մեզ տվեց մեր պրոֆեսորը: Օգտագործեք վարորդը և VGA լար `Basys3 տախտակը մոնիտորին միացնելու համար:

Այժմ դուք պետք է պատրաստ լինեք պատրաստելու ձեր սեփական պոնգ խաղը ՝ օգտագործելով VHDL:

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