FPGA-Based Arcade Emulation Danny Funk, Cory Mohling, Tony Milosch, David Gartner, John Alexander Advisor: Philip Jones Client: Joseph Zambreno
Project Goal Goal o Showcase the capabilities of reconfigurable computing platforms
System Decomposition Breakdown o FPGA CPU PPU Video output Controller I/O Boot loader Audio o Cabinet Physical Controls o Joystick o Buttons Monitor
System Design Controls o Electrical connections to physical controls o Write HDL Module to interface to FPGA Pin out on FPGA board
System Design Boot loader o Develop Boot loader using Microblaze Processor provided in Xilinx tools o Present user with easy to use game selection screen o Write code to read NES Rom files from Compact Flash o Parse NES Rom file and load contents into appropriate system memory for the FPGA o Reset back to Boot loader screen when reset is pressed
System Design FPGA (Xilinx) Compact Flash Controller I/O InterfaceTFT Controller (VGA Output) Microblaze CPU NES CPUPPU CPU Frame Buffer Bootloader C Program Compact Flash Card NES Controller VGA Cable
System Design Cabinet o Use Solid Works to design detailed cabinet drawings o Purchase custom marquees o Build out of ¾” plywood
System Design Audio o Write audio module that generates audio o Connect audio module to CPU o Map all audio related instructions to the module o Connect audio module to AC97 to produce sound output
System Design PPU o Map CPU memory to PPU registers to allow for game scrolling o Implement Memory mappers to allow for more games to be played o PPU is implemented using at 14 stage finite state machine to render each pixel o Each pixel is stored in a buffer that is then sent to the VGA output
Test Plan Test as we go o After each step, make sure that the game plays as expected Simulate o Simulate incremental builds with ModelSim to ensure system works as expected Final Test o Ensure all functional requirements are met, and debug as necessary.
Current Status Side Scrolling – 80% Control Input – 80% Boot Loader – 25% Cabinet Design – 95% Cabinet Construction – 0% Audio – 0%