[Fpga-synth] RAM Technique and the phLUTe
Veronica Merryfield
veronica.merryfield at shaw.ca
Mon Apr 7 00:46:43 CEST 2008
I had a thought - could you figure out a way to put in a short
controlled decay at the note end, then clean the delay lines to zero
then start fresh. You should be able to do this in a millisecond or two.
On 6-Apr-08, at 9:28 AM, Veronica Merryfield wrote:
>
> On 6-Apr-08, at 9:08 AM, Scott Gravenhorst wrote:
>
>> In my endeavor to tame those transients, I have an idea that may
>> (or may not) work.
>>
>> The idea is to use two copies of the RAM structure used for the
>> digital waveguides so that when a pitch change occurs, the system
>> first makes a stretched or compressed copy (depending on pitch down
>> or pitch up change respectively) in the "offline" RAM and then
>> switches the system to "play" from the new RAM data. I've devised
>> an algorithm that should work, it needs an extension to the tuning
>> tables to provide a reciprocal of the length value needed to
>> compute the stretch or compress and to avoid division i
>> n the algorithm. My rough calculations indicate that this copy
>> process should take 2 sample times, or 20uS for 100KHz SR.
>>
>> I believe that a 20uS delay in pitch change is below the threshhold
>> of human perception - ??
> Yes, it is. For a very sensitive person, a few ms is the lower
> threshold.
>
>> My idea includes the use of dual port block RAM so that 2
>> computations can occur simultaneously on the same RAM.
>>
>> The Xilinx doc on using block RAM says that the dual port RAM is
>> symmetrical with two identical and independant ports.
>>
>> I'm taking this to mean that I can write to both ports
>> simultaneously at different addresses. ??
> You need to the read the spec on dual port carefully. Usually, it
> mean a write and a read cycle can happen together but the actual
> write and read happen on diffent clocks at the RAM. The
> implementation usually takes advantage of higher speed access RAM OR
> it provides two ports to ease system design but expects acceses on
> different cycles. My use of it has been with pipelined CPU
> architectures.
>>
>>
>> ----
>>
>> My first attempt will do this only with the Bore because I don't
>> want to eliminate the transient completely, only tame it. I'm
>> hoping that leaving the Jet do what it wants to do will perhaps
>> accomplish this.
>>
>> Since there are currently 14 free multipliers available, I could
>> actually use 8 additional dedicated multipliers to create 2 more 35
>> bit multipliers so I could do both the jet and the bore (the jet is
>> 1/2 the length so it requires 1/2 the time or 1/2 the computational
>> power).
>>
>> Does anyone have any thoughts at all about this idea? - it seems
>> like it will be some work to make it happen and I'd like to bounce
>> this off you people before I take the plunge.
More information about the Fpga-synth
mailing list