Оглавление:

FPGA Asteroid Game: 7 шагов (с изображениями)
FPGA Asteroid Game: 7 шагов (с изображениями)

Видео: FPGA Asteroid Game: 7 шагов (с изображениями)

Видео: FPGA Asteroid Game: 7 шагов (с изображениями)
Видео: Asteroids game using FPGA 2024, Октября
Anonim
FPGA Asteroid Game
FPGA Asteroid Game

Для нашего финального проекта CPE 133 мы решили создать игру с астероидами на нашей ПЛИС, используя два кнопочных переключателя и 7-сегментный дисплей. Игра работает так, что астероид появляется в одном из трех случайно выбранных рядов и летит к кораблю с другой стороны 7-сегментного дисплея. Верхнюю и нижнюю кнопки можно использовать, чтобы убрать ваш корабль с пути астероида. В случае неудачи на дисплее на мгновение отображается «BAnG», а затем игра быстро перезапускается, чтобы пользователь мог повторить попытку. Далее следует краткое описание того, как был создан проект, чтобы любой пользователь мог воспроизвести или улучшить наш дизайн.

Шаг 1. Обзор

Обзор
Обзор
Обзор
Обзор

Проект в основном состоит из конечных автоматов (FSM), которые используют логику для передачи FPGA между состояниями, которые хранят и отображают различные значения положения корабля и скалы. Двумя основными модулями являются игровые конечные автоматы для скалы и корабля и конечные автоматы декодера двоичного изображения в 7-сегментный дисплей, которые объединены вместе с использованием очень простой структурной модели в VHDL.

Были созданы конечные автоматы для положения корабля, скалы и 7-сегментного декодера. Назначение FSM корабля состоит в том, чтобы корабль мог перемещаться в правильное положение, когда игрок нажимает кнопку вверх или вниз. FSM необходим, потому что он должен помнить, в какой позиции он был последним, чтобы перейти в правильную позицию.

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

FSM для 7-сегментного декодера дисплея использовался не только для отображения корабля и скалы, но и для отображения «BAnG», когда положение корабля и положение скалы совпадают.

Шаг 2: материалы

В проекте использовались следующие материалы:

  • Совет по разработке Basys3 от Digilent, Inc.
  • Дизайнерский люкс Vivado
  • sseg_dec.vhd (Этот файл был предоставлен нам на Polylearn и был написан Брайаном Мили)
  • Clk_div.vhd (Этот файл был предоставлен нам на Polylearn и был написан Брайаном Мили)
  • Три конечных автомата (FSM)

Шаг 3: создание игры

Создание игры
Создание игры
Создание игры
Создание игры
Создание игры
Создание игры
Создание игры
Создание игры

Игровой модуль был создан с использованием поведенческого моделирования для описания состояний корабля и камня для их собственных конечных автоматов. Преимущество этого состоит в том, что гораздо проще моделировать поведение схемы, описывая то, что она делает, а не выяснять все компоненты, необходимые для проектирования оборудования.

Состояния горных пород были выполнены с использованием генератора псевдослучайных чисел для первой позиции породы. Для этого мы дали генератору собственные часы, которые были чрезвычайно быстрыми по сравнению со скоростью игры. На каждом нарастающем фронте трехбитовое число увеличивается, и все его значения соответствуют одному из трех начальных состояний корабля. Таким образом, три значения соответствуют позиции 3 (верхний правый), три соответствуют позиции 7 (центр) и два соответствуют позиции 11 (нижний правый угол).

После того, как произошло случайное генерирование и астероиду было присвоено начальное состояние, он беспрерывно движется в горизонтальном направлении к кораблю.

0 ← 1 ← 2 ← 3

4 ← 5 ← 6 ← 7

11 ← 10 ← 9 ← 8

Часы, используемые для логики следующего состояния камня, контролируют скорость игры; методом проб и ошибок мы обнаружили, что 9999999 - хорошее значение для максимального числа.

Логика корабля работает путем инициализации в центральном положении (положение 4) на крайней левой стороне. Если нажата верхняя или нижняя кнопка, корабль будет перемещаться вверх и вниз в положение 0 и 11, соответствующее нажатой кнопке.

Чтобы движение корабля было приятным для пользователя, мы не сделали его движение асинхронным. Мы использовали часы для изменения его состояния, и мы использовали максимальное количество 5555555.

Шаг 4: Отображение результата

Двоичный семисегментный декодер принимает 4-битные переменные положения для корабля и астероида и отображает соответствующее изображение (либо корабль и камень, либо сообщение «BAnG»).

Для этого сначала проверяется, равны ли они, а затем отображается сообщение «BAnG», если проверка вернула истину.

Если он не вернет истину, декодер отобразит корабль и камень, переключаясь между ними на очень высокой тактовой частоте и обманывая глаз, заставляя их видеть их так, как будто они отображаются одновременно.

Шаг 5: Собираем все вместе

Собираем все вместе
Собираем все вместе

Мы объединили конечный автомат корабля и камня в один большой автомат, который мы подключили к конечному автомату дисплея. Входами в игру являются кнопка «вверх» и «вниз» на плате BASYS3 и системные часы. Выходами являются сегментный и анодный векторы семисегментного дисплея.

Эти входы и выходы будут видны в файле ограничений, где они сопоставлены с портами.

Шаг 6: Будущие модификации

В будущем добавление в проект дополнительных функций движения кораблей станет улучшением. Этого можно достичь, просто введя еще 2 кнопки и позволив кораблю принимать положения (состояния), отличные от 0, 4 и 8. Другой возможной модификацией может быть контроль времени следующего состояния астероида, чтобы он начинал медленно и увеличивал скорость на В 1,5 раза каждый раз, когда он промахивается по кораблю, пока не получит попадание, после чего перезапустится и снова станет медленным. Это увеличило бы сложность игры и сделало бы ее более интересной для пользователя, если бы она была реализована, и это можно было бы сделать, создав переменную для максимального количества часов следующего состояния камня, умножая эту переменную на 1,5 каждый раз, когда астероид не работает. 't hit, и сбрасывая его на начальное значение каждый раз, когда камень ударяется.

Шаг 7: Заключение

Этот проект помог нам лучше понять конечные автоматы, часы и интерактивное отображение на семисегментных дисплеях.

Самая большая особенность конечных автоматов - это то, что важно знать (помнить), в каком состоянии вы сейчас находитесь, чтобы перейти к следующему желаемому состоянию. Как ни странно, хороший жизненный совет; вы должны знать, где вы, чтобы знать, куда вы идете.

Управляя различными экземплярами часов, мы могли случайным образом генерировать числа, перемещать камень в следующую позицию и управлять отображением корабля, камня и сообщения об окончании игры.

Мы узнали, что нельзя отображать более одного анода одновременно. В данном нам модуле использовано то преимущество, что человеческий глаз может видеть разницу только до определенной частоты. Поэтому была выбрана более высокая частота переключения анодов. Корабль и скала, которые видны одновременно, на самом деле являются намеком, поскольку каждый отображается отдельно, но очень быстро. Эта концепция была применена для отображения движения корабля, скалы и сообщения «BAnG».

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