[Fpga-synth] PolyDaWG Working Again

Eric Brombaugh ebrombaugh at earthlink.net
Thu Nov 15 16:59:42 CET 2007


Scott,

Good sleuthing. Unfortunately, finding workarounds for the shortcomings 
of synthesis tools is a fairly common exercise in the ASIC/FPGA world. 
If you can do so and also reduce your resource utilization that's even 
better.

Thanks for letting us know what you've learned.

Eric

Scott Gravenhorst wrote:
> 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.
> 
> _______________________________________________
> Fpga-synth mailing list
> Fpga-synth at rubidium.dyndns.org
> http://rubidium.dyndns.org/cgi-bin/mailman/listinfo/fpga-synth
> 



More information about the Fpga-synth mailing list