MIDI Controlled Sample-Based Synthesizer

Amir Hirsch and Andrew Leiserson


Overview  |  Communication  |  Master Control Unit  |  Sound Generation Unit  |  Mixer

Similar protocols are used for the 8-bit control and audio buses. The control bus has a more diverse set of messages, while the audio bus is only used to send samples from the SGU to the mixer once per sample period. An illustration of the bus protocol is shown below.



Data is driven on the control bus by the master control unit. The bus is not always in use, and the times when the bus data is valid are indicated by the data_valid signal accompanying the bus. The signals are intended to be latched into the receiving module on the rising edge of the clock. Control bus transactions consist of two parts. The first byte is an address/length byte indicating the recipient of the message and the number of bytes in the body of the message. The remainder of the message is a variable number of data byte containing the message data. The defined addresses are 1 for the SGU and 2 for the display controller.

The defined messages are shown below:

Destination
SGU
SGU
SGU
SGU
SGU
SGU
Display
Display
Length
10
1
1
2
2
1
3
3
Content
{ 01h = NOTE ON, 3 bytes mem address, 3 bytes interval, 3 bytes length }
{ 02h = NOTE OFF }
{ 0Fh = DUMP AUDIO }
{ 03h = FILTER CUTOFF, Cutoff Value }
{ 04h = FILTER RESONANCE, Resonance Value }
{ 05h = START PROCESSING }
{ FEh = SHOW MESSAGE, 2 bytes message ID }
{ Exh = WRITE CHARACTER, 1 byte character for address x }


Note that the messages include a message identifier in the body of the message to distinguish different events that may be transmitted to each unit.

The audio bus is the same as the control bus, but it has only one message consisting of an acknowledge code (5Ah) and two bytes of audio data.

All multi-byte fields are transmitted in big-endian data order, meaning the most-significant byte is transmitted first.

The protocol requires the data_valid signal to go low for at least one clock cycle between messages. This eliminates the need for receivers to count the data bytes of messages for other units to keep track of where messages start.