Implementing a Synthesizer in an FPGA

The latest update is up on YouTube.

What takes time at this point is not so much implementing the new features.
The second oscillator is a cut and paste of the first one, and the mixer is just a couple of multipliers and an adder.
It’s the planning and architecting that take time.
It’s a bunch of little decisions.
How many bits of precision for the pulse width modulation? For the mixer?
What will control what?
Which oscillator syncs which one?
How many envelope generators?
How many LFOs?
What can LFOs and Envelopes modulate?
Linear or exponential frequency encoding? (The equivalent of Volt/Octave or Hz/Volt, each method has its own advantages and disadvantages.)
Etc., etc.

But it is coming along and getting more and more musical with each added feature.

So far I have used up just over half of the resources of the EP4CE6 FPGA that I started with.
I expect I will soon run out of multipliers, several of the potentiometers or VCA you see in an analog synth are emulated using at least one multiplier in the FPGA, and there are only 15 multipliers in the small device that I am currently using.
So far I have used 8 of the 15 multipliers : 4 in the filter ( one in each of the four stages), 1 in the envelope generator, 2 in the mixer and 1 to control the second oscillator’s frequency offset.

When I add the LFO, it will be expensive in multipliers because you need one multiplier for each thing that the LFO can modulate, to control the depth of the modulation.
Same thing for everything you want to modulate with an envelope.
So I will soon be migrating to the EP4C15 which has almost four times as many multipliers.

6 Likes