|
12 oscillators
6 Sub-Modules
88 voices
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
Intention
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 nowaday's 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:
|
|
|
|
|
|
|
|
PLD ORGAN 1 |
PLD ORGAN 2 |
|
V PLD ORGAN '01 |
V PLD ORGAN '03 |
V PLD ORGAN '07 |
|
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 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 |
|
Platform
Xilinx Spartan Starter Kit
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 anlog 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.
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.
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.
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".
Visualization of "pressed keys" of the virtual keyboard
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.
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.
Limitations
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
Enhancements
- 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
Downloads
Download the programming files for S3E: vpldorgan07
|
|