[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