[Fpga-synth] Hardware-emulation problems

Rainer Buchty rainer at buchty.net
Sun May 11 16:21:57 CEST 2008


Hi everyone,

a former student of mine and I are still working on an Ensoniq SQ80 
VSTi; while making this one more realistic, we did some measurements 
which turned out to not quite show the expected behavior on some 
occasions:


(1) Synchronization

The oscillators are just plain 24-bit phase accumulators of which, 
depending on selected wave size and address resolution, a window of at 
least 8 bits is used for waveform addressing.

If you then e.g. synchronize a 50% square wave to another wave running 
at more than twice the speed you would expect DC output, right? So 
that's what we implemented:
 	http://itec.uka.de/~buchty/const_sq8L.gif

However, doing measurements on the real machine showed not DC but just 
some sort of impulse response -- a short spike:
 	http://itec.uka.de/~buchty/const_sq80.gif
 	http://itec.uka.de/~buchty/const_sq80_zoom.gif

Does anyone have an explanation what might be going on here that we see 
that "chirp" instead of the expected DC?


(2) DCA

The DCA on that very soundchip is a multiplying DAC. One input is the 
volume data, the other one the waveform data. Whether volume data DAC
generates the reference voltage for the waveform DAC or vice versa is 
unknown.

When modulating the volume with an LFO you would expect discrete steps 
with the step width referring to the update ratio. Hence, we implemented 
this:
 	http://itec.uka.de/~buchty/pics/dca_sq8L.gif

The idea is that when we drop from max to min (0) volume level, we 
would see a likewise response, i.e. the signal output 
dropping to 0.

Well, in reality it doesn't. Instead, in the original hardware we found 
this behavior:
 	http://itec.uka.de/~buchty/pics/dca_sq80.gif

You basically see an averaging effect, especially noticeable at the 
volume drop from max to min, pausing on max/2 for half an update cycle.

While I studied the operating system sources, I didn't find an immediate 
sign that this is a software function (which I suspected for the nicely 
halved step durations) -- I might have overlooked something there, of 
course.

But in case I didn't: is there any half-way decent explanation for such 
behavior in multiplying DACs?


Rainer



More information about the Fpga-synth mailing list