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):
- emard__ulx3s-misc (instantiates
examples/led64x64/emard/top.v) - lawrie__ulx3s_examples (instantiates
ledpanel/top.v) - michaelbell__nanov (instantiates
top.v) - ulx3s__fpga-odysseus (instantiates
projects/LedPanel/DualPanel/top.v)
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):
- lawrie__blackicemxbook (instantiates
examples/ledbaby/baby.v) - lawrie__verilog_examples (instantiates
fpga/ledbaby/baby.v) - msiddalingaiah__centurion (instantiates
Verilog/iCE40.v)
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):
- f32c__f32c (instantiates
rtl/soc/vgahdmi/ledstrip.vhd)
Other catalogued projects
Catalogued repos tagged led-matrix (15), led (1) are listed in the full catalogue.