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

2 խաղացողի մրցակցային VS ժամանակային խաղ. 4 քայլ
2 խաղացողի մրցակցային VS ժամանակային խաղ. 4 քայլ

Video: 2 խաղացողի մրցակցային VS ժամանակային խաղ. 4 քայլ

Video: 2 խաղացողի մրցակցային VS ժամանակային խաղ. 4 քայլ
Video: Անճոռնի ճուտիկը.Anchorni chutik@.Гадкий утенок.Հեքիաթ.Heqiat.հայերեն մուլտեր.hayeren multer.multer 2024, Նոյեմբեր
Anonim
2 խաղացողի մրցակցային VS ժամանակի խաղ
2 խաղացողի մրցակցային VS ժամանակի խաղ

Ձեզ հարկավոր կլինի.

1. Digilent Basys 3, FPGA Board (կամ որևէ այլ FPGA,)

2. Vivado- ի կամ այլ VHDL միջավայրի համեմատաբար արդիական տարբերակ

3. Համակարգիչ, որը կարող է գործարկել նշված ծրագիրը:

Քայլ 1. Խաղն ինքնին

Ինքնախաղը
Ինքնախաղը

Ինչպես է FSM- ն փոխազդում մոդուլների հետ:

Ինչպես խաղալ

Սկսելու համար սեղմեք միջին կոճակը: Սա կհանգեցնի նրան, որ «99» -ը, որը ներկայացնում է խաղացողի երկրորդ վիճակը, կցուցադրվի յոթ հատվածի էկրանին: Այնուհետեւ, LED- ները հաջորդաբար կլուսավորվեն աջից ձախ: Սա ձևավորում է հոսանքի գոտի: Էլեկտրաէներգիայի սանդղակը լցվելուց հետո այն վերակայվում է: Խաղացողի առաջին նպատակն է շրջել իրենց անջատիչը, երբ բարը հնարավորինս բարձր է: Որքան ավելի շատ լուսադիոդային լուսարձակներ են լուսավորվում, այնքան ավելի մեծ վնաս է հասցնում նվագարկիչը երկրորդին: Այն բանից հետո, երբ խաղացողներից մեկը շրջում է իր անջատիչը, պատճառված վնասը հանվում է երկրորդ խաղացողի առողջությունից: Այնուհետև այն անցնում է խաղացողի հերթին: Այժմ ցուցադրված թիվը ներկայացնում է խաղացողի առողջությունը, և հոսանքի տողը լրացվում է ձախից աջ: Երբ երկրորդ խաղացողը կատարում է իր քայլը, վնասը հանվում է, և այն կրկին վերադառնում է խաղացողի հերթին: Սա կրկնվում է այնքան ժամանակ, մինչև մեկ խաղացող կհասնի 0 առողջության: Այս աշխատանքի տեսագրությունը կցված է:

Քայլ 2: FSM

FSM
FSM
FSM
FSM
FSM
FSM
FSM
FSM

Այս խաղը, ըստ էության, մեկ մեծ սահմանափակ մեքենա է, որը տեղի է ունենում մի բարդ տրամաբանությամբ ՝ հիմնվելով այն վիճակի վրա, որում գտնվում է FSM- ը:

Պետություն 1. Մենյու Առաջին վիճակը ցանկի էկրանն է, որն ավելի պարզ վիճակներից է: Այն ներառում է յոթ հատվածի ցուցադրում, որը ցուցադրում է «PLAY» բառը և այն կոճակը, որն առաջացնում է խաղի սկիզբը: BTN կոճակը մեզ տանում է դեպի հաջորդ վիճակ, որը հերթն է խաղացողի:

Պետություն 2. Խաղացողի հերթը

Խաղացողի հերթը միացնում է ազդանշանը, որի արդյունքում յոթ հատվածի էկրանին ցուցադրվում է նվագարկչի երկրորդի առողջությունը: Մեկ այլ ազդանշան է միանում ՝ մեր ստեղծած մեկ այլ մոդուլից ներմուծված հերթափոխի գրանցամատյան ակտիվացնելու համար: Այս հերթափոխի գրանցամատյանը լուսարձակում է LED- ի լույսը, ինչպես մյուս խաղերում աճող հզորության չափիչը, և այն կվերականգնվի 0 -ի, երբ այն հասնի լուսադիոդների առավելագույն քանակին, որը հնարավոր է լուսավորել: Այն թարմացվում է barclock.vhd- ից ստացված ժամացույցի աճող եզրին, որը փոփոխված է փոխառված լաբորատոր ֆայլից: Մենք ունեինք նվագարկչի բարը սկսած աջից և լրացնելով մինչև ձախը, քանի որ խաղացողի անջատիչը նույնպես ձախ կողմում է (օգտագործողի ինտուիտիվ փորձի համար): Անջատիչը շրջվելուց հետո վիճակը անցնում է նվագարկիչի մեկ նվազեցման վրա, և LED- ի ակտիվի չափը պահվում է ազդանշանում:

Նահանգ 3. Առաջին խաղացողը նվազեցնում է LED- ի ակտիվի չափով ազդանշանը որոշում է նվազեցվող առողջության չափը: Դա արվում է մեկ այլ հերթափոխի գրանցամատյան ունենալու միջոցով (deductor1.vhd), որը ոչ թե ավելացնում է LED- ները, այլ նվազեցնում դրանք: Սա նվազում է ժամացույցի div մոդուլներից մեկի աճող եզրին, որը մենք վերցրել և փոփոխել ենք (downcounterclock.vhd): Հենց որ մեկ LED- ն անջատված է, առողջության մեկ միավորը հանվում է խաղացողի երկրորդ ընդհանուր առողջությունից: Եթե այս գործընթացի ընթացքում խաղացողի երկուսը հասնում են 0 -ի առողջության, մենք կանգ ենք առնում և անմիջապես անցնում «Խաղ ավարտված» վիճակին: Հակառակ դեպքում, երբ LED վեկտորը հասնի «000000000000000000» -ին, մենք անցնում ենք խաղացողի երկրորդ հերթին:

Պետություն 4. Երկրորդ խաղացողի հերթը Խաղացողի երկուսի հերթը նույնն է, ինչ հերթը մեկին: Ազդանշանը ակտիվանում է ՝ Player 1 -ի առողջ էկրան ունենալու համար: Երբ անջատիչ 2 -ն ակտիվ է, այն անցնում է Երկրորդ խաղացողի նվազեցման շրջադարձին:

Փուլ 5. Երկրորդ խաղացողը հանում է Ինչպես խաղացողի հերթը, այնպես էլ երկու խաղացողի պահվածքը շատ նման է մեկ խաղացողի: Հիմնական տարբերությունն այն է, որ հերթափոխի գրանցամատյանը, որը վերահսկում է LED- ի անջատումը, ընթանում է հակառակ ուղղությամբ, ինչը հեշտ փոփոխություն է, երբ խաղացողը նվազեցումը ճիշտ աշխատի:

Փուլ 6. Ոչ մի շքեղ ցուցադրում: Եթե BTN մեկը սեղմված է, ապա առողջությունը վերականգնվում է 99 -ի, և վիճակը վերադառնում է ընտրացանկ ՝ արդյունավետ խաղը սկսելով:

Քայլ 3: Մոդուլներ

Մոդուլներ
Մոդուլներ

Սև արկղի դիագրամ խաղի համար

Downcounterclock (հիմնված clk_div.vhd մոդուլի կողմից ՝ Բրայան Միլիի կողմից).

Սա այն ժամացույցն է, որը կարգավորում է նվազեցումների ժամանակը: Max_count անունով հաստատունը 3x -ով ավել է, քան ժամացույցի max_count հաստատունից: Սա նվազեցնող սարքերը 3 անգամ ավելի դանդաղ կդարձնի ձողի արագությունից:

Barclock - (հիմնված clk_div.vhd մոդուլի կողմից ՝ Բրայան Միլիի կողմից).

Այս ժամացույցը կարգավորում է էներգաչափիչների ժամանակը, որը մենք արագորեն ավելացրեցինք ՝ խաղին դժվարություն ավելացնելու համար: Այս ժամանակը կարող է ճշգրտվել ըստ ձեր ցանկության ՝ արագությունը մեծացնելով ՝ հաստատուն max_count- ը ավելի մեծ թիվ դարձնելով, կամ նվազեցնելով ՝ max_count- ը ավելի փոքր թիվ դարձնելով: Sseg_dec - (Գրված է Բրայան Միլիի կողմից). Այս մոդուլը որպես մուտքագրում վերցնում է 8 բիթանոց համար, որը վերծանում է ՝ համարը վերածելով տասնորդական համարժեքի, այնուհետև ՝ ելքեր յոթ հատվածի ցուցադրման: Որպեսզի այս ֆայլը աշխատի, դուք պետք է համոզվեք, որ ձեր սահմանափակումները համապատասխանում են մերին:

Պոնե:

Սա հերթափոխի գրանցամատյան է, որը բիթերը տեղափոխում է ձախ ՝ ավելացնելով մեկ տաք բիթ, որպեսզի այն տեսնի, որ ուժաչափը մեծանում է: Երբ բոլոր բիթերը տաք են, բոլոր բիթերը վերակայվում են «0», և ցիկլը սկսվում է նորից:

Ptwo:

Սա P1 մոդուլի շրջված տարբերակն է:

Դեդուկտոր 1:

Սա հերթափոխի գրանցամատյանի և հանողի համադրություն է: Հերթափոխի ռեգիստրը գնում է P1- ի հերթափոխի մատյանների հակառակ ուղղությամբ ՝ նշելով նվազեցում: Սա նաև խաղացողի 2 -ի առողջությունից հանում է 1 ժամացույցի յուրաքանչյուր ցիկլի համար, այնպես որ այս երկու գործառույթների համադրությամբ, թվում է, թե հակառակորդի առողջությունը 1 -ով նվազում է առողջության սանդղակի իջեցման համար:

Deductor2: Սա Deductor1 մոդուլի շրջված տարբերակն է:

PlayDecoder (փոխառված և դանդաղ փոփոխված ekchen35649- ից իր 133 -ի ուսանելի). Սա օգտագործվում է ընտրացանկի վիճակում ՝ յոթ հատվածի ապակոդավորման վրա «PLAY» բառը ցուցադրելու համար:

Քայլ 4: Փորձարկում

Այս խաղն ի սկզբանե ոգեշնչված էր Կիրբիի մինի խաղերից մեկով: Դա պարզ երկու խաղացող խաղ է, որը կարելի է խաղալ Basys 3 խաղատախտակի վրա կամ ցանկացած FPGA- ի վրա:

Քայլ 1: Պահանջվող նյութեր

Ձեզ հարկավոր կլինի ՝ Digilent Basys 3, FPGA Board (կամ որևէ այլ) Vivado- ի համեմատաբար արդիական տարբերակ կամ այլ vhdl միջավայր Համակարգիչ, որը կարող է գործարկել նշված ուղեղը A

Քայլ 2. Խաղն ինքնին

Ինչպես խաղալ

Սկսելու համար սեղմեք միջին կոճակը: Սա կհանգեցնի նրան, որ «99» -ը, որը ներկայացնում է երկրորդ խաղացողի առողջությունը, կցուցադրվի յոթ հատվածի ցուցադրման վրա: Այնուհետեւ, LED- ները հաջորդաբար կլուսավորվեն աջից ձախ: Սա ձևավորում է հոսանքի գոտի: Էլեկտրաէներգիայի սանդղակը լցվելուց հետո այն վերակայվում է: Խաղացողի առաջին նպատակն է շրջել իրենց անջատիչը, երբ բարը հնարավորինս բարձր է: Որքան ավելի շատ լուսադիոդային լուսարձակներ վառվեն, այնքան ավելի մեծ վնաս է հասցնում նվագարկիչը երկրորդին: Այն բանից հետո, երբ խաղացողներից մեկը շրջում է իր անջատիչը, պատճառված վնասը հանվում է խաղացողի երկրորդ առողջությունից: Այնուհետև այն անցնում է խաղացողի հերթին: Այժմ ցուցադրված թիվը ներկայացնում է խաղացողի առողջությունը, և հոսանքի տողը լրացվում է ձախից աջ: Երբ երկրորդ խաղացողը կատարում է իր քայլը, վնասը հանվում է, և այն կրկին վերադառնում է խաղացողի հերթին: Սա կրկնվում է այնքան ժամանակ, մինչև մեկ խաղացող կհասնի 0 առողջության: Այս աշխատանքի տեսագրությունը կցված է:

Խաղը խաղալու համար տեղադրեք այն տախտակի վրա և սեղմեք միջին կոճակը: Փորձեք շեղել անջատիչը հնարավորինս շատ LED- ով, այնուհետև սպասեք և դիտեք, թե ինչպես է տախտակը այդ միավորները հանում ձեր հակառակորդի առողջությունից: Այնուհետև փոխանցեք այն ձեր ընկերոջը և

Քայլ 3: FSM

Այս խաղը, ըստ էության, մեկ մեծ սահմանափակ մեքենա է, որը տեղի է ունենում մի բարդ տրամաբանությամբ ՝ հիմնվելով այն վիճակի վրա, որում գտնվում է FSM- ը:

(Պետական դիագրամ)

Պետություն 1. Մենյու

Առաջին վիճակը ցանկի էկրանն է, որն ավելի պարզ վիճակներից է: Այն ներառում է յոթ հատվածի ցուցադրում, որը ցուցադրում է «PLAY» բառը և այն կոճակը, որն առաջացնում է խաղի սկիզբը: BTN կոճակը մեզ տանում է դեպի հաջորդ վիճակ, որը հերթն է խաղացողի:

Պետություն 2. Խաղացողի հերթը

Խաղացողի հերթը միացնում է ազդանշանը, որի արդյունքում յոթ հատվածի էկրանին ցուցադրվում է նվագարկիչի երկրորդի առողջությունը: Մեկ այլ ազդանշան է միանում ՝ մեր ստեղծած մեկ այլ մոդուլից ներմուծված հերթափոխի գրանցամատյան ակտիվացնելու համար: Այս հերթափոխի գրանցամատյանը լուսարձակում է LED- ի լույսը, ինչպես մյուս խաղերում աճող հզորության չափիչը, և այն կվերականգնվի 0 -ի, երբ այն հասնի լուսադիոդների առավելագույն քանակին, որը հնարավոր է լուսավորել: Այն թարմացվում է barclock.vhd- ից ստացված ժամացույցի աճող եզրին, որը փոփոխված է փոխառված լաբորատոր ֆայլից: Մենք ունեինք նվագարկչի բարը սկսած աջից և լրացնելով մինչև ձախը, քանի որ խաղացողի անջատիչը նույնպես ձախ կողմում է (օգտագործողի ինտուիտիվ փորձի համար): Անջատիչը շրջվելուց հետո վիճակը անցնում է նվագարկիչի մեկ նվազեցման վրա, և LED- ի ակտիվի չափը պահվում է ազդանշանում:

Պետություն 3. Խաղացող One նվազեցում

LED- ի ակտիվի չափով ազդանշանը որոշում է առողջության չափը, որը հանվում է: Դա արվում է մեկ այլ հերթափոխի գրանցամատյան ունենալու միջոցով (deductor1.vhd), որը ոչ թե ավելացնում է LED- ները, այլ նվազեցնում դրանք: Սա նվազում է ժամացույցի div մոդուլներից մեկի աճող եզրին, որը մենք վերցրել և փոփոխել ենք (downcounterclock.vhd): Հենց որ մեկ LED- ն անջատված է, առողջության մեկ միավորը հանվում է խաղացողի երկրորդ ընդհանուր առողջությունից: Եթե այս գործընթացի ընթացքում խաղացողի երկուսը հասնում են 0 -ի առողջության, մենք կանգ ենք առնում և անմիջապես անցնում «Խաղ ավարտված» վիճակին: Հակառակ դեպքում, երբ LED վեկտորը հասնի «000000000000000000» -ին, մենք անցնում ենք խաղացողի երկրորդ հերթին:

Պետություն 4. Խաղացողի հերթը հերթն է

Երկրորդ խաղացողի հերթը նույնն է, ինչ հերթը մեկին: Ազդանշանը ակտիվանում է ՝ Player 1 -ի առողջ էկրան ունենալու համար: Երբ անջատիչ 2 -ն ակտիվ է, այն անցնում է Երկրորդ խաղացողի նվազեցման շրջադարձին:

5 -րդ փուլ. Խաղացողի երկրորդ հանում

Ինչպես խաղացողի հերթը երկուն է, այնպես էլ խաղացող երկու պահումները շատ նման են մեկ խաղացողի: Հիմնական տարբերությունն այն է, որ հերթափոխի գրանցամատյանը, որը վերահսկում է LED- ի անջատումը, ընթանում է հակառակ ուղղությամբ, ինչը հեշտ փոփոխություն է, երբ խաղացողը նվազեցումը ճիշտ աշխատի:

Փուլ 6. Ոչ մի շքեղ ցուցադրում: Եթե BTN մեկը սեղմված է, ապա առողջությունը վերականգնվում է 99 -ի, և վիճակը վերադառնում է ընտրացանկ ՝ արդյունավետ խաղը սկսելով:

Սեւ տուփ

Քայլ 4: Մոդուլներ

Downcounterclock (հիմնված clk_div.vhd մոդուլի կողմից ՝ Բրայան Միլիի կողմից).

Սա այն ժամացույցն է, որը կարգավորում է նվազեցումների ժամանակը: Max_count անունով հաստատունը 3x -ով ավելի է, քան ժամացույցի max_count հաստատունից: Սա նվազեցնող սարքերը 3 անգամ ավելի դանդաղ կդարձնի ձողի արագությունից:

Clամացույց - (հիմնված է clk_div.vhd մոդուլի կողմից ՝ Բրայան Միլիի) Այս ժամանակը կարող է ճշգրտվել ըստ ձեր ցանկության ՝ արագությունը մեծացնելով ՝ հաստատուն max_count- ը ավելի մեծ թիվ դարձնելով, կամ նվազեցնելով ՝ max_count- ը ավելի փոքր թիվ դարձնելով: Sseg_dec - (Գրված է Բրայան Միլիի կողմից). Այս մոդուլը որպես մուտքագրում վերցնում է 8 բիթանոց համար, որը վերծանում է ՝ համարը վերածելով տասնորդական համարժեքի, այնուհետև ելքը յոթ հատվածի ցուցադրման: Որպեսզի այս ֆայլը աշխատի, դուք պետք է համոզվեք, որ ձեր սահմանափակումները համապատասխանում են մերին:

Պոնե. Սա հերթափոխի գրանցամատյան է, որը բիթերը տեղափոխում է ձախ ՝ ավելացնելով մեկ տաք բիթ, որպեսզի այն տեսք ունենա, որ ուժաչափը մեծանում է: Երբ բոլոր բիթերը տաք են, բոլոր բիթերը վերակայվում են «0», և ցիկլը սկսվում է նորից:

Ptwo: Սա P1 մոդուլի շրջված տարբերակն է:

Դեդուկտոր 1. Սա հերթափոխի գրանցիչի և հանողի համակցություն է: Հերթափոխի ռեգիստրը գնում է P1- ի հերթափոխի մատյանների հակառակ ուղղությամբ ՝ նշելով նվազեցում: Սա նաև խաղացողի 2 -ի առողջությունից հանում է 1 ժամացույցի յուրաքանչյուր ցիկլի համար, այնպես որ այս երկու գործառույթների համադրությամբ, թվում է, թե հակառակորդի առողջությունը 1 -ով նվազում է առողջության սանդղակի իջեցման համար:

Deductor2: Սա Deductor1 մոդուլի շրջված տարբերակն է:

PlayDecoder (փոխառված և փոքր -ինչ փոփոխված ekchen35649- ից իր 133 հրահանգիչ).

Սա օգտագործվում է ընտրացանկի վիճակում ՝ յոթ հատվածի ապակոդավորման վրա «PLAY» բառը ցուցադրելու համար:

Անելիք. Նկարներ, տեսանյութեր

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