For a long time I've thought it must be possible to make a music synthesiser using just an FPGA. However, it seemed daunting to start from scratch and so the project was put on the back burner. Thankfully, the final drive to make this happen came from visiting this site: people.ee.ethz.ch/%7Enobssa/projects.shtml
Basically the synthesiser is monophonic and has 8 sine wave oscillators built up in a harmonic series much like a draw bar organ. Each oscillator has it's own ADSR for volume control of that harmonic over time. Also, each oscillator has its own volume control and its own pan amount. The oscillators repond to velocity information too. A master volume control is also available and also a control to turn each sine wave oscillator into a square wave.
I am grateful to Samuel Nobs and Daniel Engeler for using their code to kick start my own FPGA synthesizer.
Having the VHDL code available which included a MIDI interface and DAC interface made it irresistible!. What's more I design firmware for FPGAs for a living and I have access to FPGA populated boards and all the tools necessary.
The company is Crystal Vision Ltd in Cambridge, UK. www.crystalvision.tv
I'm responsible for the following boards: TPG102, ARC102, ShARC102, ShARC204, LKEY211, ShARC102XP, ShARC204XP, CoCo104, ViPA102, ViPA204 and probably the best chroma keyer in the world - Safire :-P They are used in TV studios all over the world, such as the BBC and SKY and many millions of people have watched TV programs made using them.
I principly use Altera and AHDL but have recently incorporated Xilinx ISE and Virtex 2.
I selected a spare prototype board to use as my development platform which was a ShARC102XP. This contained an Altera APEX20K200EFC484-2X which was my target device. Being a 2X device also meant it had an onboard PLL so I didn't need to change the current 27MHz crystal to make the needed 5.6448MHz master clock.
The project compiled to occupy 93% of the logic element resources so there isn't much more room to add extra features. However, the Fmax of the design is currently 38MHz so with the 5.65MHz requirement for a single voice, a 6 note polyphonic version could be produced.
The board also had the necessary 1.8V core voltage PSU and 3.3V I/O PSU too. An Hitachi H8 was there to perform Altera boot duties from a suitably preprogrammed EPROM. Other devices on the board were not used. For means of getting necessary signals in and out of the FPGA I made use of a debug connector to get MIDI information in and audio data out.
To do this I designed and built a DAC board that would sit above the main FPGA board.
Both boards then sat neatly, one above the other in a desk top box with integral PSU and BNC inputs and outputs. A converter cable was made to go from BNC to 5 Pin DIN for MIDI input and adapters used to go from BNC to phono for the audio outs.
Having debugged everything the synth did start making some useful noises. Fortunately some default parameters are incorporated on boot up inherent in the VHDL code. However, to change the sound I needed to program some MIDI controllers to send the appropriate MIDI controller data for the FPGA to decode. Fortunately I have two Phil Rees C16 MIDI controllers to hand.
By using the controller setup program from Phil Rees I was able to load my custom patches to the controllers.
I did modify the code to extend the bottom range by two octaves as it gave out at MIDI note 36, now it stops at 12. This is necessary for good deep sine bass that this FPGA synthesiser is capable of.
OK that's all well and good but how does it sound?
The first demo is recorded dry and goes through the additive process of each oscillator in turn, then panning them and bringing them all together and panning individual harmonics.
A little echo and reverb was used on these last two tracks :-)
- First Demo : Additive_Sines.mp3 (1.67Mb)
- Second Demo : Sine_of_the_times_FX+.mp3 2.71MB.
- Third Demo : Square_of_the_times_FX+.mp3 1.78MB.
Comments and suggestions welcome!