

As my introduction into the world of RTL design, I decided to make a simple driver for the WS2812B LED. My primary goal with this project was to learn the open source ASIC toolchain (such as iverilog, yosys, OpenROAD) and create something that I could easily prototype using an FPGA.
This project was designed for and submitted on the SKY25a run which uses the open-source SKY130 PDK, a 130nm process node. Thanks to Tiny Tapeout, designing and taping out a custom chip is significantly less costly and more well documented than in the past.
This project drives a WS2812B RGB LED matrix (or strip) using the SPI protocol. Each 3 byte SPI frame gets displayed on each sequential LED in the matrix. This allows for animations to be displayed given the color composition of each pixel on each frame. For an 8x8 matrix, the expected refresh rate is roughly 300hz.
The simple write-only SPI peripheral is designed for a CPHA (clock phase) and CPOL (clock polarity) of 0 and a baudrate of 1Mhz. Each frame should consist of pulling CS low, writing 3 bytes, and pulling CS high.
After a pixel's worth of data has been received into the SPI register, it is latched and the LED driver is signaled to start sending data.