Мазмұны:

Понг ойыны: 6 қадам
Понг ойыны: 6 қадам

Бейне: Понг ойыны: 6 қадам

Бейне: Понг ойыны: 6 қадам
Бейне: Учись шары катать 2024, Шілде
Anonim
Понг ойыны
Понг ойыны

Материалдар:

Basys3 FPGA тақтасы

VGA кабелі

Вивадо

Бұл нұсқаулықтың мақсаты - мониторда көрсетілетін понг ойынын әзірлеу. Жоба VHDL бағдарламалауды қолданады және кодты орындау үшін Basys3 FPGA қолданады және VGA интерфейсі арқылы суретті жібереді. Бұл оқулық VHDL туралы аздап білетін адамдарға арналған. Оқу құралы 6 түрлі бөлімдерге бөлінеді: шолу, процесс, ұпай өңдеуші, кескін жасау, понг ойыны және VGA.

1 -қадам: Шолу

Шолу
Шолу

Жоғарыдағы сурет - бұл жобаның жалпы схемасы

Ойынның мақсаты:

Ойын пайдаланушы басқара алатын жылжымалы қалақшасы бар дисплейден және жоғарғы шекараның рөлін атқаратын бекітілген қабырғадан тұрады. Пайдаланушы старт түймесін басқан кезде, ол жоғарыға қарай көтеріледі, доп жоғары қарай секіре бастайды, ал қабырғаға секіреді және қалақшаға соғылады. Егер доп қалаққа тиіп кетсе, ол қайтадан серпіліп, қалақты жіберіп алғанша секіруді жалғастырады. Доп қалаққа тие алмаса ойын аяқталады. Қолданушы қалақтың қозғалысын анықтау үшін сол және оң жақ түймелерді қолдана алады. Ойынды қалпына келтіру үшін пайдаланушы орталық түймені басуы керек. Жүгіру уақыты 7 сегментті дисплейде жазылады. Бес деңгей бар және әр он секунд сайын деңгей жоғарылайды, сіз 5 деңгейге жеткенше, ол пайдаланушы жоғалғанша қалады. Деңгейлер доптың жылдамдығымен анықталады; бұл әр он секунд сайын доптың жылдамдығы артады, осылайша ойынның күрделілігін арттырады дегенді білдіреді.

Жүйелік архитектура:

Төмендегі диаграмма жүйенің жоғарғы деңгейдегі негізгі блок-схемасы болып табылады. Жүйеде төрт кіріс бар: R түймесі, L батырмасы, Бастау және Қалпына келтіру және Сағат. Оның көлденең және тік синхрондау шығысы, RBG (белгілі бір жерде пиксельдің түсін білдіреді) және Score (7 сегментті дисплейге шина ретінде қызмет ететін) бар. Жоғары түймесі бастау ретінде пайдаланылады. түймесін басыңыз, ал қалақты өз бағытында жылжыту үшін сол және оң жақ түймешіктер қолданылады. 7 сегментті дисплей ұпайларды жазуға пайдаланылады, бұл пайдаланушы ойынды жоғалтпай ойнаған секундтар саны. Нөмір ондық сан ретінде көрсетіледі.

Схема архитектурасы: Біз кішігірім FSM бар бір FSM көмегімен гизмо құрамыз, FSM қосалқы бөлігі ойынның қиындығын басқарады, ал негізгі FSM ойынның жалпы ағымын басқарады. Біздің гизмо сонымен қатар кем дегенде үш сағат бөлгішті қолданады, олардың бірі - ұпай (уақыт) үшін, екіншісі - дисплейдің жаңару жылдамдығына және екіншісі - DeMux шығысына қосылған, біз ойынның жылдамдығын бақылай аламыз. күрделілігі күрделене түседі. Сіз ойнаған сайын ойын әлдеқайда жылдам болады. Бізде DeMux қосалқы FSM қосалқы күйі болады, осылайша біз ойынның қаншалықты тез ойнайтынын бақылай аламыз. Біз бірнеше есептегішті қолданамыз, олардың бірі дисплейді жаңарту үшін, екіншісі сіз ойнауды жалғастырған кезде ұпайларды санау үшін. Бұл жобада екі негізгі модуль және кіріс деректерін басқаратын қосалқы модульдер бар. Екі негізгі қосалқы модуль - VGA драйвері, сонымен қатар түймелердің логикалық модулі. VGA драйвері бағдарламаланатын жадтан, сағат бөлгіштен және түс бойынша шығуды басқаратын логикадан тұрады. Түймешік логикалық модулі сонымен қатар сағат бөлгіштен және бағдарламаланатын жадтан, сонымен қатар 7-сегментті дисплейге сәйкес сағат бөлгішпен екілік-ондық түрлендіргіштен тұрады.

2 -қадам: кескінді өңдеу

Жобаның «Кескінді өңдеу» бөлімі үшін біз доп пен қалақтың қозғалысын анықтайтын боламыз. Бағдарламада сол, оң, жоғарғы және орталық түймелер, қазіргі күй, сағат, доптың X және Y позициялары, қалақтың сол және оң жақ жиектері мен істен шығуы бар порттар бар. Қазіргі күй сигналды анықтау үшін қолданылады. Код доптың қозғалуы мүмкін көптеген жағдайларды қамтиды және доптың жолын анықтау үшін шарттарды белгілейді. Келесі технологиялық блок пайдаланушы қай батырманы басқанына байланысты қалақтың қозғалу бағытын анықтайды. Жобаның осы бөлігінің коды әр бөлімнің не істейтінін сипаттайтын егжей -тегжейлі түсініктемелермен қоса беріледі.

3 -қадам: балл өңдегіші

Ұпайларды өңдеуші
Ұпайларды өңдеуші

Бұл бөлім Basys3 тақтасындағы 7 сегменттің дисплейінде баллды секундпен көрсетуге қатысты файлдардан тұрады. Ол секундтарды есептеуге арналған сағат бөлгішті қамтиды, есептегіш пайдаланушы ойнап жатқан секундтарды есептейді, сегмент драйвері балл алады және оны экранда көрсетілетін анодтар мен катодтарға түрлендіреді, сонымен қатар позицияны анықтайды. нөмір көрсетіледі және ақырында сегментті өңдеуші екілік сандарды экранда көрсетілетін ондық сандарға түрлендіреді. Есептегіш барлық бөлшектерді біріктіреді және сигналдарды салыстырады. Барлық бес файлдың коды төменде берілген.

Сағат бөлгіш:

Сағат бөлгішінде Clk (сағат), CEN (қосу) және Div (бөлгіш) кірістері бар және Clk_out шығысы бар. Егер қосу сигналы қосулы болса, онда сағат көтерілетін жиекке есептеледі.

Ұпай санағышы

Есептегіште Clk (Clock) және RST (Reset) кірістері бар және Clk_Out және Q шығарылады, ол негізінен баллдық шығыс ретінде әрекет етеді.

Сегмент драйвері

Сегмент драйверінде D1, D10, D100, D1000 және Clock кірістері бар. «D» санынан кейінгі сандар 7 сегменттің дисплейіндегі ондық бөлшекті білдіреді. Шығу - бұл анодтар мен цифрлар. Сағат сандарды санап, тағайындайды және оның орнын көрсетеді. Мысалы, бір жерде «9» саны мыңда, жүзде және ондаған жерде «0» санымен көрсетіледі. Ол «10» -ға ауысқанда, енді ондықта «1», ал мыңда, жүзде және бір жерде «0» болады.

Сегментті өңдеуші

Сегментті өңдеушінің кірісі ретінде цифры және шығысы ретінде катодтары бар. Бұл экрандағы ондық сандарды шығару үшін катодтық дисплейдегі екілік сандар.

Ұпайларды өңдеуші

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

4 -қадам: кескінді құру

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

Анимация

Анимация файлында Clk (Сағат сигналы), CEN (санауды қосу), RST (Сигналды қалпына келтіру), B_X (доптың X позициясы), B_Y (Доптың Y позициясы), P_L (сол жақ қалақтың орны) және P_R кірістері бар. (оң жақ қалақшаның орналасуы). Шығу - бұл WA (біз түс жазатын мекен -жай) және WD (анықталған мекен -жай бойынша жазылған түс). Файлда Play_Counter бар, ол MUX үшін басқару кірісі ретінде пайдаланылатын есептегіш, дұрыс жерлерде дұрыс түстер шығара алатын кодер және ақырында қалақтың орналасуына негізделген дұрыс түсті көрсететін мультиплексор. доп.

Кескінді жаңарту

Кескінді жаңарту файлы шар мен қалақтың орналасуы өзгерген кезде кескінді жаңарту үшін қолданылады. Файл анимация, старт есептегіші және сәтсіздік есептегіш файлдарының компоненттерін қамтиды. Ол әр компоненттен сигналдарды картадан шығарады және сигналдар мен шығыс адрестерін анықтау үшін күй логикасын қолданады.

Есептегішті іске қосыңыз

Start Counter Clk, RS және CEN кірістерін пайдаланады және WA мен WD шығарады. Ол MUX үшін басқару кірісін анықтау үшін есептегіш пен түрлендіруді қолданады. Содан кейін мультиплексор түсінің дұрыс адрестерін анықтау үшін кірісті қолданады және бұл деректерді VGA драйверіне жібереді. Бұл пайдаланушы ойынды бастаған кезде «Понгты» көрсету үшін қолданылады.

Сәтсіздік есептегіші

Сәтсіздік есептегіші пайдаланушы ойынды жоғалтқан кезде «Game Over» көрсету үшін қолданылады. Оның Clk, RST және CEN сигналы бар. Ол MUX үшін басқару кірісін анықтау үшін есептегіш пен түрлендіру формуласын қолданады. Содан кейін мультиплексор дұрыс түсті мекенжайларды анықтау үшін кірісті қолданады және бұл деректерді VGA драйверіне жібереді.

5 -қадам: Понг ойыны

Понг ойыны
Понг ойыны

Жобаның бұл бөліміне Pong Master, Finite State Machine (FSM), Timer және Start Debounce файлдары кіреді.

Таймер

Таймерде Clk (Clock) және PS (Present State) кірістері және Timer мен Clk_out шығысы бар. Таймер ойын жылдамдығын әр бес секунд сайын өзгерту үшін қолданылады.

FSM ағыны

Flow FSM -де Clk, Fail, Timer, Bttn_S (Start Button) және Buttn_RST (Reset Button) кірістері бар және Pres_S (Present State Output) шығысы бар. FSM таймерді ағымдағы күйді келесі күйге жаңарту үшін қолданады және ойын 5 деңгейге жеткенше, ойын аяқталғанға дейін қалады.

Debounce бастау

Start Debounce - доптың бастапқы серпілісі. Оның S_in және Clk кірістері, ал S_out шығысы бар.

Pong MasterБұл файл барлық алдыңғы компоненттерді қолданады және барлық компоненттер лезде болатындай етіп жасайды. Бұл біз бірге жасаған барлық алдыңғы компоненттерді біріктіретін негізгі файл.

6 -қадам: VGA драйвері

VGA (Visual Graphics Array) драйвері - бұл дисплей экранына жіберілетін командаларды немесе деректерді қабылдауға арналған бағдарламалық жасақтама. Жүргізушіні бізге профессор берді. Basys3 тақтасын мониторға қосу үшін драйвер мен VGA сымын қолданыңыз.

Сіз енді VHDL көмегімен өзіңіздің понг ойынын жасауға дайын болуыңыз керек!

Ұсынылған: