Author: Scott Gravenhorst
FPGA Drone Synth
Hardware: Xilinx Spartan-3E Starter Kit (dev. board).
Other Possible Hardware:
The Verilog source code will synthesize directly for a Spartan-3E Starter Kit. Using a Spartan-3E 500K, the design uses only 49% of available slices, so it seems likely that the code will also synthesize and work correctly with an Avnet Spartan-3A 400K board. It would need a hardware DAC and the MIDI electrical interface. Sample rate may be different causing tuning ROM changes.
This MIDI monophonic synthesizer is made up of 32 sinewave generators each amplitude modulated by low frequency noise to create slowly evolving timbre changes. Portamento is applicable separately to any of the 32 sinewave generators. After the 32 sinewaves are summed, they are passed through an NCF controlled by an ADSR, the NCF is a state variable filter in lowpass mode. Finally, the NCF output is passed through an NCA controlled by another ADSR.
The Spartan-3E implementation runs at a sample rate of 250 KHz. Depending on the notes used, this may be "overkill". If low frequency fundamental notes are used, many harmonics can be used without stepping beyond the Nyquist limit. The sample rate can be lowered, eg. 125 KHz, but the limit for any harmonic frequency drops proportionately. In the case of halving the sample rate, the number of oscillators could be doubled.
- SineSynth_ver_d.zip - Source code as of 2010-03-03.
- A Sample of a single keypress using 16 of the 32 available oscillators: http://electro-music.com/forum/download.php?id=20641 I am not certain, but I believe that the integer multipliers are set to prime numbers and unity.
- A sample that uses 32 oscillators, harmonics 1 through 32 with main levels set like sawtooth (and would be without the noise modulation): http://electro-music.com/forum/download.php?id=20649
Settings can be sent with system exclusive messages. These messages can be part of the MIDI stream or a separate COM port connection. The VB.NET patch editor collects settings data from sliders and other controls and sends them over the selected COM port to the synth.
Note: The synth will get bad data if you try to send patch data over the COM port while sending messages from the keyboard controller over MIDI. The PicoBlaze MIDI and TTY MCU driver is too simple to handle it.
Here is the patch editor source (which will work with the free VB.NET Express Edition)
- SineSynth_Patch_Editor_VB.zip - VB.NET project files for the patch editor.