Skip to the content
PCBKitNew board
4 layers58.4 × 101.9 mmUp5k osc, the printed circuit board in 3D

The brute-force approach is to synthesize these analog waveforms at sufficiently high sample rates that the timing jitter becomes imperceptible.

Size
58.4 × 101.9 mm
Copper layers
4
Thickness
1.6 mm
Parts
137
Nets
113
Pads
448
Tracks, vias
842, 96
Pours
2
Routed
Yes
KiCad
KiCad 5 (file 20171130)
Created
26 Jun 2021
Updated
25 Nov 2024

Overview

Up5k osc is an open-source printed circuit board by emeb, from the emeb/up5k_osc repository on GitHub, published under the MIT licence. It is a 4-layer board of 58.4 × 101.9 mm with 137 parts on 113 nets, routed with 842 tracks and 96 vias.

It is built around the ICE5LP4K-SG48I, R-78E5.0-0.5 and MCP6004-E/P, with the W25Q32JVSSIQ, LP2985-33DBV and NUP4202W1 among its other parts. Its parts include 46 resistors, 42 capacitors, 13 connectors, 12 ICs and 7 diodes. It belongs with the FPGA and CPLD boards of this library.

Main components

8

README

README.md

up5k_osc

An FPGA-based digital oscillator for Eurorack

Front View Back View

What is it?

up5k_osc is a Eurorack-format digital oscillator demonstrating digital audio synthesis with a low-cost FPGA. It supports several basic waveforms commonly found in analog synthesizers, but generated digitally at very high sample rates to avoid many of the problems with aliasing that occur when these waveforms are synthesized at lower sample rates.

Features

​

  • 12HP wide 3U standard Eurorack module
  • +/-12V supply on Doepfer-standard 16-pin shrouded, keyed header (30ma max)
  • Trimmed 1V/Oct pitch control input with coarse and fine adjustment pots
  • Attenuated Exponential FM input
  • 3 additional uncommited +/-5V CV inputs with associated setting pots
  • Sync input
  • Two +/-5V range audio outputs
  • Three 3 position toggles for range and mode control
  • RGB LED indicator
  • Additional single LED indicator
  • USB-based firmware updates

Design details

  • Lattice iCE40 Ultra Plus 5k FPGA
  • 4MB SPI Flash memory for configuration data, firmware and tables.
  • 4-channel 12-bit SPI ADC with 500kSPS max sample rate
  • Direct-access SPI Programming header
  • 3-pin diagnostic header (2 data + ground)
  • Reset and Bootloader pushbuttons
  • Done Program LED
  • Buck SMPS regulator for low current draw from +12V supply
  • Differential PDM DACs for high-resolution, high sample rate and low THD audio

Resources

Motivation

One of the most thorny issues encountered when attempting to synthesize simple analog waveforms in the digital domain is that of aliasing which occurs due to sharp transitions coupled with low sample rates. Seemingly "obvious" methods of generating simple waveforms like sawtooths and square or pulse waves fail miserably when the sharp edges of these waveforms jitter around due to the low timing resolution of practical DSP sample rates. Mountains of research have been devoted to DSP approaches to minimizing this edge jitter using techniques such as BLIT, BLEP, MinBLEP, PolyBLEP, DPW, etc. These work, but end up becoming compromises between the complexity of the approach (and the consequent CPU load they impose) and the degree of alias rejection that they provide.

The brute-force approach is to synthesize these analog waveforms at sufficiently high sample rates that the timing jitter becomes imperceptible. This is the method that up5k_osc uses - an audio-rate oscillator is synthesized at sample rates in excess of 10MHz which knocks the aliases of even the buzziest narrow pulse wave down below 80dBfs. Differential Pulse Density Modulation is used to do the digital-to-analog conversion in an inexpensive yet highly linear fashion.

Theory of Operation

The up5k_osc system comprises a power supply, ADC, Flash Memory, FPGA and analog I/O processing.

Power Supply

Eurorack systems typically provide +/-12V rails at a minimum, and as DSP becomes a more common feature in typical racks, the +12V rails are disproportionally loaded down by the use of simple LDO linear regulators to supply the high currents needed by most modern digital components. up5k_osc uses a SMPS regulator module to efficiently provide an internal 5V supply from which 3.3V analog and digital supplys can be derived with less heat and waste.

Analog Input Processing

A 4-channel 12-bit 500kSPS SPI ADC is used to digitize control voltage inputs to the up5k_osc. One channel is dedicated to handling the typical 1V/Oct pitch control and includes trimming to calibrate the 1V/Oct slope, as well as coarse and fine user offsets as well as summing an attenuated FM input. This provides roughly 2.7cents/lsb pitch resolution over a 10V range which covers most of the musical range to an accuracy better than the commonly accepted human perception.

The other three ADC channels are uncommitted CV inputs with offset controls and a 10Vpp range. Running that the maximum rated conversion speed, the ADC can provide 125kSPS per channel which is sufficiently high to provide good temporal resolution.

FPGA and SPI Flash

The Lattice iCE40 Ultra Plus 5k FPGA provides a modest gate count, a number of useful hard IP cores, including SPI, I2C, Multiply-Accumulate and large RAM. These resources are sufficient for reasonably complex DSP, soft processor cores and I/O tasks. In the up5k_osc, the FPGA is loaded from the SPI Flash at power up and immediately begins execution of a basic processing pipeline which begins with driving a continuous stream of conversions from the ADC, formatting the results for control of a fast internal NCO, waveshaping and then finally generating the PDM output signals.

FPGA bitstreams, along with soft processor firmware and synthesis tables are stored in the SPI flash. During development it's often simplest to directly load the FPGA over the SPI configuration bus via a programming dongle and header on the board, bypassing the SPI flash. In end-use situations however it's desirable to have a simpler approach, and for that purpose a USB interface is provided which uses the NO2 bootloader and the standardized DFU protocol to load data into the SPI flash without extra hardware.

NO2 Bootloader

The up5k_osc FPGA pinout for USB, SPI Flash and boot select button + LED has been designed to follow that of the icebreaker bitsy, so building the bootloader with that configuration will generate a usable bitstream.

Switches and LEDs

User control options are provided in the form of three 3-position SPDT toggles (on-off-on) which can be used to set pitch range, waveform types, etc. A few LEDs are also provided to indicate operating conditions.

Analog Outputs

Two PDM DACs are available with fully differential inputs from the FPGA to improve linearity despite mismatches in rise & fall timing. A two-stage lowpass reconstruction filter rolls off at about 30kHz, allowing harmonic content well above normal human hearing range. SNR has been observed as better that 90dBfs, THD for 1kHz sine is better than 80dBfs and with 16MSPS sample rates the aliasing on naive sawtooth waveforms are lower than 80dBfs beyond 10kHz. Output levels of 10Vpp are compatible with common Eurorack standards.

Gateware

Demonstration gateware for the up5k_osc is provided which handles all the basic functions of an oscillator. Three pitch ranges are provided which cover rates from 13min/cycle to 10kHz. Two output waveforms can be selected from among sine/saw/pulse, with pulsewidth controlled by one of the CV inputs.

As delivered the demo gateware does not use a soft processor core. A serial diagnostic output is generated by simple state machine logic to provide observation of the ADC conversion results (formatted as 115k 8N1 serial). An alternate build is possible via macro definitions in the source code that enables a RISC-V core that can do more complex diagnostics, or even control the oscillator with some imagination and more coding.

Future Work

Going beyond this is certainly possible - wavetable morphing has been tested and other synthesis techniques such as multi-operator FM are possible. The USB interface could be employed to turn the module into an Audio class peripheral that handles MIDI or PCM audio.

Parts

137
QtyValueFootprintReferences
140.1ufCapacitors_SMD:C_0603C101, C104, C105, C108, C109, C110, C112, C113, C114, C210, C211, C212, C220, C221
8AudioJack2_SwitchTfootprints:Jack_3.5mm_QingPu_WQP-PJ398SM_Vertical_CircularHolesJ201, J202, J203, J205, J206, J207, J208, J209
7100kResistors_SMD:R_0603R107, R109, R201, R203, R205, R207, R208
610kResistors_SMD:R_0603R101, R106, R108, R217, R218, R220
610kfootprints:Potentiometer_TT_P0915NRV201, RV202, RV203, RV204, RV205, RV206
61ufCapacitors_SMD:C_0603C102, C103, C215, C216, C218, C226
50.01ufCapacitors_SMD:C_0603C205, C206, C207, C209, C227
5100Resistors_SMD:R_0603R111, R112, R215, R233, R234
510ufCapacitors_SMD:C_0805C106, C107, C111, C208, C228
416kResistors_SMD:R_0603R225, R226, R227, R228
41kResistors_SMD:R_0603R221, R222, R223, R224
4330pfCapacitors_SMD:C_0603C201, C202, C203, C204
44.7nfCapacitors_SMD:C_0603C213, C214, C217, C219
449.9kResistors_SMD:R_0603R202, R204, R206, R209
471.5kResistors_SMD:R_0603R229, R230, R231, R232
475pfCapacitors_SMD:C_0603C222, C223, C224, C225
333kResistors_SMD:R_0603R211, R212, R213
3SW_SPDTfootprints:SPDT_SubminiSW103, SW104, SW105
21.5kResistors_SMD:R_0603R103, R216
222Resistors_SMD:R_0603R104, R105
2220Resistors_SMD:R_0805FB201, FB202
2DDiodes_SMD:D_SMAD205, D206
2LEDLEDs:LED_0603D101, D104
2SW_PushButtons_Switches_SMD:SW_SPST_KMR2SW101, SW102
11.2MResistors_SMD:R_0603R210
112MHzOscillators:Oscillator_SMD_SeikoEpson_SG210-4pin_2.5x2.0mmU106
11MResistors_SMD:R_0603R102
11kfootprints:23BR500LFTRRV207
12.2kResistors_SMD:R_0603R110
132.4kResistors_SMD:R_0603R214
160kResistors_SMD:R_0603R219
1ADC124S051Housings_SSOP:MSOP-10_3x3mm_Pitch0.5mmU202
1ASMB-KTF0-0A306‎footprints:ASMB-KTF0-0A306‎D103
1BAT54SPackage_TO_SOT_SMD:SOT-23D201
1Conn_01x03Pin_Headers:Pin_Header_Straight_1x03_Pitch2.54mmJ104
1Conn_01x07Pin_Headers:Pin_Header_Straight_1x07_Pitch2.54mmJ103
1Conn_02x08_Odd_Evenfootprints:5103308-3J204
1DDiodes_SMD:D_0603D102
1LM4040DBZ-5Package_TO_SOT_SMD:SOT-23U204
1LP2985-3.3Package_TO_SOT_SMD:SOT-23-5U205
1MCP1802x-xx02xOTTO_SOT_Packages_SMD:SOT-23-5U104
1MCP1824x-OTTO_SOT_Packages_SMD:SOT-23-5U103
1MCP6004Housings_SSOP:TSSOP-14_4.4x5mm_Pitch0.65mmU201
1MMBT3904TO_SOT_Packages_SMD:SOT-23Q201
1NC JumperJumper:SolderJumper-2_P1.3mm_Bridged_RoundedPad1.0x1.5mmJ102
1NUP4202TO_SOT_Packages_SMD:SOT-23-6U102
1R-78E5.0-0.5Converter_DCDC:Converter_DCDC_RECOM_R-78E-0.5_THTU210
1TL072PWHousings_SSOP:TSSOP-8_4.4x3mm_Pitch0.65mmU203
1USB_OTGfootprints:USB_Micro-B_10103594-0001LF_actual_outlineJ101
1Val**footprints:avatar_smallRef**
1Val**footprints:avatarRef**
1W25Q32JVSSHousings_SOIC:SOIC-8_3.9x4.9mm_Pitch1.27mmU101
1ice5lp4k_sg48footprints:QFN-48-1EP_7x7mm_Pitch0.5mm_DIY_PADSU105

Questions

How big is the Up5k osc PCB?

It measures 58.4 × 101.9 mm and has 4 copper layers, 1.6 mm thick.

What parts does the Up5k osc use?

137 parts, built around the ICE5LP4K-SG48I, R-78E5.0-0.5, MCP6004-E/P and W25Q32JVSSIQ. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.

Where can I download the Up5k osc KiCad files?

From the emeb/up5k_osc repository on GitHub, at the commit this page was made from: the board is hardware/up5k_osc.kicad_pcb. PCBKit opens the board in the browser, with nothing to install.

Can I use the Up5k osc design in my own project?

Its repository publishes it under the MIT licence: you may reuse it on that licence's terms (keep the author's notice, and for a copyleft licence share your changes alike).

Similar boards

  • 4 layers38.1 × 101.6 mmESP32S2 Audio, the printed circuit board in 3D

    ESP32S2 Audio

    emeb/ESP32S2_Audio

    A Eurorack module demonstrating the use of the ESP32S2 as an audio effects processor

    124 parts8MIT
  • 2 layers119.4 × 109.2 mmSpace, the printed circuit board in 3D

    Space

    kitspace-test-repos/kicad6-file-collection

    174 partsMIT
  • 4 layers26.4 × 41.7 mmDspod up5k, the printed circuit board in 3D

    Dspod up5k

    emeb/dspod

    A family of boards for Eurorack DSP audio

    68 parts10MIT
  • 2 layers66 × 107.5 mmTonwerk haupt, the printed circuit board in 3D

    Tonwerk haupt

    Marcel-B/Synth

    Die beiden Browser-Synthesizer aus Tonwerk (YuE UI) als Plugins für Logic Pro: Tonwerk Analog und Tonwerk FM, jeder mit Delay und Hall und eigenen Werksklängen.

    100 parts
  • 2 layers38.1 × 101.6 mmRP2040 Audio, the printed circuit board in 3D

    RP2040 Audio

    emeb/RP2040_Audio

    A Eurorack module for stereo audio effects based on the Raspberry Pi RP2040 MCU

    121 parts23MIT
  • 2 layers27.9 × 101.6 mmG081 audio, the printed circuit board in 3D

    G081 audio

    emeb/g081_audio

    A Eurorack reverb module based on the STM32G081

    96 parts13MIT
  • 2 layers100 × 100 mmGrow, the printed circuit board in 3D

    Grow

    soundslikefrank/grow

    A Eurorack genetic sequencer

    140 parts3GPL-3.0
  • 2 layers88.9 × 106 mmMarbles v70, the printed circuit board in 3D

    Marbles v70

    mort13/clandestine_circuitry

    Collection of diy synth projects

    208 parts12GPL-3.0