Оглавление:

Игра в понг: 6 шагов
Игра в понг: 6 шагов

Видео: Игра в понг: 6 шагов

Видео: Игра в понг: 6 шагов
Видео: 6 Базовых элементов настольного тенниса #техника 2024, Июль
Anonim
Игра в понг
Игра в понг

Материалы:

Плата Basys3 FPGA

Кабель VGA

Вивадо

Цель этого руководства - разработать игру в понг, которая будет отображаться на мониторе. В проекте будет использоваться VHDL для программирования и ПЛИС Basys3 для выполнения кода и передачи изображения с использованием интерфейса VGA. Это руководство предназначено для людей, которые имеют некоторое представление о VHDL. Учебное пособие будет разделено на 6 различных разделов: «Обзор», «Процесс», «Обработчик результатов», «Создание изображения», «Игра в понг» и «VGA».

Шаг 1. Обзор

Обзор
Обзор

Изображение выше представляет собой общую схему проекта

Цель игры:

Игра состоит из дисплея с подвижной ракеткой, которой может управлять пользователь, и неподвижной стены, которая действует как верхняя граница. Когда пользователь нажимает кнопку пуска, которая является кнопкой вверх, мяч начинает подпрыгивать вверх, отскакивает от стены и пытается ударить по веслу. Если мяч попадает в ракетку, он снова подпрыгивает и продолжает подпрыгивать, пока не попадает в ракетку. Игра заканчивается, когда мяч не попадает в ракетку. Пользователь сможет использовать левую и правую кнопки для определения движения лопасти. Чтобы перезагрузить игру, пользователь должен нажать центральную кнопку. Время пробега будет записано на 7-сегментном дисплее. Есть пять уровней, и каждые десять секунд уровень увеличивается, пока вы не достигнете уровня 5, где он остается, пока пользователь не проиграет. Уровни определяются скоростью мяча; это означает, что каждые десять секунд скорость мяча увеличивается, что увеличивает сложность игры.

Архитектура системы:

На приведенной ниже диаграмме представлена базовая общая блок-схема верхнего уровня для системы. Система имеет четыре входа: кнопка R, кнопка L, пуск и сброс, а также часы. Он имеет выходы горизонтальной и вертикальной синхронизации, RBG (который относится к цвету пикселя в определенном месте) и Score (который действует как шина для 7-сегментного дисплея). Кнопка вверх будет использоваться в качестве начала кнопку, а левая и правая кнопки будут использоваться для перемещения лопасти в соответствующих направлениях. 7-сегментный дисплей будет использоваться для записи счета, то есть количества секунд, в течение которых пользователь не проиграл игру. Число будет отображаться как десятичное число.

Архитектура схемы: мы построим нашу штуковину, используя один конечный автомат, который содержит конечный автомат меньшего размера, под-конечный автомат будет контролировать сложность игры, а основной конечный автомат будет управлять общим ходом игры. Наша штуковина также будет использовать как минимум три делителя времени: один для оценки (времени), один для частоты обновления дисплея и один, который подключен к выходу DeMux, чтобы мы могли контролировать скорость игры. будет продолжаться с возрастающей сложностью. Чем дольше вы играете, тем быстрее будет развиваться игра. У нас будет управляющий вход DeMux для текущего состояния суб-конечного автомата, чтобы мы могли контролировать, как быстро будет идти игра, в зависимости от того, как долго вы в нее играете. Мы будем использовать несколько счетчиков: один для обновления дисплея, а другой для подсчета очков по мере продолжения игры. В этом проекте есть два основных модуля и массив подмодулей, которые будут управлять входными данными. Двумя основными субмодулями являются драйвер VGA и модуль логики кнопок. Драйвер VGA будет состоять из программируемой памяти, тактового делителя и логики, которая будет управлять выводом для цвета. Модуль логики кнопок также будет состоять из делителя тактовых импульсов и программируемой памяти, а также преобразователя двоичных чисел в десятичные для 7-сегментного дисплея с соответствующим делителем тактовых импульсов.

Шаг 2: процесс изображения

В разделе проекта «Процесс изображения» мы будем определять движение мяча и ракетки. Программа имеет порты, которые включают левую, правую, верхнюю и центральную кнопки, текущее состояние, часы, позиции X и Y мяча, левый и правый край ракетки и отказ. Текущее состояние используется для определения разрешающего сигнала. Код перебирает несколько случаев, когда мяч может перемещаться, и устанавливает условия для определения пути мяча. Следующий блок процесса определяет направление движения лопасти в зависимости от того, какая кнопка нажата пользователем. Код для этой части проекта прилагается с подробными комментариями, описывающими, что делает каждый раздел.

Шаг 3: обработчик очков

Обработчик очков
Обработчик очков

Этот раздел состоит из файлов, относящихся к отображению счета в секундах на 7-сегментном дисплее на доске Basys3 Board. Он включает в себя делитель часов, который используется для подсчета секунд, счетчик очков подсчитывает секунды, в которые играет пользователь, драйвер сегмента принимает счет и преобразует его в аноды и катоды для отображения на экране, а также определяет положение, которое число будет отображаться, и, наконец, обработчик сегмента преобразует двоичные цифры в десятичные цифры, которые будут отображаться на экране. Куратор очков собирает все части и отображает сигналы. Код для всех пяти файлов прилагается ниже.

Делитель часов:

Делитель тактовой частоты имеет входы 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 используется для обновления изображения при изменении положения мяча и ракетки. Файл включает компоненты из файлов анимации, счетчика запуска и счетчика сбоев. Он отображает сигналы от каждого компонента и использует логику состояния для определения сигналов и выходных адресов.

Старт счетчика

Стартовый счетчик использует входы Clk, RS и CEN и выходы WA и WD. Он использует счетчик и преобразование для определения управляющего входа для мультиплексора. Затем мультиплексор использует вход для определения правильных цветовых адресов и отправляет эти данные драйверу VGA. Используется для отображения «Pong», когда пользователь запускает игру.

Счетчик сбоев

Счетчик неудач используется для отображения сообщения «Игра окончена», когда пользователь проигрывает игру. Он имеет сигналы Clk, RST и CEN. Он использует счетчик и формулу преобразования для определения управляющего входа для мультиплексора. Затем мультиплексор использует вход для определения правильных цветовых адресов и отправляет эти данные драйверу VGA.

Шаг 5: игра в понг

Игра в понг
Игра в понг

Этот раздел проекта включает файлы Pong Master, Finite State Machine (FSM), Timer и Start Debounce.

Таймер

Таймер имеет входы Clk (Часы) и PS (Текущее состояние), а также Таймер и Clk_out в качестве выходов. Таймер используется для изменения скорости игры примерно каждые пять секунд.

Flow FSM

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

Начать Debounce

Start Debounce - это начальный отскок мяча. Он имеет входы S_in и Clk и выход S_out.

Pong Master Этот файл использует все предыдущие компоненты и делает так, чтобы все компоненты были мгновенными. Это мастер-файл, который объединяет все предыдущие компоненты, которые мы создали вместе.

Шаг 6: драйвер VGA

Драйвер VGA (Visual Graphics Array) - это часть программного обеспечения, используемого для приема команд или данных, отправляемых на экран дисплея. Водитель нам подарил наш профессор. Используйте драйвер и шнур VGA для подключения платы Basys3 к монитору.

Теперь вы должны быть готовы создать свою собственную игру в понг с использованием VHDL!

Рекомендуемые: