[Fpga-synth] PolyDaWG Working Again

Scott Gravenhorst music.maker at gte.net
Wed Nov 14 17:30:05 CET 2007


I discovered what the problem was with the PolyDaWG/8 design...

Once I switched to ISE 9.2i, I could no longer get a working output from
compiling PolyDaWG/8.  The problem was with the comb filter circuitry
distorting (something that looked like overflow, but was not) the output.  

The comb filter delay lines are created in distributed RAM.  

Each string has it's own 256 location RAM because I couldn't get ISE to 

Because each RAM is a separate unit and not combined into a much larger
single RAM, I needed to run an output bus from each RAM.  When I defined
the busses as an array of vector wires, I saw the distortion.  I then tried
some simple experiments that showed that using the array of vector wires
was the problem.  I next defined 8 busses, not as an array and used a mux
techinique inside the state machine to grab the output from each comb
filter during it's selected set of state machine cycles.  Once I did that,
the design began to work correctly.  

Lastly, I removed the multiple (non-array) vectors and created a single
2048 location distibuted RAM replacing the 8 separate RAMs and used the
upper 3 address bits to select the string.  That worked also and uses fewer
FPGA resources so that is how I will leave it.

The design now uses about 4% points fewer slices.  I've also replaced most
of the instantiated primitives with templates that properly infer the same
logic.  The only primitives that are left are 12 flipflops, 4 for POR and 8
for the "pluck" flipflops.  Since these are such simple and common
primitive structures, they ought to be easily converted for other FPGAs. 
The shared multiplier used in the filter is inferred.  This version should
be easier to port.

Also, it seems that 9.2i eliminated most of the odd things I was seeing
before with 8.2i where properly expressed design elements weren't working.
 I say "properly expressed" because I got the structures from ISE "language
templates".  These template based structures all seem to work correctly
under 9.2i.

A version "m" will be posted on the website probably later today.

I'm now working on a version "n" which will expand the synth from 3.5
octaves to 4.9 octaves and will hopefully be incrementally tunable.

It seems a lot can be learned by looking through those language templates.
 There's just enough comment text in them to make them very useful (to me).

-- ScottG

-------------------------------------------------------------

-- Scott Gravenhorst
-- GateMan II - Xilinx Spartan-3E Based MIDI Synthesizer with SVF
-- PolyDaWG/8 - 8 Voice FPGA Polyphonic MIDI Synthesizer
-- 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 Fpga-synth mailing list