Skip to content

RGB Mixer Chip

Why this project

I work at a FabLab with high school students. I wanted a project that is concrete enough for a beginner — turn a knob, see an LED change — but technical enough to go deep: encoder decoding, debouncing, PWM, synthesis, timing closure, tapeout. RGB Mixer works on both levels.

This was also personally hard. I made many mistakes throughout this course — wrong PDK paths, broken netlists, failed GDS exports — and had to work through each one. That process is documented in the session pages. The chip design itself is not complex, but understanding why each step works took real effort.

Reference design: tt05 RGB Mixer by Matt Venn — reimplemented from scratch.


What it does

Three rotary encoders control the brightness of Red, Green, and Blue LEDs independently via PWM. Turn clockwise to increase brightness, counter-clockwise to decrease. Three identical pwm_channel modules run in parallel inside rgb_top.


Block Diagram

RGB Mixer block diagram

Each channel: encoder input → debounce → 8-bit counter → PWM generator → LED output. Clock: 10 MHz.


Simulation

GTKWave — pwm_r, pwm_g, pwm_b

All three PWM channels verified with an iverilog testbench. At reset each channel defaults to 50% duty cycle.


Synthesis

Yosys — 270 cells

270 Sky130 standard cells after Yosys synthesis. 48× dfrtp_1 flip-flops (the three 8-bit counters). Zero latches.


Place & Route

OpenROAD layout

OpenROAD timing report

270 cells placed in 2658 µm² at 11% utilization. Timing closed with 98.29 ns slack against a 100 ns clock period.


Layout

KLayout — dfxtp_1 poly layer

dfxtp_1 D flip-flop from the Sky130 standard cell library — the building block of the counters.

KLayout full render


Numbers

Parameter Value
Process Sky130 — 130nm
Standard cells 270
Design area 2658 µm²
Utilization 11%
Total power 54.3 µW
Timing slack 98.29 ns (MET ✓)
Critical path 1.58 ns
Supply voltage 1.8V

Tools

Stage Tool
RTL Simulation iverilog + GTKWave
Linting Verilator
Synthesis Yosys
Place & Route OpenROAD
Layout Viewer KLayout
Analog Verification ngspice
PDK SkyWater Sky130