One Octave Polyphonic Keyboard with Recording Capability

March-June 2018

Course: Digital Electronics

Skills: VHDL, Vivado, FPGA Programming

My partner and I designed from the bottom up a polyphonic keyboard using Xylinx’s Basys3 proto-board. It has 8 keys to play different notes and has the ability to record a set of notes and play it back.


Our design uses a block ROM holding a lookup table of 65,536 elements that are the values of a sine wave, and the address from the button pressed steps through the ROM at different rates to achieve different notes. To make the keyboard polyphonic, the block ROM is made a component of the keyboard buttons file and is instantiated 8 times, one for each button. Internal signals pass data into the ROMs and the 8 ROM outputs are added together to make a single button output, which is then passed onto the digital to analog converter. In order to enable the recording and playback function of our keyboard, we used an 8x2001 register file. 


Our Initial Plan

Keyboard in Action


Button Block Diagram