advanced audio recording
Spartan 3E organ project
   12 oscillators



127 midi channels

384 kHz
Audio DSP

Spartan 3E Virtual Analog Organ - V07
This site describes my latest fully programmable virtual organ project. You are encouraged to download the programming file and test the songs yourself. To fully get informed about the functions please also read the pages about the former versions:

Virtual Analog Organ V03 - an emulation of my analog organ from 2003

Virtual Analog Organ V01 - an emulation of my analog organ from 2001


The idea behind the project was to reveal the former project and also the sound without recreating or rebuilding the analog hardware. To be honest the concept of my analog organs to create parallel PCBs and sound channels for all possible tones and layers leads to much work. With nowadays FPGA most of that can be done by copy and paste actions. Also certain enhancements can be done easily like stereo placing and effects. Over the years the sound quality progressed like shown in the following table:

2001 2003 2006 2006 2007
XC4000 XC4000 S3 S3E C2
Clock Frequency 15 MHz 25 MHz 15 MHz 25 MHz 50 MHz
Master Tones 12 12 12 12 12
Octaves 5 6 5 6 7
Tones 60 72 60 72 84
Keyboard 61 72 61 72 88
Tuning balanced balanced / pure balanced balanced / pure balanced / pure
Wave Forms 3 4 3 3
Tone Accuracy 99,27% 99,85% 99,27% 99,85% 99,97%
Max Error 0,34 Hz 0,17 Hz 0,34 Hz 0,17 Hz 0,06 Hz
Phase Res 7 Bits 8 Bits 7 Bits 8 Bits 9 Bits
Amplitude Res 6 Bits 8 Bits 6 Bits 8 Bits 10 Bits
AD - Conversion real R2R real R2R clean clean clean
Filtering analog analog binary IIR binary IIR binary IIR
Filter Groups 60 60 5 12 28
Grouped Notes 1 1 12 6 3
Summation 1 1 1 2 3
Outputs Mono Mono Mono L, R L, R, C
DAC OUT 10 Bits 12 Bits 12 Bits 16 Bits 16 Bits
One Bit Out PDM 15 MHz PDM 25 MHz PDM 50 MHz
Stereo Mono Mono Panning (XY) Panning + Delay
* balanced / pure tuning setup at compile time * balanced / pure tuning setup at run time
* R2R - network with non ideal linearity * no R2R - network -> ideal linearity
* R2R - network makes individual tuning possible * no R2R - network -> no individual note behavior
* true analog filtering * notes grouped before filtering
* 18 analog wave modules required to create full organ setup * all modules included


Xilinx Spartan Starter Kit

FPGA SYnthesizer with Spartan 3

A Spartan 3E FPGA board is used to realize the organ project. All components are made the digital way meaning, that they are virtually modeled. The main components for sound generation are basically the same as in the first analog version from 2001 - but all the analog components were replaced. The keyboard is virtually modeled and has been replaced by a simplified MIDI-box being capable to play up to 65535 music notes sequentially.

FPGA Virtual Analog Organ with Spartan 3e

Music Box / MIDI Engine

The Music Engine produces MIDI-like tone information, based on pre defined tone information which is kept in a local memory in the FPGA. The notes are initially copied to the RAM during synthesis process of the FPGA. 127 MIDI notes are available, where 60 keys (5 octaves) are used. The data entry is done with the classical piano roll method using an Microsoft Excel sheet which automatically generates the code for the FPGA music player.

piano roll data entry for the virtual PLD organ

Music entry is easy this way because for an organ, there is only on off required. The length of the lines = the cells covered indicate the time which the sound has to be applied. A second sheet analyzes the lines and eventually creates on off tags from it which are text-summarized in the last column finally.

 automatic code generation with excel for PLD organ
The code in the final column is used as a so called COE-file and will be loaded into the Block-RAM of the Xilinx FPGA during the compilation process. The data format is TTTT.NN.II "point of time", "note number", "intensity" where 0 means "off".

virtual music keyboard on SVGA monitor
Visualization of "pressed keys" of the virtual keyboard on the VGA monitor 

Sound Synthesis Engine

The sound synthesizer takes the music notes and produces audio signals for each midi channel using the virtual wave module and synthesis module described in the organ project.

automatic code generation with excel for PLD organ

Audio DSP Engine

The sound synthesizer takes the music notes and produces audio signals for each midi channel using the virtual wave module and synthesis module described in the organ project. Simple Echo Reverb is added using acoustic diffusion.


Because of the limited space in the little Spartan 3 FPGA, some restrictions do apply:

- only simplified sine wave is possible next to triangle
- only 2 organ register are implemented so far
- no "analog" distorted R2R behavior
- no analog filtering / de-BIAS-ing is done
- PDM output is used instead of S/PDIF
- no music keyboard control
- no high speed MIDI
- only 8192 MIDI notes possible


- balanced and pure tuning is available now
digital pre filtering is applied to emulate the former analog conversion circuit
- digital analog noise is introduced to smooth calculation and emulate analog noise
- analog boost is applied using amp modeling to emulate non linearity
- automatic music player included to emulate keyboard
- stereo virtual processing using static 3D placing and reverb


Download the programming files for S3E:  vpldorgan07



© Jürgen Schuhmacher 2007