[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