vhdl | ||
.gitignore | ||
.gitmodules | ||
arty_a7_35.xdc | ||
gen_liteeth.py | ||
Makefile | ||
Makefile.nextpnr | ||
Makefile.symbiflow | ||
README.md |
WS2812 driver gateware for blinkenwall v3
At 100 FPS, a single strand of WS2812 can only be just over 300 LEDs long:
MAX_LENGTH = (1 / FPS - RESET_TIME) / BIT_TIME / BITS_PER_PIXEL
318 = (1 / 100 - 50e-6) / 1.3e-6 / 24
Because blinkenwall v3 has 64 * 96 = 6144
pixels, driving it at 100 FPS requires at least
6144 / 318 = 20
parallel drivers. For simplicity, the wall is devided into 24 strands of
256 LEDs. Unfortunately, most microcontrollers have at most a couple WS2812-capable interfaces
(typically SPI), so this would require coordinating several microcontrollers in parallel. A
much more integrated solution is to instantiate as many WS2812 drivers as desired in an FPGA,
then point the entire video firehose at the FPGA.
Ethernet communication
The controller accepts UDP packets containing image data on port 61437 ("PIXEL"). Each packet contains color data for one strand of LEDs.
The packet structure is as follows:
00 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 0a | 0b | 0c | 0d | 0e | 0f | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
00 | magic | strand number | frame number | pixel 1 | ||||||||||||
10 | pixel 2 | pixel 3 | pixel 4 | pixel 5 |