Pipeline Controls – Part 4 of Merging MIDI Streams – FPGA Project & Open Lab

It is extremely important that we finish this FGPA project this month, so we can launch the Fipsy Kickstarter before winter.

This session we will try to work at the actual ‘merger’ area, where we will try and turn multiple messages coming in at once, into a hold then deliver pipeline to transmission.

This is the section we will be focusing on, in more detail:

Previsously we looked at buffering 3 byte messages, as shown in the following Databuffer:

Source: http://michd.me/blog/fpga-midi-synth-update-midi-improvements-polyphony-pwm-etc/

This project adds an example use case for the Fipsy FPGA our community is developing for Kickstarter. We are looking to document our process, so others can reproduce our project, and learn FGPAs.

“MIDI (Musical Instrument Digital Interface) is a protocol developed in the 1980’s which allows electronic instruments and other digital musical tools to communicate with each other.  MIDI itself does not make sound, it is just a series of messages like “note on,” “note off,” “note/pitch,” “pitchbend,” and many more.  These messages are interpreted by a MIDI instrument to produce sound. “

– Source:


At this meeting we will:

• Review the DIY Game Glove, which is now a completed project and was a big success at Escape Velocity!

• Revisit the code for the Turn Table project

• Begin planning for the FPGA MIDI Merger project. Our goal is to establish a block diagram of the FPGA ‘modules’  – or main functionalities – needed to implement the merger.

For those who are interested, the following background material, and side projects will be useful to us:

An introduction to MIDI:


• From this we take away that MIDI uses serial communication. We care about UART lines for TX and RX in particular. 


• Notice the FPGA block diagram this project used. We can base our block diagram off of this one. 


• The table on this page shows the nuts and bolts of the Signal and Data bytes we are focusing on. We will not do a full MIDI specification, just the basics of playing notes, shown in the table.


• This is an Arduino MIDI interface, from which we can draw many inspirations

• We learn that we need to interface with 3 MIDI cable pins, one for data, one for a common ground, and one to send junk data back to the sender.

• Depending on how things turn out, we may want to implement MIDI on an Arduino for testing purposes. The project also shows who to couple MIDI inputs from Ardunio’s serial messaging (via the USB) to a Windows computer, in a useful way.