[sdiy] Re: FPGA 2-OP FM MIDI Polysynth
Scott Gravenhorst
music.maker at gte.net
Sun May 3 22:50:34 CEST 2009
Donald Tillman <don at till.com> wrote:
> > Date: Sun, 03 May 2009 12:24:16 -0700
> > From: Scott Gravenhorst <music.maker at gte.net>
> >
> > Here is 16vFM-2x4, a 16 voice version is now working, same structure, just double
> > the voice count. The 16 voice PicoBlaze-based MIDI controller (with LCD code
> > included) uses 3/4 of the code space allowed (727 instructions).
>
>Scott,
>
>Are you aware that the DX-7 used no real-time multiplies?
No, I was not aware of that, and that is amazing.
>Fast multiplies were extremely expensive in 1983.
I'm sure of that much.
>And fast multiplies were absolutely required for digital filter implemetations in subtractive
>synthesis, but not required for FM Synthesis.
Not required, hmm... Well, math pedestrian that I am, I'm not sure how I would implement a
carrier:modulation ratio that's adjustable/modulatable without a multiply. Heck, even modulating
the A parameter without a multiply... Definately some smarter people than I out there.
>And that was the major incentive for the existence of the DX-7.
>(The DX-7 stored the log(sin()) values in the sine lookup tables, and
>the rest should be obvious.)
Well, obvious it isn't - oh wait, log(sin(x)). I remember that to do multiplies, logs are added
but the sum must be looked up again in antilog tables - can I assume antilog table was also in ROM?
May I ask where I can learn about how they did this without a hardware multiplier? From my
FM-very-neophyte point of view, it was intuitively obvious how to implement FM _with_ fast hardware
multipliers - but without? yikes. heh heh, and there are a pile of unused hardware multipliers
still available in this FPGA.
The thing is, with this FPGA, the mulpliers are _dedicated_ hardware and exist whether you use them
or not (well, if you use a block RAM, you can't use the associated multiplier). My design uses
only 2 of the 20 block RAMs [1 for the sine table, one for the PicoBlaze code space] and 5
multipliers [also of 20]; three are used by the sound generation state machine for FM and for
tuning table interpolation and 2 more are used by the parallel ADSRs (one multiplier per ADSR).
>If you used the DX-7 algorthm, you might be able to cram many more
>operators and voices on there.
Where in tarnation can I get the pertinent details for that?
Is there a better explanation (for a person who isn't a DSP engineer) than a patent document?
Don, thank you for your enlightening comments.
I've only _just_ begun to mess with FM (really I've only been doing digital synthesis at all for
about 3 years). Regardless of what you're hearing in the samples, I am _not_ a math giant - I wish
I were, and with help here and elsewhere I'm getting better, but I know there's a mountain of stuff
I still need to learn. So any pointers to "better" or "best" reading material is most appreciated.
-- ScottG
________________________________________________________________________
-- Scott Gravenhorst
-- FPGA MIDI Synthesizer Information: home1.gte.net/res0658s/FPGA_synth/
-- FatMan: home1.gte.net/res0658s/fatman/
-- NonFatMan: home1.gte.net/res0658s/electronics/
-- When the going gets tough, the tough use the command line.
More information about the Synth-diy
mailing list