date: | March 7, 2010 |
---|
During the third year at the university, students were doing their individual projects. Learning about FPGAs was on my TODO list, so I decided to propose my own project.
After some consultation with PhD students and a lecturer a topic was chosen: VGA driver and an arcade game.
The project was started with an implementation of the classic Pong game. The development of this game was pretty much a learning exercise and was deliberately kept simple.
Main features:
- Two player game
- Ball acceleration
- Score display and winner announcement
- Audio feedback
For the second part of the project, a space-shooter game was chosen. This time, the majority of effort was put to technical the side of the game. The following features were added:
- Coloured and animated graphics
- Multi-tone sound generator
- NES controller interface
- Binary-to-BCD converter
- etc.
The gameplay is quite simple. User controls the spaceship at the bottom. Aliens arrive in three rows, weakest at the front. Third level aliens can turn invisible and avoid missiles.
I wanted to have some custom built hardware that I could interface to with the FPGA. At first, I thought I will build a controller, but in the end I decided that an old NES gamepad would look much better.
Since the FPGA can handle 3.3V at most, and the gamepads need 5V, a logic level shifter was needed. For this purpose I decided to design a PCB.
The conversion from 3.3V to 5V and from 5V to 3.3V is done by 74HCT4066 and 74LCX125 respectively. NES sockets are hard to come by, so we had to buy a 2-to-4 expander and scavenge the ports from it. A reset button and piezoelectric buzzer were also added to the board, which is connected to the development board using a Hirose FX2 expansion header.
More details, including schematic and board layout can be found in the dissertation.
Dissertation: http://static/res/fpga_based_vga_driver_and_arcade_game.pdf
- Source
- Whole project: http://github.com/armandas/Arcade
- Pong: http://github.com/armandas/Plong
- Space shooter: http://github.com/armandas/FPGalaxy