Skip to content

choyiny/FPGANoTatsujin

Repository files navigation

FPGA no Tatsujin

FPGA no Tatsujin - CSCB58 Summer Computer Organization Project

By: Cho Yin Yong, Austin Seto

This is a game inspired by Taiko No Tatsujin (lit. Taiko Master) and Guitar Hero, rhythm games that are very popular. We recreated a rhythm game from hardware principles.

How to play?

Load a song from the Song section below. Click KEY[3] to start the game or restart the game. 3 rows of square move from left to right. When it reaches the end of the box, hold the KEY associated with the colour of the square for the entire duration.

  • SW[0] - BLUE
  • SW[1] - YELLOW
  • SW[2] - RED

If you are unable to follow the VGA screen, or the VGA screen is not available, the LEDs above the keys will light up when you are supposed to press the button.

Song

Controlled by SW[4:0], use KEY[3] to load.

Song Name Author Configuration SW[4:0]
Through The Fire and Flames Austin Seto 11111
Take on Me Austin Seto 00011
Vlad Bit Vladimir Efimov 01010
Brian This Project Is Worth Full Marks Cho Yin Yong 10111
Rick Roll Austin Seto 00101

Scoring System

Getting a column correct will earn you +1 point, and wrong will make you lose a point. An empty column is worth 0 points.

  • HEX5/6 displays your score
  • HEX3/4 displays the highest possible score
  • HEX0/1 displays your current combo

Don't feel challenged? Try the settings below:

Speed of the song

Controlled by SW[17:16], immediately changes the speed of the song.

Speed Configuration
Slowest 11
Slower 10
Normal 01
Insane 00

Structure

In case you are the awesome few that wants to expand on this project, here is how we structured our project.

File name Description
tatsujin.v our top level module which links the FPGA board and the VGA to our modules
basic.v contains the basic components (flip flops, adders, counter)
draw.v drawing 1 4x4 square on the VGA
note_storage.v shifter to shift our 100 bit long song by 1 every clock tick
player_control.v sends an increase or decrease signal based on what player pressed
rate_divider.v a rate divider which controls the speed of the song
score_counter.v a counter to keep track of the score
seven_segment_display.v logic used to display hexadecimal to the HEX displays
song_loader.v loads a song to the respective registers
square_info.v output different x and y coordinates for drawing the 3 rows of squares.

Each note will be associated with a shifter containing n bits, where n is the maximum length for a song. Each clock cycle (controlled by a rate divider), the shifter will right shift. Is the player has the button for a note down when the right most bit is a 1, they get a point. The shifter bits lowest bits are drawn on a VGA screen in coloured boxes. A zero is a black square (or no square drawn) while a one is a coloured square.

A song is loaded by simultaneously loading every shifter bit with a binary sequence that determines when notes should be played.

Possible expansion

Here are some ideas we never got to execute that are interesting.

  • Hook the notes up to a digital speaker
  • Hook up a PS/2 keyboard, because KEY is unreliable, and changing settings through SW is not cool.
  • Make a main menu!
  • Fancy animation when they get combos.
  • Make squares smoothly run through the screen.
  • Store songs in ram, because ram is pretty cool.
  • Make it multiplayer (on the same keyboard), because multiplayer is more intersting than singleplayer.
  • Couple with a Note Map Tool to help people make songs.

Acknowledgements