Բովանդակություն:
Video: Գլխավոր խաղ VHDL- ում ՝ 3 քայլ
2024 Հեղինակ: John Day | [email protected]. Վերջին փոփոխված: 2024-01-30 09:50
Մեր նախագծի համար մենք ստեղծեցինք «Mastermind» խաղը VHDL- ով `խաղալու Basys3- ի տախտակին: Mastermind- ը ծածկագիր կոտրող խաղ է, որն ավանդաբար խաղում են կեռներով և խաղատախտակով: Մեկ խաղացողը 4 -րդ շարքում տեղադրում է գույների տեսականի, որոնք թաքնված են երկրորդ խաղացողից: Երկրորդ խաղացողն ունի «x» թվով գուշակություններ, որոնք տեղադրում են մեխերը տախտակին անընդմեջ ՝ տեսանելի խաղացողի համար: Յուրաքանչյուր գուշակությունից հետո խաղացող 2 -ը տեղեկանում է 2 թվերի մասին. Քանի մեխից է ճիշտ գույնը, և քանի մեխ է շարքում ճիշտ դիրքում: Օգտագործելով այդ հուշումները, խաղացողը երկուսը պետք է կռահի, թե որ քորոցների ճիշտ հաջորդականությունն է այն խաղացողը, որը տեղադրեց համարի հատկացված գուշակության մեջ:
Մեր իրականացման ընթացքում խաղը միայնակ խաղացող է: Byրագիրը ստեղծում է մեխերի պատահական համադրություն, և խաղացողը պետք է օգտագործի Basys3 տախտակը `գուշակելու ճիշտ հաջորդականությունը: Կան չորս «գույներ», որոնք ներկայացված են երկուական արժեքներով: 7 հատվածից բաղկացած էկրանը ցույց է տալիս երեք արժեք ՝ մնացած շրջադարձեր, ճիշտ դիրքում կապում համարներ և սխալ դիրքում ճիշտ գույն ունեցող կապում (այս արժեքները սկսվում են 9, 0 և 0): Խաղացողը օգտագործում է գրատախտակի անջատիչները `իր գուշակության համար երկուական արժեքներն ընտրելու համար, և շրջում է մեկ այլ անջատիչ` գուշակությունը ներկայացնելու համար: Եթե դրանք ճիշտ են, խաղն ավարտվում է, և 7 հատվածից բաղկացած էկրանին ցուցադրվում է «GG»: Եթե ոչ, շրջադարձի հաշվիչը նվազում է 1 -ով, և խաղացողը ստանում է հետադարձ կապ ՝ հիմնվելով այն բանի վրա, թե քանի քորոց է իրենց ենթադրությանը համընկնում համադրության քորոցների գույնի կամ դիրքի հետ: Եթե խաղացողը առանց ճիշտ կռահելու շրջադարձերի վերջանում է, էկրանին ցուցադրվում է «GO» (ցույց է տալիս խաղը ավարտվածը): Նվագարկիչը կարող է նաև շրջել վերակայման անջատիչը ՝ ցանկացած պահի նորից սկսելու համար:
Քայլ 1: Նյութեր
Քանի որ ամբողջ խաղը կարելի է խաղալ հենց տախտակի վրա, անհրաժեշտ են միայն Basys3 տախտակը, տախտակին միանալու համար միկրո USB մալուխ և համակարգիչ/նոութբուք, որը կարող եք օգտագործել ծածկագրելու համար:
Քայլ 2: Կոդ
Որպեսզի այս խաղը աշխատի FPGA- ի վրա, գրելու ամենապարզ ճանապարհը կլինի պետական մեքենա ստեղծել: Պետական մեքենա ունենալը թույլ է տալիս խաղի իրական աշխատանքի համար անհրաժեշտ հաջորդական և ինտերակտիվ փորձ: Որպեսզի ամեն ինչ սահուն աշխատի, պետական մեքենան հիմնված կլինի FPGA- ի ներքին ժամացույցի ազդանշանի վրա `ապահովելով, որ ամեն ինչ համաժամեցված է: Հիմնական մոդուլը չորս մեքենա ունեցող պետական մեքենա է. Նախնական վիճակ (սկզբնական), SubmitAnswer պետություն (SubAns), Display State (Dis) և CheckEndGame State (CheckEnd): Պետական մեքենայի հետ միասին, հիմնական մոդուլն ունի երկու ենթամոդուլ ՝ 4-նիշ Seven Segment Display (որն ունի իր սեփական ClkDivider ենթամոդուլը) և Պատահական թվերի գեներատոր (իրականում psuedo- պատահական թվերի գեներատոր): Կա նաև հիմնական գործընթացի բլոկ, որի միջոցով յուրաքանչյուր անջատիչից LED- ները միացված են, երբ միացված են, որպեսզի մարդիկ տեսնեն, թե ինչն են ավելի հեշտ մուտքագրում: Կոդի հիմնական ակնարկը կարելի է տեսնել պատկերված մտքի քարտեզում:
Առաջին բաղադրիչը, որին պետք է ուշադրություն դարձնել, Պատահական թվերի գեներատոր է (պատահականություն): Քանի որ տեխնիկապես անհնար է ստանալ ապարատից ստացված իրական պատահական թվեր, ամենապարզ լուծումն այն էր, որ պատահականությունը իրականում լիներ Գծային հետադարձ կապի հերթափոխի գրանցամատյան (LFSR): LFSR- ն ունի clk մուտքագրում և ելք «a» (12-բիթանոց համար): Clockամացույցի յուրաքանչյուր ցիկլ, ստեղծվում է նոր 12-բիթանոց համար `սկսած« 000000000001 »-ից, որն ի վերջո անցնում է 1-ի և 0-ի 12-բիթանոց բոլոր կոմբինացիաներով ՝ նախքան կրկնվելը: «A» ելքը տրվում է ժամացույցի յուրաքանչյուր ցիկլի, այնպես որ այն անընդհատ աշխատում է ամբողջ ընթացքում: Clk- ը հիմնական մոդուլից քարտեզագրվում է Clk- ին, իսկ «a» - ն ՝ հիմնական մոդուլում RandNum ազդանշանին:
Երկրորդ ենթամոդուլը 4-նիշ Seven Segment Display- ն է: Սա բավականին պարզ միջոց է յոթ հատվածից ցուցադրվող 4 նիշանոց ցուցադրման համար: Displayուցադրումը հիմնական մոդուլից տեղադրված է Clk- ի վրա, սակայն այս ենթամոդուլն ունի ClkDivider- ի սեփական ենթամոդուլը: ClkDivider- ը (սահմանել է 1298 Հց) օգտագործվում է Յոթ հատվածի ժամացույցը արագացնելու համար, որպեսզի բոլոր թվանշանները միաժամանակ միացված լինեն (քանի որ իրականում միայն մեկ թվանշան կարող է միաժամանակ միացված լինել): «Թվային» փոփոխականն օգտագործվում է ցուցադրման կետերում պտտվելու համար, և յուրաքանչյուր թվանշանի հետ գալիս են հիմնական 4-բիթանոց մուտքի էկրանի պայմանները ՝ 0-ից 9 թվանշանները ցուցադրելու ընտրանքներով, ինչպես նաև ոչինչ: Theուցադրման ամենահեռավոր ձախ թվանշանը ոչինչ է սահմանվում, քանի որ այն չի օգտագործվում այս խաղում:
Հիմնական մոդուլը բաղկացած է պետական մեքենայից: Ընթացքի մեջ գտնվող չորս նահանգներն են ՝ Initial, SubAns, Dis և CheckEnd: Երբ գտնվում եք սկզբնական վիճակում, եթե SubmitBtn- ը (անջատիչը, որն օգտագործվում է ստուգման համար ձեր պատասխանը ներկայացնելու համար) սահմանել է «1», ապա մեքենան տեղափոխվում է SubAns պետություն: Ytանկացած Rbtn (անջատիչը, որն օգտագործվում է մեքենան վերակայելու համար) սահմանվում է «1», այնուհետև մեքենան վերադառնում է Նախնական վիճակին: Երբ SubAns պետությունում է, երբ SubmitBtn = ‘0’ կրկին, այն անցնում է Dis State- ին: Երբ գտնվում եք Dis State- ում, եթե Countdown = 0 (Կռահելու համար ձախ շրջադարձները ընկնում են 0 -ի) կամ եթե RSpotCount = 4 (նկատի ունի նվագարկիչը, ինչպես բոլոր ճիշտ գույները ճիշտ կետերում), մեքենան գնում է CheckEnd վիճակ: Եթե դրանցից ոչ մեկը չպատահի, ապա երբ SubmitBtn = ‘1’ կրկին, այն վերադառնում է SubAns վիճակին ՝ այլ գուշակություն թույլ տալու համար: Երբ CheckEnd State- ում եք, սա խաղի ավարտն է, և միակ ելքը `վերականգնելը հարվածելն է` այն վերադարձնելով Նախնական վիճակին: Սա հեշտությամբ կարելի է դիտել պետական մեքենայի դիագրամում: Վարքագծային սկզբնական վիճակը ամեն ինչ սկզբնական դիրքի է վերադառնում: Հետհաշվարկը (ազդանշանը, որը խնայում է խաղացողի ձախ շրջադարձը) սահմանվում է 9, RSpotCount (ազդանշան, որը պահպանում է այն գույների քանակը, որոնք դուք կռահել եք, որ ճիշտ տեղում են) `0, RColorCount (ազդանշան, որը խնայում է քանիսը Ձեր ենթադրած գույները ճիշտ են, բայց սխալ տեղում) սահմանվում է 0, իսկ փոքր հաշվարկը (ազդանշանը, որն ի վերջո քարտեզագրվում է Հետհաշվարկի մեջ, որն իրականում փոխում է յուրաքանչյուր շրջադարձ ավելի ուշ վիճակներում) սահմանվում է 9. Բացի այդ, Նախնական վիճակում RandNum (psuedo-random generated number) բաժանվում է չորս տարբեր ստուգումների (մեկը յուրաքանչյուր 3-բիթ գույնի համար) և պահվում է ազդանշաններում check1, check2, check3, check4: Այս ստուգումներն իրականում համեմատվում են ձեր ենթադրությունների հետ, չնայած LFSR- ն միշտ ստիպում է RandNum- ին փոխել ամեն ցիկլ, Նախնական վիճակից դուրս գալուց հետո ստուգումները մնում են անփոփոխ ՝ թույլ տալով պահպանված արժեքին համեմատել ձեր պատասխանը: Սա նաև նշանակում է, որ ցանկացած պահի, երբ մեքենան վերակայվի, խաղացողը կռահելու նոր արժեք ունի:
SubmitAnswer State- ը (SubAns) փոխում է հետհաշվարկի միացման հնարավորությունը (ազդանշանի «փոփոխություն») դեպի «1»: Սա անհրաժեշտ է ավելի ուշ, որպեսզի շրջադարձի հետևումն աշխատի: Դրանից հետո պետությունը համեմատում է նվագարկիչի մուտքերը անջատիչներից վերը նշված վիճակում կատարված չեկերի հետ: Ազդանշանը rs1, rs2, rs3, rs4 և ազդանշանները rc1, rc2, rc3, rc4 ամբողջ թվեր են, որոնք կախված են եթե հայտարարությունները դրված են կամ 1 կամ 0. Ազդանշանի rs- ը ճիշտ տեղում է, իսկ rc- ն `ճիշտ գույնի համար: Օրինակ, եթե 1 գույնի խաղացողի կռահումը հավասար է RandNum- ի check1- ին, ապա rs1 = 1, քանի որ դա նշանակում է, որ ճիշտ գույնը ճիշտ տեղում է: Եթե 1 գույնը հավասար չէ check1- ի, բայց հավասար է մյուս ստուգումներից մեկին, ապա rc = 1. Սա արվում է յուրաքանչյուր գույնի և յուրաքանչյուր չեկի համար:
Stateուցադրման վիճակն (Dis) առաջին հերթին փնտրում է հետհաշվարկի միացման հնարավորությունը: Եթե այն «1» է, ապա փոքր հաշվարկը իջնում է 1 -ով (այսինքն, առաջին շրջադարձի դեպքում այն 9 -ից հասնում է 8 -ի և այլն): Հակառակ դեպքում հերթը չի փոխվում: Անկախ այն հնարավորությունից, rs- ի բոլոր վերը նշված արժեքները գումարվում են և նշանակվում RSpotCounter ազդանշանին: Նաև բոլոր rc արժեքները ավելացվում և նշանակվում են RColorCounter- ին: Վերջապես Countdown- ին տրվում է smallcountdown- ի արժեքը: RSpotCounter, RColorCounter և Countdown ազդանշանները բոլորը փոխակերպվում են գործընթացից դուրս 4-բիթանոց std_logic_vectors և նավահանգստի քարտեզի միջոցով մղվում դեպի Seven Segment ցուցադրման ենթամոդուլ: Այս կերպ, ցուցադրումը ցույց է տալիս ճիշտ իրերը, մինչև նոր պատասխան չներկայացնեք:
CheckEnd State- ը վերաբերում է հաղթած կամ պարտված լինելու հանգամանքին: Եթե հաղթել եք (բոլոր 4 գույներն էլ ճիշտ տեղում են, այլապես հայտնի է որպես RSpotCounter = 4), ապա «GG» (տեխնիկապես ցուցադրված է 66) ցուցադրվում է Յոթ հատվածում ՝ ցույց տալու համար, որ դուք հաղթել եք: Եթե պարտվել եք (հետհաշվարկը հասել է 0 -ի), ապա «GO» (տեխնիկապես ցուցադրվում է որպես 60) ցուցադրվում է Game Over- ի էկրանին: Outcomeանկացած ելքի դեպքում վերակայման անջատիչին միացնելը մեքենան կվերադառնա Նախնական վիճակի ՝ նորից խաղալու համար:
Աղբյուրի կոդը կարելի է գտնել այստեղ:
Քայլ 3: Եզրակացություն
Այս նախագծի ավարտը մեզ շատ բան սովորեցրեց ավելի բարդ սխեմաներ կառուցելու մասին: Մեր սկզբնական նախագիծը վերջնական վիճակի մեքենա չէր: Մենք դժվարացանք կարգաբերել և ծածկագիրը մի քանի անգամ վերաշարադրել տարբեր մեթոդների միջոցով (ներառյալ FSM): Ուսուցչի առաջարկով մենք մնացինք FSM մոտեցման վրա և կարողացանք ավարտել խաղը: Մենք իմացանք, որ շատ ավելի արդյունավետ է ծածկագիրը սարքավորումների հիման վրա նախագծելը, քան ծրագրավորման ավանդական մոտեցումը: Մենք նաև բախվեցինք մի քանի մարտահրավերների ՝ կապված յոթ հատվածի ցուցադրման հետ: Դժվար էր այն ստանալ բազմաթիվ թվեր առանց «ուրվականների» ցուցադրման, և դա անելու համար մենք ստիպված եղանք օգտագործել ժամացույցի բաժանարար: Եթե մենք հետագայում զարգացնեինք այս նախագիծը, մենք գունավոր լուսադիոդներ կմիացնեինք Basys3- ին, որպեսզի օգտագործողը կարողանար տեսնել գույներ (ինչպես ավանդական խաղում), այլ ոչ թե գույների թվային ներկայացում: Ի վերջո, մենք ավելի մեծ պատկերացում կազմեցինք սխեմաների բարդ նախագծման, իրական կյանքի ծրագրերի և սարքավորումների օգտագործման մարտահրավերների մասին, քան կատարյալ պայմաններով սիմուլյացիաների գործարկման:
Խորհուրդ ենք տալիս:
Էլեկտրոնային խաղ 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- ի կատարելագործված տարբերակն է: Դա է
Գլխավոր ՝ 8x8 RGB LED մատրիցով ՝ 5 քայլ (նկարներով)
Mastermind With 8x8 RGB LED մատրիցով. Պահանջվող մասեր. Basys3 FPGA 8x8 RGB LED մատրից GEEETECH9V մարտկոցով 2N3904 տրանզիստորներ (x32) 1K դիմադրություն (x32) 100 Օմ դիմադրություն (x1) 50 Օմ դիմադրություն (x1) LED մատրիցը սովորական անոդային մատրից է 32 ընդհանուր կապում: Ընդհանուր անոդը նշանակում է, որ յուրաքանչյուր տող
ԻՆՉՊԵՍ ԳԼԽԱՎՈՐ ՀԵՌԱԽՈՍ սարքել .: 7 քայլ
ԻՆՉՊԵՍ ԳԼԽԱՎՈՐ ՀԵՌԱԽՈՍ սարքել. Իմ անունը արքայազն Ձուկի է: Ես Տակորադիի տեխնիկական ինստիտուտի տղա եմ, Տակորադի, Գանա: Սիրում եմ ինքնուրույն նախագծեր կատարել: Ես ինքս ականջակալներ եմ պատրաստել: Ահա քայլերը
Գլխավոր վեբ խցիկի դիտիչ ՝ 7 քայլ
Գլխավոր վեբ խցիկի դիտիչ. Վերջերս գրառումը դիտեց առևտրային համակարգը, որը թույլ կտա օգտվողներին ուղղակիորեն նայել իրենց վեբ տեսախցիկին, մինչդեռ դեռ կարող են տեսնել այն մարդուն, ում հետ նրանք խոսում են - Teleprompter style - Սա իմ գաղափարն է այդ գաղափարի վերաբերյալ: Հեշտ է կառուցել էականը