Мазмуну:

2 оюнчу атаандаш VS убакыт оюну: 4 кадам
2 оюнчу атаандаш VS убакыт оюну: 4 кадам

Video: 2 оюнчу атаандаш VS убакыт оюну: 4 кадам

Video: 2 оюнчу атаандаш VS убакыт оюну: 4 кадам
Video: КАК НАСТРОИТЬ L4D2 2024, Июль
Anonim
2 оюнчу атаандаш VS убакыт оюну
2 оюнчу атаандаш VS убакыт оюну

Сага керек болот:

1. Digilent Basys 3, FPGA Board (же башка 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). Бул сменалык реестр LEDдын жарыгын башка оюндардагыдай күчөткүчтүн жарыкындай кылат, жана ал күйгүзүлө турган LEDдын максималдуу суммасына жеткенде 0гө кайтарылат. Ал алынган лабораториялык файлдан өзгөртүлгөн barclock.vhd сайтынан алынган сааттын өсүп бараткан четине жаңыртылат. Бизде оюнчунун тилкеси оңдон башталып, солго чейин толтурулган, анткени оюнчунун которгучу сол жакта (колдонуучунун интуитивдүү тажрыйбасы үчүн). Которуштурулганда, мамлекет оюнчуга бир чегерүүгө өтөт жана LEDдин активдүү суммасы сигналда сакталат.

3 -абал: Бир оюнчу Чыгуу LED активдүү суммасы бар сигнал чегерилген ден соолуктун көлөмүн аныктайт. Бул башка сменалык реестрге (deductor1.vhd) ээ болуу менен жасалат, бул LEDди көбөйтүүнүн ордуна, аларды азайтат. Бул биз карыз алган жана өзгөрткөн саат див модулдарынын биринин өсүп бараткан четине түшөт (downcounterclock.vhd). Бир светодиод өчүрүлгөндө, ден соолуктун бир чекити оюнчунун экөөнүн ден соолугунан чегерилет. Эгерде бул процесстин жүрүшүндө эки оюнчу 0 ден соолукка жетсе, биз токтоп, дароо "Оюн бүттү" абалына өтөбүз. Болбосо, LED вектору "0000000000000000" жеткенде, биз эки оюнчунун кезегине өтөбүз.

4 -абал: Экинчи оюнчунун кезеги Экинчи оюнчунун кезеги так бир оюнчунун кезегине окшош, анын сменалык реестри (Ptwo.bhd) солдон оңго кетет жана которгуч тактанын оң жагында. 1 -оюнчунун ден соолугун чагылдыруу үчүн сигнал активдешет. 2 -которуштуруу активдүү болгондон кийин, бул Экинчи оюнчунун чегерүү кезегине өтөт.

5 -этап: Экинчи оюнчу четтетүү Экинчи оюнчунун кезеги сыяктуу эле, эки оюнчу дагы бир четтетүүчүгө окшош. Негизги айырмачылык, светодиоддун өчүшүн көзөмөлдөгөн нөөмөт реестри карама -каршы багытта жүрөт, бул сизде плеердин дедукциясы туура иштегенде оңой өзгөртүү.

6 -этап: Оюн аяктады Эгерде кайсы бир учурда оюнчулардын ден соолугу нөлгө жетсе, оюн ушул абалга өтөт. Эч нерсе кооз көрүнбөйт. Эгерде BTN бир басылган болсо, анда ден соолук 99га кайтарылат жана мамлекет менюга кайтып, оюнду натыйжалуу баштайт.

3 -кадам: Модулдар

Модулдар
Модулдар

Оюн үчүн кара кутунун диаграммасы

Downcounterclock (Bryan Mealy тарабынан clk_div.vhd модулунун негизинде):

Бул дедукторлордун убактысын иштетүүчү саат. Max_count деп аталган туруктуу баркоттун max_count константасынан 3 эсе көп. Бул дедукторлорду бардын ылдамдыгынан 3 эсе жай кылат.

Barclock - (Bryan Mealy тарабынан clk_div.vhd модулунун негизинде):

Бул саат кубаттуулукту өлчөөчү убакытты башкарат, биз аны оюнга кыйынчылык кошуу үчүн тездик менен көбөйттүк. Бул убакытты каалооңузга ылайыкташтырып, ылдамдыкты жогорулатуу менен max_countту чоңураак кылып же max_countту кичирээк кылып азайтууга болот. Sseg_dec - (Брайан Миалы тарабынан жазылган): Бул модуль 8 битти киргизет, ал кодду чечет, санын ондук эквивалентине айландырат, андан кийин жети сегменттүү дисплейге чыгарат. Бул файл иштеши үчүн, сиздин чектөөлөрүңүз биздикине дал келерине ынанууңуз керек.

Поне:

Бул сменалык регистр, битти солго жылдырат жана кубаттуулук көрсөткүчү көбөйүп бараткандай көрүнүшү үчүн бир ысык битти кошот. Бардык биттер ысык болгондо, бардык биттер "0" абалга келтирилет жана цикл кайра башталат.

Ptwo:

Бул P1 модулунун которулган версиясы.

Дедуктор1:

Бул сменалык реестр менен алып салуучунун айкалышы. Сменалык реестр Р1дин нөөмөт реестрине карама -каршы багытта кетет, бул чегерүүнү көрсөтөт. Бул ошондой эле 2 -оюнчунун ден соолугунан ар бир сааттык цикл үчүн 1ди алып салат, андыктан бул эки функциянын айкалышы менен, каршылаштын ден соолугу төмөндөгөн ден соолук тилкесинин ар бир лидери үчүн 1ге азайып бараткандай көрүнөт.

Deductor2: Бул Deductor1 модулунун которулган версиясы.

PlayDecoder (карызга алынган жана ekchen35649дан 133 нускамалуу түрдө өзгөртүлгөн): Бул жети сегменттеги декодерде "PLAY" деген сөздү көрсөтүү үчүн меню абалында колдонулат.

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

Бул оюн алгач Кирбинин мини оюндарынын бири тарабынан шыктандырылган. Бул Basys 3 тактасында же каалаган FPGAда ойной турган эки оюнчудан турган жөнөкөй оюн.

1 -кадам: Керектүү материалдар

Сизге керек болот: Digilent Basys 3, FPGA Board (же башка) Вивадонун салыштырмалуу жаңыртылган версиясы же башка vhdl чөйрөсү Бул программаны иштете турган компьютер

2 -кадам: Оюн өзү

Кантип ойнойт

Баштоо үчүн, ортоңку баскычты басыңыз. Бул эки оюнчунун ден соолугун чагылдырган "99" жети сегменттүү дисплейде көрсөтүлүшүнө алып келет. Андан кийин, светодиоддор оңдон солго карай ырааттуу күйөт. Бул күч тилкесин түзөт. Кубат тилкеси толгондон кийин, ал баштапкы абалга келет. Бир оюнчунун максаты - тилке мүмкүн болушунча жогору болгондо, которуштуруу. Жарыктар канчалык көп күйсө, оюнчу экинчисине ошончолук зыян келтирет. Бир оюнчу өз которгучун которгондон кийин, келтирилген зыян экинчи оюнчунун ден соолугунан чегерилет. Андан кийин, оюнчу эки кезекке өтөт. Эми, көрсөтүлгөн номер оюнчунун ден -соолугун билдирет жана электр тилкеси солдон оңго чейин толтурулат. Экинчи оюнчу өз кадамын жасаган соң, зыян чегерилет жана кайра оюнчу кезегине кайтат. Бул бир оюнчу 0 ден соолукка жеткенге чейин кайталанат. Бул иштин видеосу тиркелет.

Оюнду ойноо үчүн, аны басс тактасына жүктөп, ортоңку баскычты басыңыз. Мүмкүн болушунча көп светодиод менен күйгүзгүчтү оодарып көрүңүз, анан күтө туруңуз жана такта атаандашыңыздын ден соолугунан бул ойлорду чыгарып салат. Андан кийин, аны досуңузга өткөрүп бериңиз жана

3 -кадам: FSM

Бул оюн негизинен FSM турган абалга негизделген кээ бир татаал логикага ээ болгон бир чоң чектүү мамлекеттик машина.

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

1 -абал: Меню

Биринчи абал меню экраны болуп саналат, ал жөнөкөй мамлекеттердин бири. Ал "PLAY" деген сөздү чагылдырган жети сегменттүү дисплейди жана оюндун башталышына себеп болгон баскычты камтыйт. Баскыч, BTN, бизди кийинки мамлекетке алып барат, бул оюнчу кезеги.

2 -абал: Биринчи оюнчу кезеги

Бир оюнчу кезеги сигналды иштетет, ал жети сегменттин дисплейинде экинчи оюнчунун ден соолугун көрсөтөт. Дагы бир сигнал биз жараткан башка модулдан импорттолгон нөөмөт реестрин иштетүү үчүн күйгүзүлөт (Pone.vhd). Бул сменалык реестр LEDдын жарыгын башка оюндардагыдай күчөткүчтүн жарыкындай кылат, жана ал күйгүзүлө турган LEDдын максималдуу суммасына жеткенде 0гө кайтарылат. Ал алынган лабораториялык файлдан өзгөртүлгөн barclock.vhd сайтынан алынган сааттын өсүп бараткан четине жаңыртылат. Бизде оюнчунун тилкеси оңдон башталып, солго чейин толтурулган, анткени оюнчунун которгучу сол жакта (колдонуучунун интуитивдүү тажрыйбасы үчүн). Которуштурулганда, мамлекет оюнчуга бир чегерүүгө өтөт жана LEDдин активдүү суммасы сигналда сакталат.

3 -абал: Бир оюнчу чыгарып салат

Светодиоддун активдүү өлчөмү менен берилген сигнал ден соолуктун чегинүүсүн аныктайт. Бул башка сменалык реестрге (deductor1.vhd) ээ болуу менен жасалат, бул LEDди көбөйтүүнүн ордуна, аларды азайтат. Бул биз алган жана өзгөрткөн саат див модулдарынын биринин өсүп бараткан четине азаят (downcounterclock.vhd). Бир светодиод өчүрүлгөндө, экинчисинин ден соолугунун бир пункту ден соолуктан чегерилет. Эгерде бул процесстин жүрүшүндө эки оюнчу 0 ден соолукка жетсе, биз токтоп, дароо "Оюн бүттү" абалына өтөбүз. Болбосо, LED вектору "0000000000000000" жеткенде, биз эки оюнчунун кезегине өтөбүз.

4 -абал: Экинчи оюнчу кезеги

Экинчи оюнчунун кезеги оюнчунун кезегине окшош, бирок анын сменалык реестри (Ptwo.bhd) солдон оңго кетет жана которгуч тактанын оң жагында. 1 -оюнчунун ден соолугун чагылдыруу үчүн сигнал активдешет. 2 -которуштуруу активдүү болгондон кийин, бул Экинчи оюнчунун чегерүү кезегине өтөт.

5 -этап: Оюнчу эки четтетүү

Экинчи оюнчу кезеги сыяктуу эле, эки оюнчу дагы бир четтетүүчүгө окшош. Негизги айырмачылык, светодиоддун өчүшүн көзөмөлдөгөн нөөмөт реестри карама -каршы багытта жүрөт, бул сиз плеердин дедукциясы туура иштегенде оңой өзгөртүү.

6 -этап: Оюн аяктады Эгерде кандайдыр бир учурда оюнчулардын ден соолугу нөлгө жетсе, оюн ушул абалга которулат. Эч нерсе кооз көрүнбөйт. Эгерде BTN бир басылган болсо, анда ден соолук 99га кайтарылат жана мамлекет менюга кайтып, оюнду натыйжалуу баштайт.

Кара куту

4 -кадам: Модулдар

Downcounterclock (Bryan Mealy тарабынан clk_div.vhd модулунун негизинде):

Бул дедукторлордун убактысын иштетүүчү саат. Max_count деп аталган туруктуу баркоттун max_count константасынан 3 эсе көп. Бул дедукторлорду тилкенин ылдамдыгынан 3 эсе жай кылат.

Barclock - (Брайан Миалинин clk_div.vhd модулуна негизделген): Бул саат оюнга кыйынчылык кошуу үчүн тездик менен көбөйткөн кубаттуулукту өлчөөчү убакытты башкарат. Бул убакытты каалооңузга ылайыкташтырып, ылдамдыкты жогорулатуу менен max_countту чоңураак кылып же max_countту кичирээк кылып азайтууга болот. Sseg_dec - (Брайан Миалы тарабынан жазылган): Бул модуль 8 битти киргизет, ал кодду чечет, санын ондук эквивалентине айландырат, андан кийин жети сегменттүү дисплейге чыгарат. Бул файл иштеши үчүн, сиздин чектөөлөрүңүз биздикине дал келерине ынанууңуз керек.

Поне: Бул сменалык регистр, битти солго жылдырат, кубаттуулук көрсөткүчү көбөйүп бараткандай көрүнүшү үчүн бир ысык битти кошот. Бардык биттер ысык болгондо, бардык биттер "0" абалга келтирилет жана цикл кайра башталат.

Ptwo: Бул P1 модулунун которулган версиясы.

Deductor1: Бул сменалык регистр менен алып салуучунун айкалышы. Сменалык реестр Р1дин нөөмөт реестрине карама -каршы багытта кетет, бул чегерүүнү көрсөтөт. Бул ошондой эле 2 -оюнчунун ден соолугунан ар бир сааттык цикл үчүн 1ди алып салат, андыктан бул эки функциянын айкалышы менен, каршылаштын ден соолугу төмөндөгөн ден соолук тилкесинин ар бир лидери үчүн 1ге азайып бараткандай көрүнөт.

Deductor2: Бул Deductor1 модулунун которулган версиясы.

PlayDecoder (ekchen35649дан карызга алынган жана бир аз өзгөртүлгөн, анын 133 инструктивдүү):

Бул жети сегменттеги декодерде "PLAY" сөзүн көрсөтүү үчүн меню абалында колдонулат.

Жасала турган иштер: сүрөттөр, видео

Сунушталууда: