8-Step FPGA Sequencer and Synthesizer

Music is one of the more delightful aspects of being human. Listening to it provides such a thrill, but creating it — that takes real work. But what if there were a way to simplify that? Of course there is! This Instructable posted by rinkintran tells how to make an 8-step synthesizer on an FPGA board.

A sequencer plays sounds based on the pertinent board’s switch positions. This tutorial uses the Digilent Nexys 2 board, which has eight switches. (However, the code can easily be modified for other boards.) This project also utilizes a speaker (preferably a monotone one, for simplicity’s sake) and a computer so that you can upload programming onto the FPGA.
The Nexys 2 connected to the speaker.
The Nexys 2 connected to the speaker.

This project’s creators used Tone Matrix, an online step sequencer, as a basis for their game. Before you get started, you should play a full scale and have a good grasp of Tone Matrix. This particular game sticks to inputs on the board, but you could add more notes with external buttons or LEDs pretty easily. To begin, you’ll have to configure the Nexys 2’s inputs and outputs. Using the buttons, you’ll connect a specific tone to each switch. Next, it’s necessary to create the components — including a finite state machine, a clock divider, debouncer, a pulse generator, and more. Once you’ve created them, you’ll have to connect them to each other. After creating a user constraints file (UCF), you’ll connect the physical components. Then it’s time to play the game!

Ready for programming!
Ready for programming!

What are you waiting for? Start making music (or very pleasant tonal combinations)!


Be the 1st to vote.

About Amber Mear

I was the Digilent blog editor, and now I'm a contributor. I love learning about wearables and writing about social issues in STEM. Outside of work, I can be found watching Netflix with my cat, working on an art project, or trying to find new, delicious local foods.

View all posts by Amber Mear →

Leave a Reply

Your email address will not be published. Required fields are marked *