Skip to the content
2 layers24.1 × 21 mmClock, the printed circuit board in 3D

A 1-bit ΔΣ stereo audio DAC implemented on a Xilinx 7-series FPGA (Digilent Cmod S7), driven from an I²S input.

Size
24.1 × 21 mm
Copper layers
2
Thickness
1.6 mm
Parts
7
Nets
9
Pads
28
Tracks, vias
34, 39
Pours
1
Routed
Yes
KiCad
KiCad 10.0 (file 20260206)
Created
12 Apr 2026
Updated
18 Oct 2026

Overview

Clock is an open-source printed circuit board by prydin, from the prydin/toy-dac repository on GitHub. It is a 2-layer board of 24.1 × 21 mm with 7 parts on 9 nets, routed with 34 tracks and 39 vias.

It is built around the C3391-22.5792 and C3391-24.576. Its parts include 2 capacitors, 2 diodes, 2 crystals and 1 connector. It belongs with the lEDs and displays boards of this library.

Main components

2

README

README.md

toy-dac

The current toy-dac hardware: the carrier board connected to a Digilent Cmod S7

toy-dac started as a challenge: make a DAC that could at least produce sound. It has grown well beyond that proof of concept into a working DAC that reproduces music very nicely. The name is a nod to those humble beginnings, not a measure of what the project can do today.

toy-dac signal-chain block diagram

A 1-bit ΔΣ stereo audio DAC implemented on a Xilinx 7-series FPGA (Digilent Cmod S7), driven from an I²S input.

The signal chain is entirely made-from-scratch RTL:

  • I²S receiver with double-flopped synchronizers and AXI-Stream output
  • External audio-family clocks — selects 22.5792 MHz or 24.576 MHz clocks for the 44.1 kHz and 48 kHz families
  • Clock-domain crossing control — isolates housekeeping and sample processing in separate clock domains, synchronizing family changes and coordinating mute, pipeline reset, and clock settling
  • Automatic input rate detection (32 / 44.1 / 48 kHz)
  • Fractional-phase polyphase ASRC — 256 phases × 64 taps × 18-bit coefficients with 16-bit alpha lerp, single time-shared MAC, PI servo on the input ring-buffer fill — resampling onto an output grid at Fsout = sclk / 64 (8× the nominal input rate)
  • 2nd-order CIFB ΔΣ modulator (per channel) with TPDF dither, driving a single-bit differential output pin pair on each channel
  • A small reconstruction filter and analog output stage on the carrier PCB

Internal test sources (silent, DC, 1 kHz DDS sine) and a bypass mode (raw I²S → modulator) are included for bring-up and characterisation.

The current build is surpassing 90 dB SNR. The remaining distortion is mainly the second and third harmonics (H2 and H3), which we believe are related to the DAC's switching output. Extensive listening tests have found it almost on par with commercial DACs, though there is still work to do on the finer details.

Status

First viable version. toy-dac has grown from a proof of concept into a working DAC capable of reproducing music very nicely. It has been exercised on hardware and through extensive listening tests, but is still evolving: the analog board is a hand-routed prototype, the design has not had formal verification, and there is more work to do on measured performance and subjective refinement. Module ports, parameter names, and pinouts may change without notice; treat it as an evolving project rather than drop-in IP.

Repository layout

text
fpga/toy-dac/   Vivado project (RTL under src/rtl, constraints under
                toy-dac.srcs/constrs_1, simulation under toy-dac.srcs/sim_1)
kicad/dac/      KiCad schematic + PCB for the analog carrier board
scripts/        Coefficient generation, simulation helpers, sanity checks
docs/           Block diagrams (top-level + ASRC internals)

Building

Open fpga/toy-dac/toy-dac.xpr in Vivado 2024.2, run synthesis + implementation + bitstream generation, and program the Cmod S7. The target part and pin assignments live in fpga/toy-dac/toy-dac.srcs/constrs_1/new/root.xdc.

Parts

7
QtyValueFootprintReferences
2100nCapacitor_SMD:C_0603_1608Metric_Pad1.08x0.95mm_HandSolderC1, C2
2LEDLED_SMD:LED_0603_1608MetricD1, D2
1C3391-22.5792Oscillator:Oscillator_SMD_Diodes_FN-4Pin_7.0x5.0mmY1
1C3391-24.576Oscillator:Oscillator_SMD_Diodes_FN-4Pin_7.0x5.0mmY2
1Conn_02x06_Top_BottomConnector_PinHeader_2.54mm:PinHeader_2x06_P2.54mm_VerticalJ1

More from prydin/toy-dac

2
  • 4 layers81 × 81.3 mmDac ng, the printed circuit board in 3D

    Dac ng

    prydin/toy-dac

    A 1-bit ΔΣ stereo audio DAC implemented on a Xilinx 7-series FPGA (Digilent Cmod S7), driven from an I²S input.

    86 parts4
  • 4 layers91.4 × 81.3 mmDac, the printed circuit board in 3D

    Dac

    prydin/toy-dac

    A 1-bit ΔΣ stereo audio DAC implemented on a Xilinx 7-series FPGA (Digilent Cmod S7), driven from an I²S input.

    50 parts4

Similar boards

  • 4 layers50 × 20 mmSpdif resampler, the printed circuit board in 3D

    Spdif resampler

    ryandenyer/Digital-Audio-Converter

    27 parts
  • 2 layersEncoder, the printed circuit board in 3D

    Encoder

    byrantech/laptop

    anyon_e, a highly integrated, high end, open source laptop. Attempt the impossible.

    7 parts4.3kMIT
  • 2 layers40 × 20 mmSensor smd, the printed circuit board in 3D

    Sensor smd

    scottbez1/splitflap

    DIY split-flap display

    7 parts4.2k
  • 2 layers19.8 × 30 mmZ limit, the printed circuit board in 3D

    Z limit

    opulo-inc/lumenpnp

    The LumenPnP is an open source pick and place machine.

    7 parts3.7k
  • 2 layers35.6 × 58.2 mmDisplay Carrier, the printed circuit board in 3D

    Display Carrier

    AxxAxx/AxxSolder

    STM32 Based soldering station for JBC cartridges, 9-24 VDC and USB-PD power

    7 parts1.7kGPL-3.0
  • 2 layers20.3 × 16.3 mmMap MPX, the printed circuit board in 3D

    Map MPX

    rusefi/rusefi

    rusefi - GPL internal combustion engine control unit

    7 parts1.2k
  • 2 layers26 × 44 mmCompact carrier board, the printed circuit board in 3D

    Compact carrier board

    jamro/tiny-engineer

    A small desktop robot that brings an AI coding assistant to life, physically acting out when it reads files, thinks, writes code, and finishes work.

    7 parts1.1k
  • 2 layers26.4 × 53.8 mmAtari pickup, the printed circuit board in 3D

    Atari pickup

    hoglet67/RGBtoHDMI

    Bare-metal Raspberry Pi project that provides pixel-perfect sampling of Retro Computer RGB/YUV video and conversion to HDMI

    7 parts1kGPL-3.0

Questions

How big is the Clock PCB?

It measures 24.1 × 21 mm and has 2 copper layers, 1.6 mm thick.

What parts does the Clock use?

7 parts, built around the C3391-22.5792 and C3391-24.576. 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 Clock KiCad files?

From the prydin/toy-dac repository on GitHub, at the commit this page was made from: the board is kicad/dac-ng/clock/clock.kicad_pcb and its schematic kicad/dac-ng/clock/clock.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the Clock design in my own project?

Its repository states no licence, so its author keeps all rights: ask prydin before reusing the design.