FPGA Music Player

Project Date: July 18, 2016

Intro

As part of our Microprocessor Systems and Interfacing labs, we were to create a music player using a FPGA development board. My partner, Eric, and I had the opportunity to be 1 of the 2 guinea pig groups that were to complete this project on the new custom FPGA development board, meaning that the resources available to us in terms of the teaching staff were limited.

My Role

During this project, Eric and I implemented all aspects of the project together from brainstorming ideas to implementing the code. As one of us were working on the computer, the other would be actively reviewing the changes.

Goals

The goal of the project was to create a music player that retrieved it’s playlist of .wav files from a microSD card, displayed the current song, and had the typical music player features (play, pause, next, previous, and seek forward/backward). Additionally, it would output music through a standard head phone jack.

Implementation

An overview of our implementation is detailed through flowcharts below.

Flowchart of init function.

Flowchart of main function.

Problems Faced

Two major problems were faced during the duration of the project. To begin, getting audio to play took 2.5 hours (2.5 times longer then expected). This was due to the fact that both group members thought that the .wav files used big endianness, while they actually use little endianness. This meant that while the audio playing code was good, the audio wasn’t coming out correct due to the play function receiving incorrect data. The second major problem that was faced was regarding the debouncing of buttons. This was mainly an issue because two of the buttons needed to be overloaded to have two functions each based on whether it was just pressed or held. This meant that alot of the noise problems in the buttons needed to be accounted for in the software.

Conclusion

Overall, the project went really well and the group was proud of the final product. The team was also able to add an additional feature (not part of the requirements) allowing the user to see the elapsed track time and the total track time.

Credits

This project was completed with my group member Eric Tran.

Scroll to top