Overview#
Inspired by the legendary MOS6581 Sound Interface Device (SID) chip used in the Commodore 64, the TT6581 is an original digital interpretation supporting nearly the entire original feature set, implemented in 2×2 tiles for Tiny Tapeout.
Features#
- Full control through a Serial-Peripheral Interface (SPI)
- Three independently synthesised voices
- Four waveform types: triangle, sawtooth, pulse, and noise
- ADSR envelope shaping per voice
- Chamberlin State-Variable Filter (SVF) — LP, HP, BP, and BR modes
- Second-order delta-sigma DAC with 10 MHz PDM output (OSR = 200)
Architecture#
The diagram below shows the datapath in the TT6581. A tick generator triggers the generation of a single audio sample at 50 kHz.

Voice Generation — One 10-bit voice at a time is generated. Internal phase registers maintain each voice’s state while inactive. Supported waveforms are triangle, sawtooth, pulse, and noise.
Envelope — An ADSR envelope generator produces an 8-bit amplitude value per voice, applied by multiplication.
Wave Accumulation — The three voices are accumulated (mixed) by addition. Depending on each voice’s filter-enable bit, the signal is routed through the SVF or bypasses it.
State-Variable Filter — A Chamberlin SVF processes the filter accumulator. It supports low-pass, high-pass, band-pass, and band-reject modes with tuneable cutoff frequency and resonance (Q).
Global Volume — The SVF output is summed with the bypass accumulator and a global 8-bit volume is applied.
Delta-Sigma PDM — An error-feedback delta-sigma modulator converts the final mix to 1-bit PDM at 10 MHz.
To fit the strict 2×2 tile area requirement, the entire synthesis pipeline is time-multiplexed — most modules are state machines, and a single 24×16 shared multiplier handles all arithmetic.
Pin Mapping#
| Pin | Direction | Function |
|---|---|---|
uio[0] | Input | SPI Chip Select (active low) |
uio[1] | Input | SPI MOSI |
uio[2] | Output | SPI MISO |
uio[3] | Input | SPI SCLK |
uio[4:7] | — | Unused |
uo[0] | Output | PDM audio output |
uo[1:7] | — | Unused |
ui[0:7] | — | Unused |
The PDM output should be passed through a 4th-order Bessel low-pass filter for best analogue reconstruction.
Deep Dives#
Detailed write-ups on each subsystem: