Getting "organized"...


offroad

Recommended Posts

Hi,

 

I've been working on a transistor organ emulation for Retrocade.

There's still a long way to go, but it's now at the point where you can jam around with it. It needs a lowpass filter (/guitar amp). That's intended, it models a "reed" type drawbar as that's the starting point for tone generation in the real-world organ.

 

The bitstream is attached, should be "plug-and-play" (any MIDI channel will do).

It's fully polyphonic, but headroom is currently set to 3 bits only (~8 simultaneous keys).

 

There are 96 tone generators derived from 12 oscillators with 8 divider stages and individual wave generators. The generators initially output sawtooth waves that are then input to 5th order polynomials (Horner scheme), one segment for each halfwave.

 

Here is one octave out of 8.

post-36723-0-21723600-1390166530_thumb.p

 

And all this fits into 1/8 of the Spartan 6 SLX 9!

post-36723-0-59785600-1390166529.png

 

The "trick" is that all number crunching is pipelined over a single 18x18 multiplier that runs at true 96 MMUL/s. It even has quite large idle periods left, and 32-bit access is muxed 2*16 over one port of the DP-Ram with the other one unused.

The three large blocks are 96 kHz samples. The small bursts in-between are the 12 oscillator stages, which drive 2*4 dividers with 6 polynomial coefficients each.

"Zoom in" goes quite a long way still...

 

post-36723-0-97354900-1390166530_thumb.p

 

As a disclaimer, this is an engineering prototype, not a finished musical instrument. Did I mention the lowpass filter? The key click is genuine "physical modeling", regardless of whether I want it or not :)

 

Attached

  • Bitstream for Papilio Pro and Retrocade (v0.0001)
  • Source in case someone wants to play with it (import flatImpl.v and ip/clockTripler.v, the Xilinx tools can't cope with my (ab)use of `include. )
  • This mainly "notes to self":
    • Do not copy to project folder
    • "make" (cygwin) simulates with iverilog / gtkwave
    • "make flatimpl" rebuilds
    • Remove the location constraints from the .ucf file to use the whole FPGA floor for place-and-route
    • LUTs / logic is the bottleneck for size, and the brain-dead (but functional) MIDI implementation uses quite a few of those... better: ring shift register

archive.zip

Link to comment
Share on other sites

Well, maybe not ready yet for demoing. Might take it to the rehearsal room one day when it's fully functional and run it through the leslie cabinet.

 

I went to a hardware store today, I've got this idea to build actual drawbar controllers for a little over €10 (80 mm potis are €1 each, and three feet of 1/2 inch square wood)...

Link to comment
Share on other sites

  • 2 weeks later...

yee-haw.

 

Especially considering that I have done absolutely nothing to tune the sound yet (just followed the schematic, so to say), this puppy starts to be real fun.

Still has some quirks (well, so has the original, at least this one stays in tune) but we're getting there.

 

 

 

in the attachments, the source (PlanAhead / ISE14.7) and a bit stream for Papilio Pro + Retrocade:

Plug in MIDI and sliders to ADC channels 1..4, the ones closest to the SD card.

Controls are

- 16 '' drawbar

- 8 '' drawbar

- 4 '' drawbar

- "mixture" (3 overtones)

chances are good it'll make some noise even without anything connected to the DACs. Jumpers to +5V are one solution.

 

So far it runs ~100M multiplications per second and uses roughly 1/8 of the FPGA resources.

Attached also a short audio demo, straight into Cubase, no further processing.

SK61_0v01.pa.zip

impl.bit

1969CaliforniaCheeseAccident.mp3

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.