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

Երկուականից տասնորդական համընկնող խաղ. 10 քայլ
Երկուականից տասնորդական համընկնող խաղ. 10 քայլ

Video: Երկուականից տասնորդական համընկնող խաղ. 10 քայլ

Video: Երկուականից տասնորդական համընկնող խաղ. 10 քայլ
Video: Cryptography with Python! XOR 2024, Նոյեմբեր
Anonim
Image
Image
Tingամացույցի բաժանարարի տեղադրում
Tingամացույցի բաժանարարի տեղադրում

Այս ուսանելի ծրագիրը ցույց կտա այն գործընթացը և մոդուլները, որոնք անհրաժեշտ են մեր Երկուականից տասնորդական համապատասխանող խաղ ստեղծելու համար: 60 վայրկյանի ընթացքում օգտվողները յոթ հատվածի ցուցադրվող պատահականորեն արտադրված տասնորդական թվեր կթարգմանեն և մուտքագրելու են երկուական ՝ անջատիչները միացնելով և ենթադրելու կոճակով ներկայացնելով: Ավարտելուց հետո վերջնական հաշիվը կցուցադրվի, այնուհետև կվերականգնվի նորից խաղալու համար:

Երկուական և արագ ռեֆլեքսների իմացությունը ձեռնտու է լավ գործելուն, բայց վերակայման կոճակը տրվում է այն դեպքում, երբ մեկը ցանկանում է ակնթարթորեն նորից փորձել:

Քայլ 1: tingամացույցի բաժանարարի տեղադրում

Այս ամբողջ նախագծի ողնաշարը գալիս է այս գիզմոյի բոլոր մասերի ճիշտ համաժամացումից: Մեր վերջնական վիճակի մեքենան օգտագործում է ներքին ժամացույցը, սակայն յոթ հատվածի ցուցադրումն ու ժամաչափը պետք է օգտագործեն ժամացույցի փոփոխված տարբերակ:

Այս «նոր ժամացույցը» գալիս է ներքին ժամացույցը ցանկալի ժամանակահատվածի բաժանելուց ՝ յուրաքանչյուր կոնկրետ բաղադրիչի համար անհրաժեշտ որոշակի հաճախականությանը հասնելու համար: Դա արվել է նախորդ լաբորատորիաներում և փորձից մենք գիտենք, որ ժամաչափի «մեկ» թվանշանը դրված է 0.1 Հց -ի վրա, իսկ «տասնյակ» թվանշանը `1 Հց

Մուտքերը ՝ ClkIn, բաժանարար (32 բիթ)

Արդյունքներ ՝ ClkOut

Քայլ 2: Ստեղծեք վերջնական վիճակի մեքենա (FSM)

Ստեղծելով վերջնական վիճակի մեքենա (FSM)
Ստեղծելով վերջնական վիճակի մեքենա (FSM)
Ստեղծելով վերջնական վիճակի մեքենա (FSM)
Ստեղծելով վերջնական վիճակի մեքենա (FSM)
Ստեղծելով վերջնական վիճակի մեքենա (FSM)
Ստեղծելով վերջնական վիճակի մեքենա (FSM)

Մեր վերջնական վիճակի մեքենայի մեջ մենք որոշեցինք, որ հինգ վիճակ (Սկիզբ, ցուցադրում, ստուգում, գնահատում և ավարտ) անհրաժեշտ կլինի հինգ մուտքագրմամբ (մեկնարկ, վերակայում, կռահում, հավասար, ընդմիջում): Մեր պետական մեքենայի միակ ելքը 3 բիթանոց թիվ է, որը ներկայացնում է, թե ինչ վիճակում է օգտվողը (000, 001, 011, 101, 100) ստորև բերված վիճակների նկատմամբ:

Հիշեք, որ վերջնական վիճակի մեքենան իրականում չի ձևավորում ստորև բերված գործառույթները, փոխարենը պարզապես պատմում է, թե ինչ վիճակում է ծրագիրը և ինչ: Այն, ինչ իրականում տեղի է ունենում, որոշվում է ստորև բացատրված վերին մոդուլով:

Մեկնարկային վիճակ (000)

Սկսնակ վիճակն այն վայրն է, որտեղից օգտվողը կսկսի, մինչև սկզբնական մուտքը բարձր լինի, սա նաև այն վիճակն է, որը կհասնի ամեն անգամ, երբ սեղմված է վերականգնման կոճակը:

Խաղի վիճակ (001)

Խաղի վիճակը խաղի սկիզբն է, որտեղ պատահական թիվը գեներացվում է, և օգտվողը միացնում է անջատիչները ՝ մուտքագրում ստեղծելու համար: Երբ կռահում է կոճակը, խաղը տեղափոխվում է Չեկի վիճակ:

Ստուգման վիճակ (011)

Այս վիճակն է, որտեղ օգտագործվում է համեմատիչը, որը համեմատելու է օգտագործողի մուտքի արժեքները և պատահականորեն առաջացած թիվը: Եթե ներկայացումը ճիշտ է, ապա հավասար արժեքը բարձր է, և FSM- ն անցնում է Հաշվի վիճակին. սակայն, եթե ներկայացումը սխալ է, FSM- ը վերադառնում է Stateուցադրման վիճակին, մինչև ներկայացման ճիշտ լինելը:

Այս ստուգման վիճակը համեմատաբար արագ է տեղի ունենում, քան մյուսները, քանի որ դա տեղի է ունենում միայն այնքան ժամանակ, քանի դեռ ստուգման կոճակը սեղմված է

Հաշվի վիճակ (101)

Քանի որ հավասար արժեքը բարձր է, ներկայացումը ճիշտ էր: Այս վիճակում միավորի արժեքը կբարձրանա մեկով և օգտագործողի մուտքի համար կստեղծվի նոր թիվ: Այս նոր համարը մեզ վերադարձնում է «Սկիզբ» վիճակ, որտեղ օգտվողը կրկին կփոխի անջատիչները:

Վերջնական վիճակ (100)

60 վայրկյանի ժամաչափը լրանալուց հետո ընդմիջման ժամանակը կլինի բարձր, և օգտվողը հասնում է Վերջնական վիճակին, որտեղ ցուցադրվում է վերջնական հաշիվը: Վերականգնման մուտքագրումը այնուհետև կսեղմվի, և FSM- ը նորից կսկսվի սկզբնական վիճակից:

Մուտքագրումներ. Clk, առաջին, սկսել, կռահել, հավասար, timeout

Ելք ՝ վիճակ (3 բիթ)

Քայլ 3. Յոթ հատվածի ցուցադրման քարտեզագրում

Յոթ հատվածի ցուցադրման քարտեզագրում
Յոթ հատվածի ցուցադրման քարտեզագրում
Յոթ հատվածի ցուցադրման քարտեզագրում
Յոթ հատվածի ցուցադրման քարտեզագրում
Յոթ հատվածի ցուցադրման քարտեզագրում
Յոթ հատվածի ցուցադրման քարտեզագրում

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

Theուցադրումը ցույց է տալիս բոլոր 0 -երը, մինչև FSM- ն մտնի խաղի վիճակ; սակայն, վերջնական վիճակում, էկրանը պետք է պարզապես ցույց տա օգտվողի հաշիվը:

Քանի որ մենք օգտագործում ենք յոթ հատվածի ցուցադրման բոլոր չորս թվանշանները, մենք պետք է յուրաքանչյուր անոդով արագ շրջենք 300 Հց արագությամբ, որպեսզի ընկալվենք ինչպես միշտ լուսավորված:

Ներածումներ ՝ Clk, յոթ հատված

Ելքներ ՝ կաթոդներ (7 բիթ), անոդներ (4 բիթ)

Քայլ 4: Համեմատողի ստեղծում

Համեմատողի ստեղծում
Համեմատողի ստեղծում

Այս ենթամոդուլն օգտագործվում է Չեկի վիճակում `այն առումով, թե ինչպես է համեմատում 7 բիթանոց երկուական մուտքագրված գուշակությունը փաստացի տասնորդական արժեքի հետ:

Մենք ունեինք if հայտարարություն, որը գնահատում էր և՛ մուտքերը, և՛ երկու ելքերը ՝ կախված նրանից, թե հավասար արժեքը բարձր էր, թե ցածր: Որքան էլ այս մոդուլը կարևոր է, այն այս նախագծում նախագծելու ամենահեշտ ծրագրերից մեկն է:

Մուտքերը ՝ անջատիչներ (8 բիթ), համար (8 բիթ)

Արդյունք ՝ EQ

Քայլ 5: tingամաչափի կարգավորում

Setամաչափի կարգավորում
Setամաչափի կարգավորում
Setամաչափի կարգավորում
Setամաչափի կարգավորում

Մեր ժամաչափը, ըստ էության, երկու տարբեր հաշվիչներ են, որոնք աճում են տարբեր տեմպերով: «Մեկի» արժեքի մեկ հաշվիչ (առաջին յոթ հատվածի ցուցադրում) և մեկ հաշվիչ «տասի» արժեքի համար (երկրորդ նիշ յոթ հատվածի ցուցադրման վրա): Յուրաքանչյուր թվանշան հիմնված է ժամացույցի աճող եզրից, և երբ հաշվիչը հասնում է 60 վայրկյանի, time_out- ը բարձր կլինի, և խաղը կավարտվի և կվերադառնա մեկնարկային վիճակին:

Մուտքերը ՝ Clk, վիճակ (3 բիթ), սկիզբ

Ելքներ ՝ ընթացիկ (8 բիթ), ժամանակի ընդմիջում

Քայլ 6. Կեղծ պատահական թվերի գեներատորի նախագծում

Կեղծ պատահական թվերի գեներատորի նախագծում
Կեղծ պատահական թվերի գեներատորի նախագծում

Այս դեպքում հատուկ թվերի գեներատորի համար այլընտրանքային մեթոդ է ունենալ 0-99-ից կրկնող հաշվիչ (երկուական), որը դուրս է բերում հաշվարկված թիվը, երբ մուտքը բարձր է, քանի որ դա կվերացնի LFSR- ի օգտագործման անհրաժեշտությունը:

Թիվը փոխում է ներքին ժամացույցի յուրաքանչյուր աճող եզր (10 նանո վայրկյան) և շրջում բոլոր 100 թվերի միջև մեկ միկրովայրկյանում: Ամեն անգամ, երբ օգտվողը ցանկանում է նոր համար համարների գեներատորից, այն թողարկում է այն թիվը, որի վրա եղել է, Թեև այս գործընթացը ամբողջովին պատահական չէ, այս գործընթացից համապատասխան արդյունքներ գտնելու հավանականությունը բավական ցածր է ՝ կեղծ պատահական լինելու համար:

Մուտքերը ՝ Clk, changenum, հավասար

Ելքներ ՝ համար (8 բիթ)

Քայլ 7: Փոխարկիչի ստեղծում

Փոխարկիչի ստեղծում
Փոխարկիչի ստեղծում

Անհրաժեշտ բաղադրիչը փոխարկիչն է, որը մենք օգտագործում էինք տասնորդական թվերը յոթ հատվածի ցուցադրման վրա ցուցադրելու համար ՝ սկզբնական տասնվեցականի փոխարեն: Չնայած երկու թվերն էլ հիմնված են 7 բիթանոց Երկուական թվի վրա, մենք ստեղծեցինք մի ամբողջ մոդուլ ՝ նշանակված տասնվեցական տասնորդական դարձնելու համար:

Օրինակ, եթե մեր վերջնական արդյունքը գնահատականի համար լիներ 0010001 (տասնյոթ), յոթ հատվածի ցուցադրումը ցույց կտար 11 -ի տասնվեցերորդ արժեքը ՝ 17 -ի տասնորդական թվի փոխարեն:

Մուտք ՝ Numin (8 բիթ)

Ելք ՝ Numout (8 բիթ)

Քայլ 8. Ամեն ինչ միասին դնել խաղի մոդուլում

Ամեն ինչ միասին դնել խաղի մոդուլում
Ամեն ինչ միասին դնել խաղի մոդուլում
Ամեն ինչ միասին դնել խաղի մոդուլում
Ամեն ինչ միասին դնել խաղի մոդուլում
Ամեն ինչ միասին դնել խաղի մոդուլում
Ամեն ինչ միասին դնել խաղի մոդուլում
Ամեն ինչ միասին դնել խաղի մոդուլում
Ամեն ինչ միասին դնել խաղի մոդուլում

Մեր բաղադրիչների համար մենք օգտագործեցինք 0-6 անհրաժեշտ անջատիչները `օգտվողը փոխարկելու համար, և երեք կոճակները գործարկեցին որպես օգտագործողի մուտքի սկիզբ, վերակայում և գուշակություն: Յոթ հատվածի ցուցադրման և ժամացույցի բաղադրիչները նաև այն բաղադրիչներն են, որոնք մենք արել ենք նախորդ լաբորատորիաներից, բայց որոնք ստիպված էինք փոխել այս նախագծին համապատասխանեցնելու համար:

Մենք այս նախագիծը բաժանեցինք վերևում ներկայացված վեց մոդուլների ՝ ամբողջ գիզմոն բաժանելու համար բազմաթիվ աշխատանքային մասերի, սակայն դրանց միացման եղանակը բավականին բարդ է և ցուցադրվում է կցված սև արկղի նկարից:

Մինչ խաղը տեղի է ունենում, 7 LED լուսավորված են ՝ օգտագործողին տեղեկացնելու համար, թե որ անջատիչներն են օգտագործում, և երբ խաղն ավարտվում է, մենք նաև ծրագրավորում ենք LED- ների բռնկումը:

Մուտքերը ՝ անջատիչներ (8 բիթ), Clk, վերականգնել, սկսել, կռահել

Ելքեր ՝ կաթոդներ (7 բիթ), անոդներ (4 բիթ), LED (7 բիթ)

Քայլ 9. Հանդիպված լրացուցիչ խնդիրներ

Թեև այս խաղում օգտագործվում է ընդամենը յոթ անջատիչ, բայց կոդը այն սահմանել է որպես 8 բիթանոց համար: Մենք դա արեցինք, որպեսզի ունենանք ավելի հարմար համեմատիչ, որը կհամեմատի այս 8 բիթերը պատահական թվերի գեներատորից մեր ստեղծած 8 բիթանոց թվին:

Հաշիվը նաև մեզ մի փոքր դժվարություն պատճառեց, քանի որ մենք սահմանեցինք այն մեկ միավոր բարձրացնել, երբ FSM- ն գտնվում էր միավորի վիճակում. այնուամենայնիվ, այն, ինչ տեղի ունեցավ, այն էր, որ հաշիվը շարունակում էր աճել, քանի դեռ պետությունը գտնվում էր, տալով մեզ անհիմն բարձր գնահատական, որի հետ մենք չէինք կարող զբաղվել: Մենք դա շտկեցինք `ավելացնելով զարկերակային ազդանշան, որը համաժամեցված էր ժամացույցի բարձրացող եզրին, ինչպես երևում է 8 -րդ քայլում գտնվող կոդից:

Ի վերջո, ժամանակաչափը շատ ժամանակ պահանջեց վրիպազերծելու համար, քանի որ այն հաշվում էր մեր յոթ հատվածի ցուցադրումը հետհաշվելիս, ուստի մենք ստիպված էինք այն 60 -ից հետհաշվարկից փոխել 0 -ից:

Քայլ 10: Աղբյուրի ֆայլեր և սահմանափակումներ

Եթե նախընտրում եք մեր աղբյուրի ֆայլերից հանել ձեր սեփականը ստեղծելու փոխարեն, ահա դրանք: Բացի այդ, սահմանափակման ֆայլը ներառված է:

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