Мазмұны:

2 ойыншының бәсекеге қабілетті уақыты мен уақыты: 4 қадам
2 ойыншының бәсекеге қабілетті уақыты мен уақыты: 4 қадам

Бейне: 2 ойыншының бәсекеге қабілетті уақыты мен уақыты: 4 қадам

Бейне: 2 ойыншының бәсекеге қабілетті уақыты мен уақыты: 4 қадам
Бейне: Басқа тышты деген осы 😡 2024, Қараша
Anonim
2 ойыншының бәсекеге қабілетті VS уақыты ойыны
2 ойыншының бәсекеге қабілетті VS уақыты ойыны

Саған қажет болады:

1. Digilent Basys 3, FPGA тақтасы (немесе кез келген басқа FPGA,)

2. Vivado немесе басқа VHDL ортасының салыстырмалы түрде жаңартылған нұсқасы

3. Аталған бағдарламаны орындай алатын компьютер.

1 -қадам: Ойынның өзі

Ойынның өзі
Ойынның өзі

FSM модульдермен қалай әрекеттеседі.

Қалай ойнауға болады

Бастау үшін ортаңғы түймені басыңыз. Бұл екі ойыншының денсаулығын білдіретін «99» жеті сегментті дисплейде көрсетіледі. Содан кейін светодиодтар оңнан солға қарай біртіндеп жанады. Бұл қуат жолағын құрайды. Қуат тақтасы толғаннан кейін ол қалпына келтіріледі. Бірінші ойыншының мақсаты - жолақ мүмкіндігінше жоғары болған кезде қосқышты аудару. Светодиодтар неғұрлым көп жанса, ойыншы екінші ойыншыға соғұрлым көп зиян келтіреді. Бір ойыншы қосқышты аударғаннан кейін келтірілген залал екінші ойыншының денсаулығынан алынады. Содан кейін ол ойыншының екі кезегіне ауысады. Енді көрсетілген нөмір ойыншының денсаулығын білдіреді, ал қуат тақтасы солдан оңға қарай толтырылады. Екінші ойыншы қозғалыс жасағаннан кейін, залал есептен шығарылады және ол ойыншының кезегіне қайта оралады. Бұл бір ойыншы 0 денсаулыққа жеткенше қайталанады. Бұл функцияның бейнесі қоса беріледі.

2 -қадам: FSM

FSM
FSM
FSM
FSM
FSM
FSM
FSM
FSM

Бұл ойын - бұл FSM орналасқан күйге негізделген кейбір күрделі логика болатын үлкен ақырлы мемлекеттік машина.

1 -күй: Мәзір Бірінші күй - бұл қарапайым күйлердің бірі болып табылатын мәзір экраны. Ол «PLAY» сөзін көрсететін жеті сегментті дисплей мен ойынның басталуына себеп болатын түймені қамтиды. BTN түймесі бізді келесі күйге апарады, бұл ойыншының кезегі.

2 -күй: Бірінші ойыншыға кезек

Ойыншының кезегі жеті сегменттің дисплейінде екінші ойыншының денсаулығын көрсететін сигналды іске қосады. Біз жасаған басқа модульден (Pone.vhd) импортталған ауысым регистрін іске қосу үшін басқа сигнал қосылады. Бұл ауысым регистрі жарық диодты басқа ойындарда күшейткіштің шамасы сияқты жанып тұрады, содан кейін ол жарықтандыруға болатын максималды жарық диодына жеткенде 0 -ге қалпына келтіріледі. Ол қарызға алынған зертханалық файлдан өзгертілген barclock.vhd сайтынан алынған сағаттың жоғарылау шетін жаңартады. Бізде ойыншының жолағы оң жақтан басталады және солға дейін толтырылады, өйткені ойыншының қосқышы сол жақта (пайдаланушының интуитивті тәжірибесі үшін). Коммутатор аударылғаннан кейін күй ойыншыға бір шегерімге ауысады, ал жарық диодты активтігі сигналда сақталады.

3 -күй: Бір ойыншы шегерім Светодиодтың белсенділігі бар сигнал шегерілетін денсаулықты анықтайды. Бұл светодиоды ұлғайтудың орнына оларды кішірейтетін басқа ауысым регистрінің (deductor1.vhd) көмегімен жүзеге асады. Бұл біз қарызға алған және модификациялаған сағаттық дивидульдердің бірінің көтерілу жиегінде төмендейді (downcounterclock.vhd). Бір светодиод өшірілгенде, бір ойыншының денсаулығының бір нүктесі екі ойыншының жалпы денсаулығынан алынады. Егер осы процесте екі ойыншы 0 денсаулығына жетсе, біз тоқтап, бірден «Ойын аяқталды» күйіне өтеміз. Әйтпесе, жарық диодты векторы «0000000000000000» мәніне жеткенде, біз екінші ойыншының кезегіне қарай жүреміз.

4 -күй: Екінші ойыншының кезегі Екінші ойыншының кезегі ойыншының кезегіне ұқсас, тек оның ауысым регистрі (Ptwo.bhd) солдан оңға қарай жүреді, ал коммутатор тақтаның оң жағында. 1 -ші ойыншының денсаулығы туралы дисплей болуы үшін сигнал қосылады. 2 -ші қосқыш белсенді болған кезде, бұл екінші ойыншының шегеру кезегіне ауысады.

5 кезең: Екінші ойыншының шегерімі Екі ойыншының кезегі сияқты, екі ойыншы да бір шегерушіге ұқсайды. Негізгі айырмашылығы - жарық диодты өшіруді басқаратын ауысым регистрі қарама -қарсы бағытта жүреді, бұл ойыншының шегерімі дұрыс жұмыс істегеннен кейін оны өзгертуге оңай.

6 -кезең: Ойын аяқталды Егер кез келген уақытта ойыншылардың денсаулығы нөлге жетсе, ойын осы күйге ауысады. Сәнді ештеңе көрінбейді. Егер BTN біреуі басылса, онда денсаулық 99 -ға қалпына келтіріледі және күй мәзірге оралып, ойынды тиімді түрде бастайды.

3 -қадам: модульдер

Модульдер
Модульдер

Ойынға арналған қара жәшіктің диаграммасы

Төменгі сағат (Брайан Миалы clk_div.vhd модуліне негізделген):

Бұл дедукторлардың уақытын реттейтін сағат. Max_count деп аталатын тұрақты мән барктің max_count тұрақтысынан 3 есе артық. Бұл дедукторларды бардың жылдамдығынан 3 есе баяу етеді.

Barclock - (Bryan Mealy clk_div.vhd модуліне негізделген):

Бұл сағат қуатты өлшеуіштердің уақытын басқарады, біз оны ойынға қиындық қосу үшін тез өсірдік. Бұл уақытты сіздің қалауыңыз бойынша реттеуге болады, максималды санды үлкен санға айналдыру арқылы жылдамдықты жоғарылату немесе кіші санды жасау арқылы оны азайту. Sseg_dec - (Авторы: Брайан Мили): Бұл модуль 8 разрядты нөмірді кіріс ретінде қабылдайды, ол оны декодтайды, санды ондық эквивалентіне түрлендіреді, содан кейін жеті сегментті дисплейге шығарады. Бұл файл жұмыс істеуі үшін сіздің шектеулеріңіз біздікіне сәйкес келетініне көз жеткізу керек.

Поне:

Бұл разряд регистрі, ол биттерді солға жылжытады, оған қуат көрсеткіші ұлғайып бара жатқандай көрінуі үшін бір ыстық нүкте қосылады. Барлық биттер ыстық болған кезде, барлық биттер «0» қалпына келтіріледі және цикл қайтадан басталады.

Птво:

Бұл P1 модулінің аударылған нұсқасы.

Дедуктор1:

Бұл ауысым регистрі мен азайтқыштың тіркесімі. Ауысым регистрі шегерімді көрсете отырып, Р1 ауысым регистрінің қарама -қарсы бағытында жүреді. Бұл сондай -ақ әрбір сағаттық цикл үшін 2 -ші ойыншының денсаулығынан 1 -ді алып тастайды, сондықтан осы екі функцияның комбинациясымен қарсыластың денсаулығы төмен түсетін әрбір жолақ үшін 1 -ге төмендеген сияқты болады.

Deductor2: Бұл Deductor1 модулінің аударылған нұсқасы.

PlayDecoder (ekchen35649 -нан 133 нұсқаулық бойынша алынған және тез өзгертілген): Бұл мәзір күйінде жеті сегментті декодерде «PLAY» сөзін көрсету үшін қолданылады.

4 -қадам: Тест

Бұл ойын бастапқыда Кирбидің шағын ойындарының бірінен алынған. Бұл қарапайым екі ойыншы ойыны, оны Basys 3 тақтасында немесе кез келген FPGA ойнауға болады.

1 -қадам: Қажетті материалдар

Сізге қажет: Digilent Basys 3, FPGA тақтасы (немесе кез келген басқа) Vivado -ның салыстырмалы түрде жаңартылған нұсқасы немесе басқа vhdl ортасы Ми бағдарламасын іске қосатын компьютер

2 -қадам: Ойынның өзі

Қалай ойнауға болады

Бастау үшін ортаңғы түймені басыңыз. Бұл жеті сегментті дисплейде екінші ойыншының денсаулығын білдіретін «99» белгісін көрсетеді. Содан кейін жарық диодтары оңнан солға қарай біртіндеп жанады. Бұл қуат жолағын құрайды. Қуат тақтасы толғаннан кейін ол қалпына келтіріледі. Бірінші ойыншының мақсаты - жолақ мүмкіндігінше жоғары болған кезде қосқышты аудару. Светодиодтар неғұрлым көп жанса, ойыншы екінші ойыншыға соғұрлым көп зиян келтіреді. Бір ойыншы қосқышты аударғаннан кейін келтірілген залал екінші ойыншының денсаулығынан алынады. Содан кейін ол ойыншының екі кезегіне ауысады. Енді көрсетілген нөмір ойыншының денсаулығын білдіреді, ал қуат тақтасы солдан оңға қарай толтырылады. Екінші ойыншы қозғалыс жасағаннан кейін, залал есептен шығарылады және ол ойыншының кезегіне қайта оралады. Бұл бір ойыншы 0 денсаулығына жеткенше қайталанады. Бұл функцияның бейнесі қоса беріледі.

Ойынды ойнау үшін оны базалық тақтаға жүктеп, ортаңғы түймені басыңыз. Қосқышты мүмкіндігінше көп светодиодты қосуға тырысыңыз, содан кейін тақта сіздің қарсыластың денсаулығынан осы ұпайларды алып тастағанша күтіңіз. Содан кейін оны досыңызға беріңіз

3 -қадам: FSM

Бұл ойын - бұл FSM орналасқан күйге негізделген кейбір күрделі логика болатын үлкен ақырлы мемлекеттік машина.

(Мемлекеттік диаграмма)

1 -күй: Мәзір

Бірінші күй - бұл қарапайым күйлердің бірі болып табылатын мәзір экраны. Ол «PLAY» сөзін көрсететін жеті сегментті дисплей мен ойынның басталуына себеп болатын түймені қамтиды. BTN түймесі бізді келесі күйге апарады, бұл ойыншының кезегі.

2 -күй: Бірінші ойыншыға кезек

Ойыншының кезегі жеті сегменттің дисплейінде екінші ойыншының денсаулығын көрсететін сигналды іске қосады. Біз жасаған басқа модульден (Pone.vhd) импортталған ауысым регистрін іске қосу үшін басқа сигнал қосылады. Бұл ауысым регистрі жарық диодты басқа ойындарда күшейткіштің шамасы сияқты жанып тұрады, содан кейін ол жарықтандыруға болатын максималды жарық диодына жеткенде 0 -ге қалпына келтіріледі. Ол қарызға алынған зертханалық файлдан өзгертілген barclock.vhd сайтынан алынған сағаттың жоғарылау шетін жаңартады. Бізде ойыншының жолағы оң жақтан басталады және солға дейін толтырылады, өйткені ойыншының қосқышы сол жақта (пайдаланушының интуитивті тәжірибесі үшін). Коммутатор аударылғаннан кейін күй ойыншының бір шегеріміне ауысады, ал жарық диодты шаманың белсенділігі сигналда сақталады.

3 -күй: Бірінші ойыншы шегерім

Жарықдиодты шамның белсенділігі бар сигнал шегерілетін денсаулықты анықтайды. Бұл светодиоды ұлғайтудың орнына оларды кішірейтетін басқа ауысым регистрінің (deductor1.vhd) көмегімен жүзеге асады. Бұл біз қарызға алған және модификациялаған сағаттық дивидульдердің бірінің көтерілу жиегінде төмендейді (downcounterclock.vhd). Бір светодиод өшірілгенде, бір ойыншының денсаулығының бір нүктесі екі ойыншының жалпы денсаулығынан алынады. Егер осы процесте екі ойыншының денсаулығы 0 -ге жетсе, біз тоқтап, бірден «Ойын аяқталды» күйіне өтеміз. Әйтпесе, жарық диодты векторы «0000000000000000» мәніне жеткенде, біз екінші ойыншының кезегіне қарай жүреміз.

4 -күй: Екінші ойыншының кезегі

Екінші ойыншының кезегі ойыншының кезегіне ұқсас, тек оның ауысым регистрі (Ptwo.bhd) солдан оңға қарай жүреді, ал коммутатор тақтаның оң жағында. 1 -ші ойыншының денсаулығының дисплейі болуы үшін сигнал қосылады. 2 -ші қосқыш белсенді болғаннан кейін, бұл екінші ойыншының шегеру кезегіне ауысады.

5 кезең: Екінші ойыншы шегерім

Екінші ойыншының кезегі сияқты, екі ойыншы да бір шегерушіге ұқсайды. Негізгі айырмашылығы - жарық диодты өшіруді басқаратын ауысым регистрі қарама -қарсы бағытта жүреді, бұл ойыншының шегерімі дұрыс жұмыс істеген кезде оны өзгертуге оңай.

6 -кезең: Ойын аяқталды Егер кез келген уақытта ойыншылардың денсаулығы нөлге жетсе, ойын осы күйге ауысады. Сәнді ештеңе көрінбейді. Егер BTN біреуі басылса, онда денсаулық 99 -ға қалпына келтіріледі және күй мәзірге оралып, ойынды тиімді түрде бастайды.

Қара жәшік

4 -қадам: модульдер

Төменгі сағат (Брайан Миалы clk_div.vhd модуліне негізделген):

Бұл дедукторлардың уақытын реттейтін сағат. Max_count деп аталатын тұрақты мән барктің max_count тұрақтысынан 3 есе артық. Бұл дедукторларды бардың жылдамдығынан 3 есе баяу етеді.

Штрих -сағат - (Брайан Миалы жасаған clk_div.vhd модуліне негізделген): Бұл сағат ойынға қиындық қосу үшін жылдамдықпен енгізген қуат көрсеткіштерінің уақытын басқарады. Бұл уақытты сіздің қалауыңыз бойынша реттеуге болады, максималды санды үлкен санға айналдыру арқылы жылдамдықты жоғарылату немесе кіші санды жасау арқылы оны азайту. Sseg_dec - (Авторы: Брайан Мили): Бұл модуль 8 разрядты нөмірді кіріс ретінде қабылдайды, ол оны декодтайды, санды ондық эквивалентіне түрлендіреді, содан кейін жеті сегментті дисплейге шығарады. Бұл файл жұмыс істеуі үшін сіздің шектеулеріңіз біздікіне сәйкес келетініне көз жеткізу керек.

Поне: Бұл разряд регистрі, ол биттерді солға жылжытады, оған қуат көрсеткіші ұлғайып бара жатқандай көрінуі үшін бір ыстық бит қосады. Барлық биттер ыстық болған кезде, барлық биттер «0» қалпына келтіріледі және цикл қайтадан басталады.

Ptwo: бұл P1 модулінің аударылған нұсқасы.

Дедуктор1: Бұл ауысым регистрі мен азайтқыштың тіркесімі. Ауысым регистрі шегерімді көрсете отырып, Р1 ауысым регистрінің қарама -қарсы бағытында жүреді. Бұл сондай -ақ әр сағаттық цикл үшін 2 -ші ойыншының денсаулығынан 1 -ді алып тастайды, сондықтан осы екі функцияның комбинациясымен қарсыластың денсаулығы төмен түсетін әрбір жолақ үшін 1 -ге төмендеген сияқты болады.

Deductor2: Бұл Deductor1 модулінің аударылған нұсқасы.

PlayDecoder (ekchen35649 -дан алынған және сәл өзгертілген, оның 133 нұсқаулығы):

Бұл мәзір күйінде жеті сегментті декодердегі «PLAY» сөзін көрсету үшін қолданылады.

Орындау: суреттер, видео

Ұсынылған: