top of page

Videogame Implementation on FPGA

March 2023

Abstract

The goal of this project was to design system components in VHDL to implement a video game on the Boolean Board by Real Digital. The video game implemented was the WarioWare game "Repellion." This game is a simple shooter game similar to Galaga or Space Invaders.

​

The video game was properly implemented by achieving image and character printing to a screen via HDMI. In addition, object collision and behavioral logic was implemented such that the desired game-play was achieved.

Project Requirement
  • Deliver a working demonstration for the assigned video game. Note that the video game did not have to be duplicated exactly, but the essence of the game such as game-play user experience.

Outcomes

The essence of the game was successfully implemented utilizing a variety of clock signals that drive a VGA-to-HDMI IP block to control an external screen. With basic pixel control to the screen, a bitmap (.bmp) to coefficient file (.coe) converter was used to convert the images for characters and aliens to something that could be implemented to the FPGA's ROM.

​

With the basic components of the game implemented (Static background, images, and letter characters) the gameplay was left. To implement this, a variety of drivers were developed. First, basic character control was implemented allowing the user to move the player side to side without going off-screen.

​

Then the enemy aliens were implemented by setting their location and the bounds within the screen that they could move in. Once one enemy alien was achieved, this same driver was duplicated to implement the other enemies in different locations on the screen.

​

Lastly, the missiles fired by the player had to take into consideration the location from both the player and the enemies. The player's location was needed to determine where in the screen to display the missile being fired from, and the enemies location was needed to determine if a collision had happened. This collision detection was implemented  by comparing the missile's x and y location in the screen to a bound that represents the alien for a given moment.

Challenges
  • The biggest challenge in this whole project was trying to implement a score that kept track of wins and losses in the game. Given that to print to the screen, each character must be printed individually, the score counter had to be stripped to its 100s, 10s, and 1s components to then print to the screen.

  • Given the way VHDL handles math, a simple modulo operation can't be used to extract the 100s, 10s, and 1s place of a three-digit value (As I would normally do in C). Although, measures were taken to set flags and increase counters that represented these scores I was unable to get the score working properly within the allocated time.

Software
bottom of page