ULX3S prebuilt binaries (emard__ulx3s-bin)
| Field | Value |
|---|---|
| Upstream | https://github.com/emard/ulx3s-bin |
| Reviewed at | 2a40f50 (upstream date 2022-04-19), reviewed 2026-09-27 |
| License | none stated in the repo (binaries built from third-party sources, each with its own license) |
| HDL / framework | n/a: prebuilt .bit/.bit.gz/.svf/.vme/.img files, no HDL sources |
| Toolchain | Mixed: Diamond-era .vme (2018–2019), open flow .bit.gz (2020+) |
| Programmer | ujprog, FleaFPGA-JTAG, openFPGALoader, OpenOCD; ESP32 serial tools |
| Target FPGA(s) | 12F / 25F / 45F / 85F (depends on folder), plus ECP5-5G m85f and ULX4M DFU images |
| Board revision(s) | v1.7(patch), v1.8, v2.0/v3.0.x (v20), v3.1.4, v3.1.7 |
| Activity | 327 commits, 2018-03-11 → 2022-04-19. Mostly emard, some Goran Mahovlic and davor. Dormant since 2022 |
What it is
The quickstart and factory-test kit for the board: known-good bitstreams to check a new board, set up the FT231X and ESP32, install bootloaders, and try demos. It is also a catalogue of the earliest designs people ran on the ULX3S. Each folder points to a source project.
Contents (one bullet per folder, fpga/… unless stated)
| Folder | Function tags | What it is | Source project |
|---|---|---|---|
f32c/ | soc-cpu, video-dvi, rtc-power, adc, audio-dac, examples | Board self-test: f32c MIPS/RISC-V SoC plus selftest-mcp7940n.bin. Checks RTC, EDID, ADC, DAC, buttons, switches and LEDs, and prints results on serial and DVI. Also BASIC, galaga, a synth and a slides viewer | f32c/f32c (rtl/proj/lattice/ulx3s) |
passthru/ | esp32, uart | USB-serial → ESP32 bridge for flashing the ESP32, per revision and chip | emard/ulx3s-passthru |
dfu/ | bootloader, usb-device, esp32 | Recommended bootloader: DFU on US2 plus ESP32 passthru on US1, multiboot .img (12F/25F/45F/85F on v20, v314, v317; ULX4M) | emard/had2019-playground (fork of smunaut’s HAD2019 badge) |
tinyfpgasp/, tinyprog/ | bootloader, usb-device | Older TinyFPGA-style US2 bootloader, 2018 | tinyfpga/TinyFPGA-Bootloader fork |
memtest/ | sdram | SDRAM memory test at 112–210 MHz with various clock phases (32/64 MB), 2019 | unknown (emard) |
emi/v3.1.7/ | sdram | SDRAM memtest EMI variant for v3.1.7, 2021 | unknown |
oled/ | oled-lcd | OLED + button test (25F/45F), 2018 | unknown (emard ulx3s-misc?) |
rtc/ | rtc-power, video-dvi, oled-lcd | RTC clock shown on DVI + ST7789, set with buttons | unknown |
usb/ | usb-host, video-dvi, oled-lcd | USB1.0 low-speed HID host on US2, shows reports as hex | unknown (likely emard/ulx3s-misc usbhost) |
eth/ | ethernet, video-dvi | LAN8720 RMII on GP/GN 9–13; hdl4fpga DHCP + ping responder | hdl4fpga (hdl4fpga/hdl4fpga) |
scope/ | adc, video-dvi, oled-lcd, ps2, usb-device, ethernet | 4-channel storage oscilloscope with mouse GUI on 800×600 or OLED; USB CDC-Ethernet on US2 | hdl4fpga ScopeIO |
slides-hdl4fpga/ | video-dvi, sdram, esp32 | Graphics slides viewer fed from ESP32 MicroPython | hdl4fpga |
c64/ | retro-computer, esp32 | Commodore 64 (free ROMs) for 12F/85F, PRG loader + OSD over ESP32 | unknown (FPGA64-derived?) |
oberon/ | retro-computer, soc-cpu, sdram | Project Oberon RISC5 workstation (12F, 85F; cache edition from PNRU) | unknown (emard/oberon?) |
litex/linux/ | soc-cpu, linux, sdcard, video-dvi | Linux on LiteX/VexRiscv, 50 MHz, framebuffer on GPDI, rootfs on SD | litex-hub/linux-on-litex-vexriscv |
debugblink/flashblink | flash-spi | Probe flash pins with a wire from GP27 to check BGA soldering | unknown |
diamond/ | toolchain | Scripts to run Lattice Diamond on Debian/Ubuntu | — |
esp32/ (top) | esp32 | esptool/espefuse, efuse burn script, websvf binaries, MicroPython v1.14 + esp32ecp5, RTC demo | emard/LibXSVF-ESP, emard/esp32ecp5 |
usb-jtag/ (top) | programmer-tool | ujprog, FleaFPGA-JTAG, OpenOCD, ftx_prog binaries for Linux/RPi/Win/macOS | f32c/tools, emard/FleaFPGA-JTAG |
pcb/ (top) | board-hw | Gerbers for PCB v3.1.3 | emard/ulx3s |
“unknown” = the source is not stated in the repo; guesses are marked with ?.
How to use (from README)
Board bring-up: program the FT231X with ftx_prog, load f32c/…selftest…bit, upload f32c-bin/selftest-mcp7940n.bin with f32cup.py, then read serial at 115200 or the DVI screen. After that: passthru to flash, burn the ESP32 efuse (3.3 V flash, WROOM only), upload websvf.
DFU bootloader install: openFPGALoader -b ulx3s --unprotect-flash --file-type bin -f multiboot.img.gz. Enter it by holding BTN1 while plugging US2 (LEDs D0–D2 on).
Reuse notes
- Best known-good bitstreams for checking hardware before debugging your own design (self-test, memtest, flashblink).
memtest/file names give a reference for how fast SDRAM runs on ULX3S (up to ~200 MHz with a tuned clock phase). Pass/fail results are not recorded in the repo.- hdl4fpga (scope, eth, slides) is a major reusable-core source: DVI, RMII, USB CDC-ECM, PS/2. Review it.
- The README’s hardware bring-up notes (diode test of BGA pins, regulator jumpers RP1–3, < 50 mA idle current) are useful for anyone assembling boards.
Open questions
- Sources for memtest, emi, oled, rtc, usb, c64, oberon, flashblink need to be located.