LED drivers

HUB75 panels, WS2812 strips, LED matrices.

Core Repository Language License FPGA Used by
HUB75(e) LED matrix driver (fpga_led_display) ★ w531t4__fpga_led_display SystemVerilog MIT (LICENSE, SPDX header in files) ECP5 0
64x64 LED panel scanner (ledscan) goran-mahovlic__prjtrellis-led64x64 VHDL BSD (-- (c)EMARD / -- LICENSE=BSD header) ECP5 4
HUB75e LED panel driver (colorlight-led-cube) lucysrausch__colorlight-led-cube Verilog GPL-3.0 (LICENSE, root) ECP5 3
no2hub75 HUB75 panel core (no2fpga library) smunaut__ice40-playground Verilog CERN-OHL-W-2.0 iCE40 UP5K 0
PWM/PDM gamma-corrected LED brightness drivers kbob__icebreaker-candy Verilog GPL-3.0 (LICENSE, root; no per-file SPDX headers) any 0
ws2812b WS2812B RGB LED strip driver emard__ledstrip VHDL none found any 1

Cores

HUB75(e) LED matrix driver (fpga_led_display) (best)

Board-agnostic HUB75(e) RGB LED panel display_core with gamma correction, double-buffered framebuffer fabric, FM6126 panel init and a watchdog; built with make BOARD=ulx3s.

   
Repository w531t4__fpga_led_display: w531t4/fpga_led_display: LED matrix panel driver
Files src/display_core.sv, src/matrix_scan.sv, src/hub75_rgb_pack.sv, src/gamma_correct.sv, src/framebuffer_fabric.sv, src/fm6126init.sv, src/top_ulx3s.sv, src/constraints/ulx3s_v316.lpf
Top module top_ulx3s
Language SystemVerilog
License MIT (LICENSE, SPDX header in files)
FPGA / primitives ECP5: none (portable)
Tests none found in this pass

On ULX3S: top_ulx3s.sv is the real ULX3S build target (ESP32 wifi_gpio SPI control link); src/constraints/ulx3s_v316.lpf ships in-repo.

64x64 LED panel scanner (ledscan)

EMARD’s VHDL scan-out driver for 64x64 indoor RGB LED panel modules (P2.5/P3/P4), proven on ULX3S 12F with prjtrellis.

   
Repository goran-mahovlic__prjtrellis-led64x64: HUB75 64x64 LED panel, sprite animation
Files emard/ledscan.vhd
Top module ledscan
Language VHDL
License BSD (-- (c)EMARD / -- LICENSE=BSD header)
FPGA / primitives ECP5: none (portable)
Tests none found

On ULX3S: Small, self-contained driver; pair with sprite_rom.v in the same repo for a framebuffer source.

Used by 4 other catalogued repos (file copies or module instances found by scan_core_usage.py; heuristic):

HUB75e LED panel driver (colorlight-led-cube)

HUB75e RGB LED panel scan-out driver plus a UDP-payload-to-framebuffer writer, originally from Clifford Wolf’s c3demo, adapted for a Colorlight-driven LED cube.

   
Repository lucysrausch__colorlight-led-cube: Colorlight 5A-75B “LED cube” hack: HUB75e RGB panel driver
Files fpga/ledpanel.v, fpga/udp_panel_writer.v
Top module ledpanel
Language Verilog
License GPL-3.0 (LICENSE, root)
FPGA / primitives ECP5: none (portable)
Tests none found

On ULX3S: Proven on Colorlight 5A-75B (ECP5 25F); fpga/pll.v (25->125MHz + 52MHz panel clock) uses ECP5 EHXPLLL and needs reparameterizing, ledpanel.v itself is plain Verilog.

Used by 3 other catalogued repos (file copies or module instances found by scan_core_usage.py; heuristic):

no2hub75 HUB75 panel core (no2fpga library)

Full-featured HUB75 driver library (scan, binary-code-modulation gamma, colormap, framebuffer, PHY) from smunaut’s no2fpga core collection.

   
Repository smunaut__ice40-playground: iCEBreaker: collection of iCE40 UP5K IP cores
Files cores/no2hub75/rtl/hub75_top.v, cores/no2hub75/rtl/hub75_scan.v, cores/no2hub75/rtl/hub75_bcm.v, cores/no2hub75/rtl/hub75_colormap.v, cores/no2hub75/rtl/hub75_gamma.v, cores/no2hub75/rtl/hub75_framebuffer.v, cores/no2hub75/rtl/hub75_phy.v
Top module hub75_top
Language Verilog
License CERN-OHL-W-2.0 (cores/no2hub75/LICENSE)
FPGA / primitives iCE40 UP5K: SB_IO
Tests sim/hub75_init_inject_tb.v (waveform-only, not individually re-run here)

On ULX3S: Only hub75_phy.v/hub75_phy_ddr.v instantiate SB_IO and need an ECP5 IO-primitive rewrite; hub75_scan.v/hub75_bcm.v/hub75_colormap.v/hub75_gamma.v/hub75_framebuffer.v are portable.

Full review: smunaut__ice40-playground.

PWM/PDM gamma-corrected LED brightness drivers

Technology-independent PWM and PDM gamma-corrected LED brightness drivers (led_main pipeline) for RGB LED panels, plus a simple un-gamma-corrected variant.

   
Repository kbob__icebreaker-candy: iCEBreaker: eye-candy demos driving a 64x64 HUB75 RGB LED panel
Files include/led-pwm-gamma.v, include/led-pdm-gamma.v, include/led-simple.v
Top module n/a
Language Verilog
License GPL-3.0 (LICENSE, root; no per-file SPDX headers)
FPGA / primitives any: none (portable)
Tests none found in this pass

On ULX3S: No vendor primitives in these include/ files; client instantiates led_main and supplies a painter24 module plus a generated gamma table hex.

ws2812b WS2812B RGB LED strip driver

Self-contained WS2812B bit-banging driver: parametric clk_Hz/striplen/timing generics, drives dout from an internal 8-colour ROM sequence selected by a 3-bit ctrl input.

   
Repository emard__ledstrip: ledstrip: example VHDL WS2812B RGB LED strip driver with pushbutton colour-cycle demo
Files rtl/generic/ws2812b.vhd
Top module ws2812b
Language VHDL
License none found (no header in ws2812b.vhd; no repo LICENSE file; sibling toplevel wrappers ulx2s_toplevel.vhd/FleaFPGA_2v5_toplevel.vhd carry LGPL-2.1+ headers)
FPGA / primitives any: none (portable)
Tests none found

On ULX3S: No vendor primitives; clk_Hz generic defaults to 25000000, matching the ULX3S clock, so it drops in unchanged. Repo ships only ULX2S/FleaFPGA toplevels, no ULX3S top-level.

Used by 1 other catalogued repo (file copies or module instances found by scan_core_usage.py; heuristic):

Other catalogued projects

Catalogued repos tagged led-matrix (15), led (1) are listed in the full catalogue.


Back to top

Generated from the JSON in data/ by the scripts in .claude/skills. Facts cite the upstream file at the reviewed commit; verify before reuse.

This site uses Just the Docs, a documentation theme for Jekyll.