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