advanced audio recording
Spartan 3E organ project
   12 oscillators

72 x 2 voices

127 midi channels

Spartan 3E Virtual Analog Organ - V03
A 1024 voice synthesizer with Spartan 3 FPGA

A Spartan 3E FPGA board is used to incorporate a remake of my PLD-ORGAN project. Here, all components are made the digital way meaning, that they are virtually modeled. The main PLD component is basically the same as in the version of 2003 - only the analog components like the wave generator and the filters are replaced. Also the keyboard is virtually modeled and has been replaced by a simplified MIDI-box being capable to play up to 65535 music notes sequentially.

A Virtual Analog Organ with Xilinx 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 72 keys (6 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". 

Sound 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 physical organ project version 2003.

automatic code generation with excel for PLD organ


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

- only triangle or sine wave is possible
- only one organ register is implemented so far
- only balanced tuning is available
- 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


- 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.


The following table shows the features of the two organ projects and their virtual remakes:

2001 2003 2006 2007
XC4000 XC4000 S3 S3E
Clock Frequency 15 MHz 25 MHz 15 MHz 25 MHz
Master Tones 12 12 12 12
Octaves 5 6 5 6
Tones 60 72 60 72
Keyboard 61 72 61 72
Tuning balanced balanced / pure balanced balanced / pure
Wave Forms 3 4 3 3
Tone Accuracy 99,27% 99,85% 99,27% 99,85%
Max Error 0,34 Hz 0,17 Hz 0,34 Hz 0,17 Hz
Phase Res 7 Bits 8 Bits 7 Bits 8 Bits
Amplitude Res 6 Bits 8 Bits 6 Bits 8 Bits
AD - Conversion real R2R real R2R linear linear
Filtering analog analog binary IIR binary IIR
Filter Groups 60 60 5 12
Grouped Notes 1 1 12 6
Summation 1 1 1 2
Outputs Mono Mono Mono L, R
DAC OUT 10 Bits 12 Bits 12 Bits 16 Bits
One Bit Out PDM 15 MHz PDM 25 MHz
Stereo Mono Mono Panned XY Quasi XY + Quasi AB
Octaves 5 6
Registers 2 3
Modules 10 18
* 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

Download an example file for S3E: churchdemo

Click here for the PLD ORGAN 2001



© Jürgen Schuhmacher 2007