USB device
USB full-speed device stacks and CDC-ACM serial on the US2 port.
| Core | Repository | Language | License | FPGA | Used by |
|---|---|---|---|---|---|
| no2usb-derived ECP5 USB FS device core (had2019 bootloader) ★ | emard__had2019-playground | Verilog | LGPL-3.0-or-later | ECP5 | 6 |
| circuit-killer USB FS serial device (VHDL, ULX3S-built) | circuit-killer__fpga-usbserial | VHDL | GPL-2.0 (usb_serial/COPYING) | ECP5 | 2 |
| f32c USB CDC-ACM device + soft PHY | f32c__f32c | VHDL | BSD-2-Clause | any | 2 |
| hdl4fpga USB 1.1 device core | hdl4fpga__hdl4fpga | VHDL | MIT (LICENSE, Miguel Angel Sagreras) | any | 13 |
| ulixxe USB CDC-ACM device core | ulixxe__usb_cdc | Verilog | MIT (LICENSE) | any | 2 |
| ulx3s-misc USB CDC-ACM device (VHDL) | emard__ulx3s-misc | VHDL | GPL-2.0-or-later | any | 0 |
Cores
no2usb-derived ECP5 USB FS device core (had2019 bootloader) (best)
Early ECP5-ported snapshot of Sylvain Munaut’s no2usb: full-speed USB device MAC/PHY (EP buffers, CRC, transaction engine) driving the US2 pins directly; the core shipped as the fielded ULX3S DFU bootloader’s USB device.
| Repository | emard__had2019-playground: HAD2019 badge playground |
| Files | cores/usb/rtl |
| Top module | usb |
| Language | Verilog |
| License | LGPL-3.0-or-later (LICENSE.lgpl3; header in cores/usb/rtl/usb.v) |
| FPGA / primitives | ECP5: TRELLIS_IO, OFS1P3DX, IDDRX1F |
| Tests | waveform-only (cores/usb/sim/*_tb.v via iverilog, never run to a pass/fail check) |
On ULX3S: Runs at 48 MHz from a 25->48MHz EHXPLLL (sysmgr.v); wire to usb_fpga_bd_dp/dn + usb_fpga_pu_dp on US2.
Used by 6 other catalogued repos (file copies or module instances found by scan_core_usage.py; heuristic):
- icebreaker-fpga__icetwang (instantiates
soc/cores/no2usb/rtl/usb.v) - no2fpga__no2bootloader (instantiates
gateware/cores/no2usb/rtl/usb.v) - smunaut__had2019-playground (instantiates
cores/usb/rtl/usb.v) - smunaut__ice40-playground (instantiates
cores/no2usb/rtl/usb.v) - spritetm__hadbadge2019_fpgasoc (instantiates
soc/usb/usb.v) - ulx3s__hazard3-doom (instantiates
bootloader/cores/usb/rtl/usb.v)
circuit-killer USB FS serial device (VHDL, ULX3S-built)
USB CDC-ACM device core with its own soft PHY (usb11_phy_vhdl, no vendor primitives) plus an optional ULPI wrapper; the repo ships ULX3S v2.0/v3.1.7 LPFs and 12F/25F/45F/85F build dirs.
| Repository | circuit-killer__fpga-usbserial: USB1.1 full-speed device-side USB-to-serial core |
| Files | usb_serial, usb11_phy_vhdl |
| Top module | usb_serial |
| Language | VHDL |
| License | GPL-2.0 (usb_serial/COPYING) |
| FPGA / primitives | ECP5: none (portable) |
| Tests | none found |
On ULX3S: Use usb11_phy_vhdl (direct US2 pins), not ulpi_wrapper (needs an external ULPI PHY chip).
Used by 2 other catalogued repos (file copies or module instances found by scan_core_usage.py; heuristic):
- emard__ulx3s-misc (copies
examples/usb/usbcdc/usb_control.vhd) - f32c__f32c (copies
rtl/soc/usb_serial/usb_control.vhd)
f32c USB CDC-ACM device + soft PHY
USB 2.0 CDC-ACM device entity (usb_serial.vhd) over a UTMI-style soft PHY (usb11_phy, ported from Verilog), wired into f32c SoCs proven across ULX3S 12F-85F.
| Repository | f32c__f32c: f32c: retargetable RISC-V/MIPS 32-bit soft CPU + SoC library |
| Files | rtl/soc/usb_serial, rtl/soc/usb11_phy |
| Top module | usb_serial |
| Language | VHDL |
| License | BSD-2-Clause (repo fallback, no per-file header on usb_serial.vhd); usb11_phy is OpenCores-permissive (Copyright 2000-2002 Rudolf Usselmann) |
| FPGA / primitives | any: none (portable) |
| Tests | none found |
On ULX3S: Same core family as emard__ulx3s-misc/examples/usb/usbcdc; check docs/projects/f32c__f32c.md before reuse (license per-file uncertainty).
Full review: f32c__f32c.
Used by 2 other catalogued repos (file copies or module instances found by scan_core_usage.py; heuristic):
- circuit-killer__fpga-usbserial (copies
usb_serial/usb_transact.vhd) - emard__ulx3s-misc (copies
examples/usb/usbcdc/usb_transact.vhd)
hdl4fpga USB 1.1 device core
Portable USB 1.1 device core with no vendor primitives, switchable device/host role via a build constant; used on real ULX3S hardware by boards/ULX3S/apps/ser_debug.vhd on the US2 pins.
| Repository | hdl4fpga__hdl4fpga: hdl4fpga: portable VHDL library, ScopeIO oscilloscope, SDRAM graphics, eth/USB links |
| Files | library/usb/usbdev.vhd, library/usb/usbphy.vhd |
| Top module | usbdev |
| Language | VHDL |
| License | MIT (LICENSE, Miguel Angel Sagreras) |
| FPGA / primitives | any: none (portable) |
| Tests | waveform tb in boards/ULX3S/testbenches (12 tb files across boards, not all self-checking) |
On ULX3S: Set the usb_device constant true in a ser_debug.vhd-style top; needs the matching usbphy.vhd PHY.
Full review: hdl4fpga__hdl4fpga.
Used by 13 other catalogued repos (file copies or module instances found by scan_core_usage.py; heuristic):
- antoinevg__cynthion-tutorials (instantiates
examples/soc/top.py) - apfaudio__guh (instantiates
guh/util/test_devices.py) - emeb__orangecrab-litex-adc (instantiates
hw/deps/valentyusb/sim/test-cdc-eptri.py) - greatscottgadgets__amalthea (instantiates
amalthea/gateware/device.py) - greatscottgadgets__cynthion (instantiates
cynthion/python/examples/tutorials/gateware-usb-device-01.py) - greatscottgadgets__cynthion-uac (instantiates
uac/uac2.py) - greatscottgadgets__luna (instantiates
applets/clear_endpoint_halt_test.py) - lawrie__ulx3s_examples (instantiates
usbhost/usbh_host_hid.v) - orangecrab-fpga__orangecrab-examples (instantiates
litex/deps/valentyusb/sim/test-cdc-eptri.py) - orbcode__orbtrace (instantiates
orbtrace/amaranth_glue/luna.py) - spinalhdl__saxonsoc (instantiates
hardware/scala/saxon/board/digilent/ArtyA7SmpLinux.scala) - voltcyclone__hurra-fpga (instantiates
src/hurra_cynthion/device.py) - voltcyclone__hurricanefpga (instantiates
legacy/src/backend/usb_serial.py)
ulixxe USB CDC-ACM device core
Self-contained full-speed USB CDC-ACM device (SIE, control/bulk endpoints, PHY rx/tx) with no BRAM/vendor primitives, shipped with pin files for 21 boards (Fomu, TinyFPGA-BX, iCEBreaker…).
| Repository | ulixxe__usb_cdc: Fomu / TinyFPGA-BX: USB_CDC, a from-scratch Full-Speed |
| Files | usb_cdc |
| Top module | usb_cdc |
| Language | Verilog |
| License | MIT (LICENSE) |
| FPGA / primitives | any: none (portable) |
| Tests | self-checking: examples/{TinyFPGA-BX,Fomu}/…/tb_demo.v uses assert_error macros (iverilog) |
On ULX3S: No ULX3S pin file yet; add one for usb_fpga_bd_dp/dn + pull-up, following an existing board example.
Full review: ulixxe__usb_cdc.
Used by 2 other catalogued repos (file copies or module instances found by scan_core_usage.py; heuristic):
- machdyne__zeitlos (instantiates
rtl/csrs.vh) - mb-sat__ulx3s-longwave-sdr (instantiates
logic/ulx3s-stream-verilog/ulx3s.v)
ulx3s-misc USB CDC-ACM device (VHDL)
Same usb_serial.vhd device entity family as f32c, packaged as a standalone ULX3S example with a Windows .inf driver file; this copy documents itself as GPL, unlike the BSD-2 fallback claimed for the f32c copy.
| Repository | emard__ulx3s-misc: ULX3S misc/advanced examples: EMARD’s building-block library |
| Files | examples/usb/usbcdc |
| Top module | usb_serial |
| Language | VHDL |
| License | GPL-2.0-or-later (examples/usb/usbcdc/README.txt) |
| FPGA / primitives | any: none (portable) |
| Tests | none found |
On ULX3S: examples/usb/usbcdc/usbtest.vhd is the ready-to-build ULX3S top.
Full review: emard__ulx3s-misc.
Other catalogued projects
Catalogued repos tagged usb-device (38) are listed in the full catalogue.