Съдържание:

Игра на понг: 6 стъпки
Игра на понг: 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-сегментният дисплей ще се използва за записване на резултата, който е броят секунди, които потребителят е играл, без да загуби играта. Номерът ще бъде показан като десетично число.

Архитектура на веригата: Ние ще изградим нашия gizmo, използвайки един FSM, който съдържа по-малък FSM, под-FSM ще контролира трудността на играта, докато основният FSM ще контролира цялостния поток на играта. Нашето устройство също ще използва поне три часовника, един за резултата (време), един за честотата на опресняване на дисплея и един, който е свързан към изхода на DeMux, за да можем да контролираме колко бързо играта ще продължи с нарастващи трудности. Играта ще се движи много по -бързо, колкото по -дълго играете. Ще имаме контролния вход на DeMux присъстващото състояние на под-FSM, така че да можем да контролираме колко бързо ще продължи играта за колко време ще я играете. Ще използваме няколко брояча, един за опресняване на дисплея и един за броене на резултата, докато продължавате да играете. Този проект има два основни модула и масив от подмодули, които ще манипулират входните данни. Двата основни подмодула са VGA драйверът, както и логическият модул на бутона. VGA драйверът ще се състои от програмируема памет, часовник разделител и логиката, която ще манипулира изхода за цвят. Логическият модул с бутони също ще се състои от часовник и програмируема памет, както и двоичен към десетичен преобразувател за 7-сегментния дисплей със съответния часовник.

Стъпка 2: Процес на изображение

За раздела Процес на изображението на проекта ще определяме движението на топката и греблото. Програмата има портове, които включват левия, десния, горния и централния бутон, настоящото състояние, часовник, позициите X и Y на топката, левия и десния ръб на греблото и грешка. Настоящото състояние се използва за определяне на разрешаващия сигнал. Кодът преминава през множество случаи, по които топката може да се движи, и е задал условия за определяне на пътя на топката. Следващият блок на процеса определя посоката, в която се движи лопатката, въз основа на кой бутон е натиснат от потребителя. Кодът за тази част от проекта е приложен с подробни коментари, описващи какво прави всеки раздел.

Стъпка 3: Манипулатор на резултати

Манипулатор на резултати
Манипулатор на резултати

Този раздел се състои от файлове, които се отнасят до показване на резултата за секунди на 7 -сегментния дисплей на дъската Basys3. Той включва разделител на часовника, който се използва за отчитане на секундите, брояч на резултатите отчита секундите, които потребителят играе, сегментният драйвер взема резултата и го преобразува в аноди и катоди, които да се показват на екрана, а също така определя позицията, която номерът ще бъде показан и накрая, манипулаторът на сегменти преобразува двоичните цифри в десетични цифри, които да се показват на екрана. Манипулаторът на точки събира всички фигури и картографира сигналите. Кодът за всичките пет файла е приложен по -долу.

Часовник:

Часовникът има входове Clk (часовник), CEN (разрешаване на вход) и Div (разделител) и изход Clk_out. Ако сигналът за разрешаване е включен, часовникът ще разчита на нарастващия ръб.

Брояч на резултати

Броячът на резултатите има входове Clk (Часовник) и RST (Нулиране) и изходи 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, енкодер, който може да извежда правилните цветове на правилните места, и накрая мултиплекс, който показва правилния цвят въз основа на позицията на греблото и топка.

Опресняване на изображението

Файлът Refresh Image се използва за опресняване на изображението при промяна на позицията на топката и греблото. Файлът включва компонентите от файловете Animation, Start Counter и Fail Counter. Той картографира сигналите от всеки компонент и използва логика на състоянието, за да определи сигналите и изходните адреси.

Стартиране на брояча

Стартовият брояч използва входове Clk, RS и CEN и изходи WA и WD. Той използва брояч и преобразуване, за да определи контролния вход за MUX. След това мултиплексорът използва входа, за да определи правилните цветови адреси и изпраща тези данни към VGA драйвера. Това се използва за показване на „Pong“, когато потребителят стартира играта.

Брояч на неуспехи

Броячът на грешки се използва за показване на „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

Потокът FSM има входове Clk, Fail, Timer, Bttn_S (Бутон за стартиране) и Buttn_RST (Бутон за нулиране) и изход Pres_S (Изход за текущо състояние). FSM използва таймера, за да актуализира сегашното състояние до следващо състояние и продължава да актуализира следващото състояние, докато играта достигне ниво 5, където остава, докато играта приключи.

Стартирайте Debounce

Началният дебаунс е началното отскачане на топката. Той има входове S_in и Clk и изход S_out.

Pong Master Този файл използва всички предишни компоненти и го прави така, че всички компоненти да са мигновени. Това е главният файл, който събира всички предишни компоненти, които сме изградили заедно.

Стъпка 6: VGA драйвер

VGA (Visual Graphics Array) драйвер е част от софтуер, използван за приемане на команди или данни, които се изпращат на екрана на дисплея. Шофьорът ни беше даден от нашия професор. Използвайте драйвера и VGA кабела, за да свържете платката Basys3 към монитора.

Сега трябва да сте готови да направите своя собствена игра на понг, използвайки VHDL!

Препоръчано: