openFPGALoader(1)
| OPENFPGALOADER(1) | openFPGALoader: universal utility for programming FPGA | OPENFPGALOADER(1) |
NAME
openFPGALoader - Universal utility for programming FPGA (Documentation)
Welcome to the documentation of openFPGALoader!
openFPGALoader is a universal utility for programming FPGAs. Compatible with many boards, cables and FPGA from major manufacturers (Xilinx, Altera/Intel, Lattice, Gowin, Efinix, Anlogic, Cologne Chip). openFPGALoader works on Linux, Windows and macOS.
Not sure if your hardware is supported? Check the hardware compatibility lists:
- FPGAs <#compatibility-fpgas>
- Boards <#compatibility-boards>
- Cables <#compatibility-cables>
Also checkout the vendor-specific documentation:
- Anlogic <https://trabucayre.github.io/openFPGALoader/vendors/anlogic.html>
- Cologne Chip <https://trabucayre.github.io/openFPGALoader/vendors/colognechip.html>
- Efinix <https://trabucayre.github.io/openFPGALoader/vendors/efinix.html>
- Gowin <https://trabucayre.github.io/openFPGALoader/vendors/gowin.html>
- Intel/Altera <https://trabucayre.github.io/openFPGALoader/vendors/intel.html>
- Lattice <https://trabucayre.github.io/openFPGALoader/vendors/lattice.html>
- Xilinx <https://trabucayre.github.io/openFPGALoader/vendors/xilinx.html>
FIRST STEPS WITH OPENFPGALOADER
Install
Packages are available for Linux distributions, Windows (MSYS2) and macOS:
- Arch Linux: sudo pacman -S openfpgaloader
- Fedora: sudo dnf copr enable mobicarte/openFPGALoader; sudo dnf install openFPGALoader
- MSYS2: pacman -S mingw-w64-ucrt-x86_64-openFPGALoader
- macOS: brew install openfpgaloader
More instructions for other installation scenarios are available in Installing openFPGALoader <#install>.
Programming a development board
Just simply replace my_fpga_board with any FPGA board from Boards <#compatibility-boards> (or openFPGALoader --list-boards) in any of the two commands below, depending on if you want to program the volatile part of your FPGA (faster but not persistent) or the flash part of your FPGA (slower but persistent):
openFPGALoader -b my_fpga_board my_bitstream.bit # Program to SRAM openFPGALoader -b my_fpga_board -f my_bitstream.bit # Program to flash
Note:
Programming an “standalone” FPGA
If your FPGA doesn’t come with a built-in programmer or if you prefer to use an external cable, you can specify a cable to use from Cables <#compatibility-cables> (or openFPGALoader --list-cables):
openFPGALoader -c my_cable my_bitstream.bit # Program to SRAM openFPGALoader -c my_cable -f my_bitstream.bit # Program to flash
Note:
Hint:
openFPGALoader -d /dev/ttyUSBX
When the -d option is not provided, openFPGALoader will opens the first FTDI adapter it finds. Therefore it is preferable to use this flag if your computer is connected to multiple FTDI devices.
Troubleshooting
Please refer to Troubleshooting <#troubleshooting>.
INSTALLING OPENFPGALOADER
Linux
Debian/Ubuntu
openFPGALoader is available in the default repositories:
sudo apt install openfpgaloader
Guix
openFPGALoader is available in the default repositories:
guix install openfpgaloader
To use openFPGALoader under GuixSystem without root privileges it is necessary to install the necessary udev rules. This can be done by extending udev-service-type in the operating-system configuration file with this package
(udev-rules-service 'openfpgaloader openfpgaloader #:groups '(\"plugdev\")
Additionally, plugdev group should be registered in the supplementary-groups field of your user-account``declaration. Refer to ``Base Services section in the manual for examples.
Arch Linux
openFPGALoader is available in the default repositories:
sudo pacman -S openfpgaloader
Alternatively, you could build from source. First: install required libraries:
sudo pacman -S git cmake make gcc pkgconf libftdi libusb zlib hidapi gzip
Build step is similar as Debian
Fedora
openFPGALoader is available as a Copr repository:
sudo dnf copr enable mobicarte/openFPGALoader sudo dnf install openFPGALoader
From source
This application uses libftdi1, so this library must be installed (and, depending on the distribution, headers too):
sudo apt install \
git \
gzip \
libftdi1-2 \
libftdi1-dev \
libhidapi-hidraw0 \
libhidapi-dev \
libudev-dev \
zlib1g-dev \
cmake \
pkg-config \
make \
g++
Hint:
By default, (e)udev support is enabled (used to open a device by his /dev/xx node). If you don’t want this option, use:
-DENABLE_UDEV=OFF
By default, cmsisdap support is enabled (used for colorlight I5, I9). If you don’t want this option, use:
-DENABLE_CMSISDAP=OFF
Alternatively you can manually specify the location of libusb and libftdi1:
-DUSE_PKGCONFIG=OFF \ -DLIBUSB_LIBRARIES=<path_to_libusb> \ -DLIBFTDI_LIBRARIES=<path_to_libftdi> \ -DLIBFTDI_VERSION=<version> \ -DCMAKE_CXX_FLAGS="-I<libusb_include_dir> -I<libftdi1_include_dir>"
You may also need to add this if you see link errors between libusb and pthread:
-DLINK_CMAKE_THREADS=ON
By default, libgpiod support is enabled If you don’t want this option, use:
-DENABLE_LIBGPIOD=OFF
Additionaly you have to install libgpiod
To build the app:
git clone https://github.com/trabucayre/openFPGALoader cd openFPGALoader mkdir build cd build cmake .. # add -DBUILD_STATIC=ON to build a static version
# add -DENABLE_UDEV=OFF to disable udev support and -d /dev/xxx
# add -DENABLE_CMSISDAP=OFF to disable CMSIS DAP support cmake --build . # or make -j$(nproc)
To install
$ sudo make install
The default install path is /usr/local, to change it, use -DCMAKE_INSTALL_PREFIX=myInstallDir in cmake invokation.
Udev rules
By default, users have no access to converters. Two rule files are provided at the root directory of this repository:
- 99-openfpgaloader.rules <https://github.com/trabucayre/openFPGALoader/blob/master/99-openfpgaloader.rules> sets the group with GROUP="plugdev".
- 70-openfpgaloader.rules <https://github.com/trabucayre/openFPGALoader/blob/master/70-openfpgaloader.rules> does not set GROUP="plugdev".
First, check if plugdev exists:
grep -w plugdev /etc/group
Option 1 (recommended): create system group plugdev (if required) and use 99-openfpgaloader.rules:
sudo groupadd --system plugdev # only required if plugdev is absent sudo cp 99-openfpgaloader.rules /etc/udev/rules.d/ sudo udevadm control --reload-rules && sudo udevadm trigger # force udev to take new rule sudo usermod -a $USER -G plugdev # add user to plugdev group
Option 2: if plugdev does not exist (or you do not want to create it), use 70-openfpgaloader.rules and ensure your user is in dialout:
sudo cp 70-openfpgaloader.rules /etc/udev/rules.d/ sudo udevadm control --reload-rules && sudo udevadm trigger # force udev to take new rule sudo usermod -a $USER -G dialout # add user to dialout group
After that you need to unplug and replug your device.
Hint:
If the converter still cannot be opened, check access rights on the device node (for example ls -l /dev/ttyUSB* /dev/ttyACM*) and verify the associated group (plugdev or dialout).
macOS
openFPGALoader is available as a Homebrew <https://brew.sh> formula:
brew install openfpgaloader
Alternatively, if you want to build it by hand:
brew install --only-dependencies openfpgaloader brew install cmake pkg-config zlib gzip git clone https://github.com/trabucayre/openFPGALoader cd openFPGALoader mkdir build cd build cmake .. make -j
Windows
MSYS2 (Native Build)
openFPGALoader can be installed via MSYS2:
pacman -S mingw-w64-ucrt-x86_64-openFPGALoader
Cross-compilation from Linux
openFPGALoader can be cross-compiled for Windows from Linux using MinGW-w64 toolchains (GCC or Clang). The build system will automatically download and build the required dependencies (libusb, libftdi).
Prerequisites (Debian/Ubuntu):
sudo apt install \
mingw-w64 \
libz-mingw-w64-dev \
clang \
lld \
cmake \
pkg-config \
p7zip-full
Prerequisites (Fedora/RHEL/Rocky):
sudo dnf install \
mingw64-gcc \
mingw64-gcc-c++ \
mingw64-zlib \
mingw64-zlib-static \
clang \
lld \
cmake \
p7zip \
p7zip-plugins
Build (shared steps):
git clone https://github.com/trabucayre/openFPGALoader cd openFPGALoader mkdir build-win64 cd build-win64
Configure + build with GCC (MinGW-w64):
cmake -DCMAKE_TOOLCHAIN_FILE=../cmake/Toolchain-x86_64-w64-mingw32.cmake .. cmake --build . --parallel
Configure + build with Clang (MinGW-w64 target):
cmake -DCMAKE_TOOLCHAIN_FILE=../cmake/Toolchain-x86_64-w64-mingw32-clang.cmake .. cmake --build . --parallel
The resulting openFPGALoader.exe will be a statically-linked executable that only depends on standard Windows system DLLs (KERNEL32, msvcrt, WS2_32).
Note:
Optional: Strip debug symbols to reduce size:
x86_64-w64-mingw32-strip openFPGALoader.exe # or llvm-strip openFPGALoader.exe
Cross-compilation options:
- -DCROSS_COMPILE_DEPS=OFF - Disable automatic dependency download (use system libraries)
- -DENABLE_CMSISDAP=ON - Enable CMSIS-DAP support (requires manually providing hidapi)
- -DWINDOWS_STATIC_ZLIB=OFF - Allow dynamic zlib linkage (produces zlib1.dll runtime dependency)
Common
Bitstreams for XC2C (coolrunner-II) needs to be remapped using .map shipped with ISE. ISE path is set at configure time using:
-DISE_PATH=/somewhere/Xilinx/ISE_VERS/
default: /opt/Xilinx/14.7.
Disabling/Enabling Cable or Vendor Drivers
With the default cmake .. configuration, openFPGALoader enables ENABLE_CABLE_ALL=ON and ENABLE_VENDORS_ALL=ON. This means all cable and vendor drivers are enabled by default, then filtered only by OS capabilities and available dependencies.
To reduce binary size, speed up the build, or keep support limited to selected cables/vendors, you can explicitly enable or disable options.
These commands are equivalent:
cmake -DENABLE_CABLE_ALL=ON -DENABLE_VENDORS_ALL=ON .. # and cmake .. # Implicit default values
To disable all cable and vendor support:
cmake -DENABLE_CABLE_ALL=OFF -DENABLE_VENDORS_ALL=OFF ..
This produces an openFPGALoader binary with no cable/vendor support. Then re-enable only what you need by adding one or more options below.
Each item in the following lists is a CMake option name. Use them with -D<OPTION>=ON to enable or -D<OPTION>=OFF to disable.
Note:
Example (enable FTDI-based cables and Xilinx devices only):
cmake \
-DENABLE_CABLE_ALL=OFF \
-DENABLE_VENDORS_ALL=OFF \
-DENABLE_FTDI_BASED_CABLE=ON \
-DENABLE_XILINX_SUPPORT=ON \
..
Cable options
- ENABLE_USB_SCAN: Enable USB cable discovery/scanning support.
- ENABLE_ANLOGIC_CABLE: Enable Anlogic cable support (requires libUSB).
- ENABLE_CH347: Enable CH347 cable support (requires libUSB).
- ENABLE_CMSISDAP: Enable CMSIS-DAP interface support (requires hidapi).
- ENABLE_DIRTYJTAG: Enable DirtyJTAG cable support (requires libUSB).
- ENABLE_ESP_USB: Enable ESP32-S3 USB-JTAG cable support (requires libUSB).
- ENABLE_JLINK: Enable J-Link cable support (requires libUSB).
- ENABLE_DFU: Enable DFU-based cable support (requires libUSB).
- ENABLE_FTDI_BASED_CABLE: Enable FTDI-based cable drivers (requires libftdi).
- ENABLE_GOWIN_GWU2X: Enable Gowin GWU2X interface support.
- ENABLE_SVF_JTAG: Enable SVF JTAG playback support.
- ENABLE_USB_BLASTERI: Enable Altera USB-Blaster I support.
- ENABLE_USB_BLASTERII: Enable Altera USB-Blaster II support.
- ENABLE_LIBGPIOD: Enable libgpiod bitbang driver support (Linux only).
- ENABLE_REMOTEBITBANG: Enable remote-bitbang driver support.
- ENABLE_XILINX_VIRTUAL_CABLE_CLIENT: Enable Xilinx Virtual Cable (XVC) client support.
- ENABLE_XILINX_VIRTUAL_CABLE_SERVER: Enable Xilinx Virtual Cable (XVC) server support.
Vendor options
- ENABLE_ALTERA_SUPPORT: Enable Altera/Intel device family support.
- ENABLE_ANLOGIC_SUPPORT: Enable Anlogic device family support.
- ENABLE_COLOGNECHIP_SUPPORT: Enable Cologne Chip device family support (requires libftdi).
- ENABLE_EFINIX_SUPPORT: Enable Efinix device family support (requires libftdi).
- ENABLE_GOWIN_SUPPORT: Enable Gowin device family support.
- ENABLE_ICE40_SUPPORT: Enable Lattice iCE40 device family support (requires libftdi).
- ENABLE_LATTICE_SUPPORT: Enable Lattice device family support.
- ENABLE_LATTICESSPI_SUPPORT: Enable Lattice SSPI support (requires libftdi).
- ENABLE_XILINX_SUPPORT: Enable Xilinx device family support.
Note:
TROUBLESHOOTING
I installed openFPGALoader but it says command not found when I try to launch it
The correct spelling of the program is openFPGALoader with FPGA and the “L” of “Loader” in uppercase. Ensure the spelling of the program is correct.
Gowin device could not communicate since last bitstream flashed. (issue #206 <https://github.com/trabucayre/openFPGALoader/issues/206>)
Gowin’s FPGA may fails to be detected if JTAGSEL_N (pin 08 for GW1N-4K) is used as a GPIO. To recover you have to pull down this pin (before power up) to recover JTAG interface (UG292 - JTAGSELL_N section).
JTAG init failed
Avoid using USB hubs and connect it directly to your PC USB port.
Tang Primer 20k program slow and stucked (issue #250 <https://github.com/trabucayre/openFPGALoader/issues/250>)
Check your openFPGALoader version:
openFPGALoader -V
If it is older than release then v0.9.0, install the most recent version (from commit f5b89bff68a5e2147404a895c075773884077438 <https://github.com/trabucayre/openFPGALoader/commit/fe259fb78d185b3113661d04cd7efa9ae0232425> or later).
Cannot flash Tang Nano 20k (issue #251 <https://github.com/trabucayre/openFPGALoader/issues/511>)
Some firmware version cannot be flashed on Linux-based systems. Version 2024122312 is such an example. It seems this version was not published on the SiPeed website <https://api.dl.sipeed.com/TANG/Debugger/onboard/BL616/>, however some boards sold have this firmware.
The cause of the problem is the debugger on the Tang Nano, specifically the firmware of this debugger. This firmware can be easily updated by following these <https://wiki.sipeed.com/hardware/en/tang/common-doc/update_debugger.html> steps.
Cannot flash Tang Nano 9k (issue #251 <https://github.com/trabucayre/openFPGALoader/issues/251>)
This is a device issue, erase its Embedded Flash using Official GoWin Programmer (preferentially in Windows) and SRAM too, then you can use openFPGALoader again.
Unable to open FTDI device: -4 (usb_open() failed) (issue #245 <https://github.com/trabucayre/openFPGALoader/issues/245>)
Edit your /etc/udev/rules.d/99-ftdi.rules file exchanging your programming device permissions.
For more information, check the udev section from this guide <install.rst>
Converter cannot be opened: fails to open device (issue #626 <https://github.com/trabucayre/openFPGALoader/issues/626>)
This is usually a permissions issue on Linux.
Check your current groups:
id $USER
Verify device node access rights:
ls -l /dev/ttyUSB* /dev/ttyACM*
Then verify udev rules are installed correctly (70-openfpgaloader.rules or 99-openfpgaloader.rules), and that your user is in the expected group (dialout or plugdev).
After changing groups or rules, reload udev rules, then unplug/replug the converter and log out/login again.
Reference: install guide (udev rules section) <https://trabucayre.github.io/openFPGALoader/guide/install.html#udev-rules>.
ADVANCED USAGE OF OPENFPGALOADER
Resetting an FPGA
openFPGALoader [options] -r
Using negative edge for TDO’s sampling
If transaction are unstable you can try to change read edge by using
openFPGALoader [options] --invert-read-edge
Reading the bitstream from STDIN
cat /path/to/bitstream.ext | openFPGALoader --file-type ext [options]
--file-type is required to detect file type.
Note:
# FPGA side nc -lp port | openFPGALoader --file-type xxx [option] # Bitstream side nc -q 0 host port < /path/to/bitstream.ext
Automatic file type detection bypass
Default behavior is to use file extension to determine file parser. To avoid this mechanism --file-type type must be used.
FT231/FT232 bitbang mode and pins configuration
FT232R and ft231X may be used as JTAG programmer. JTAG communications are emulated in bitbang mode.
To use these devices user needs to provides both the cable and the pin mapping:
openFPGALoader [options] -cft23XXX --pins=TDI:TDO:TCK:TMS /path/to/bitstream.ext
where:
- ft23XXX may be ft232RL or ft231X.
- TDI:TDO:TCK:TMS may be the pin ID (0 <= id <= 7) or string value.
allowed values are:
| value | ID |
| TXD | 0 |
| RXD | 1 |
| RTS | 2 |
| CTS | 3 |
| DTR | 4 |
| DSR | 5 |
| DCD | 6 |
| RI | 7 |
Writing to an arbitrary address in flash memory
With FPGA using an external SPI flash (xilinx, lattice ECP5/nexus/ice40, anlogic, efinix) option -o allows one to write raw binary file to an arbitrary adress in FLASH.
Detect/read/write on primary/secondary flash memories
With FPGA using two external SPI flash (some xilinx boards) option --target-flash allows to select the QSPI chip.
To detect:
openFPGALoader -b kcu105 -f --target-flash {primary,secondary} --detect
To read the primary flash memory:
openFPGALoader -b kcu105 -f --target-flash primary --dump-flash --file-size N_BYTES mydump.bin
and the second flash memory:
openFPGALoader -b kcu105 -f --target-flash secondary --dump-flash --file-size N_BYTES --secondary-bitstream mydump.bin
To write on secondary flash memory:
openFPGALoader -b kcu105 -f --target-flash secondary --secondary-bitstream mySecondaryBitstream.bin
Using an alternative directory for spiOverJtag
By setting OPENFPGALOADER_SOJ_DIR it’s possible to override default spiOverJtag bitstreams directory:
export OPENFPGALOADER_SOJ_DIR=/somewhere openFPGALoader xxxx
or
OPENFPGALOADER_SOJ_DIR=/somewhere openFPGALoader xxxx
FPGAS
| Vendor | Description | Model | Memory | Flash |
| Anlogic <#anlogic> | EG4 <https://www.anlogic.com/en/product/fpga/saleagle/eg4> | EG4D20, EG4S20 | OK | AS |
| Anlogic <#anlogic> | SALELF 2 <https://www.anlogic.com/en/product/fpga/salelf/salelf2> | EF2M45 | OK | OK |
| Cologne Chip <#colognechip> | GateMate Series <https://colognechip.com/programmable-logic/gatemate/> | CCGM1A1, CCGM1A2, CCGM1A4, CCGM1A9, CCGM1A16, CCGM1A25 | OK | OK |
| Efinix <#efinix> | Trion <https://www.efinixinc.com/products-trion.html> | T8, T13, T120 | NA | OK |
| Efinix <#efinix> | Titanium <https://www.efinixinc.com/products-titanium.html> | Ti60, Ti180 | NA | OK |
| Gowin <#gowin> | LittleBee (GW1N) <https://www.gowinsemi.com/en/product/detail/46/> | GW1N-1, GW1N-4, GW1NR-9, GW1NR-9C, GW1NS-2C, GW1NSR-4C, GW1NZ-1 | OK | IF |
| Gowin <#gowin> | Arora (GW2A) <https://www.gowinsemi.com/en/product/detail/38/> | GW2A-18C, GW2A-55 | OK | EF |
| Gowin <#gowin> | Arora V (GW5A) <https://www.gowinsemi.com/en/product/detail/60/> | GW5A-25, GW5AST-138, GW5AT-15, GW5AT-60, GW5AT-138 | OK | EF |
| Intel <#intel> | Max II(CPLD) <https://www.intel.com/content/www/us/en/support/programmable/support-resources/devices/max-ii-support.html> | EPM240T100C5N | OK | OK |
| Intel <#intel> | Cyclone II <https://www.intel.com/content/www/us/en/support/programmable/support-resources/devices/cyclone-ii-support.html> | EP2C5T144C8N | OK | OK |
| Intel <#intel> | Cyclone III <https://www.intel.com/content/www/us/en/programmable/products/fpga/cyclone-series/cyclone-iii/support.html> | EP3C16 | OK | OK |
| Intel <#intel> | Cyclone IV CE <https://www.intel.com/content/www/us/en/products/programmable/fpga/cyclone-iv/features.html> | EP4CE22, EP4CE115 | OK | OK |
| Intel <#intel> | Cyclone IV GX <https://www.intel.com/content/www/us/en/products/details/fpga/cyclone/iv/gx/products.html> | EP4CGX150 | OK | OK |
| Intel <#intel> | Cyclone V E <https://www.intel.com/content/www/us/en/products/programmable/fpga/cyclone-v.html> | 5CEA2, 5CEA5, 5CEBA4, 5CEBA9 | OK | OK |
| Intel <#intel> | Cyclone V SE SoC <https://www.intel.com/content/www/us/en/products/programmable/fpga/cyclone-v.html> | 5CSEBA6, 5CSEMA4, 5CSEMA5 | OK | NT |
| Intel <#intel> | Stratix V GS <https://www.intel.de/content/www/de/de/products/sku/210318/stratix-v-5sgsd5-fpga/specifications.html> | 5SGSD5 | OK | OK |
| Intel <#intel> | Cyclone 10 LP <https://www.intel.com/content/www/us/en/products/programmable/fpga/cyclone-10.html> | 10CL025 | OK | OK |
| Intel <#intel> | Max 10 <https://www.intel.fr/content/www/fr/fr/products/details/fpga/max/10.html> | 10M02, 10M08, 10M16, 10M25 | SVF | POF |
| Lattice <#lattice> | Certus-NX <https://www.latticesemi.com/Products/FPGAandCPLD/Certus-NX> | LFD2NX-40 | OK | OK |
| Lattice <#lattice> | CertusPro-NX <https://www.latticesemi.com/Products/FPGAandCPLD/Certus-NX> | LFCPNX-100 | OK | OK |
| Lattice <#lattice> | CrossLink-NX <https://www.latticesemi.com/en/Products/FPGAandCPLD/CrossLink-NX> | LIFCL-40 | OK | OK |
| Lattice <#lattice> | ECP3 <https://www.latticesemi.com/Products/FPGAandCPLD/LatticeECP3> | LFE3-70E | OK | OK |
| Lattice <#lattice> | ECP5 <http://www.latticesemi.com/Products/FPGAandCPLD/ECP5> | LFE5U-12, LFE5U-25, LFE5U-45, LFE5U-85, LFE5UM-25, LFE5UM-45, LFE5UM-85, LFE5UM5G-25, LFE5UM5G-45, LFE5UM5G-85 | OK | OK |
| Lattice <#lattice> | iCE40 <https://www.latticesemi.com/en/Products/FPGAandCPLD/iCE40> | HX1K, HX4K, HX8K, UP5K | OK | AS |
| Lattice <#lattice> | MachXO2 <https://www.latticesemi.com/en/Products/FPGAandCPLD/MachXO2> | 256, 640, 640U, 1200, 1200U, 2000, 2000U, 4000, 7000 | OK | OK |
| Lattice <#lattice> | MachXO3D <http://www.latticesemi.com/en/Products/FPGAandCPLD/MachXO3D.aspx> | 4300, 9400 | OK | OK |
| Lattice <#lattice> | MachXO3LF <http://www.latticesemi.com/en/Products/FPGAandCPLD/MachXO3.aspx> | 640, 1300, 2100, 4300, 6900, 9400 | OK | OK |
| Xilinx <#xilinx> | Artix 7 <https://www.xilinx.com/products/silicon-devices/fpga/artix-7.html> | xc7a25t, xc7a35ti, xc7a50t, xc7a75t, xc7a100t, xc7a200t | OK | OK |
| Xilinx <#xilinx> | Kintex 7 <https://www.xilinx.com/products/silicon-devices/fpga/kintex-7.html#productTable> | xc7k70t, xc7k160t, xc7k325t, xc7k410t, xc7k420t, xc7k480t | OK | OK |
| Xilinx <#xilinx> | Virtex 7 <https://www.xilinx.com/products/silicon-devices/fpga/virtex-7.html#productTable> | xc7v585t, xc7v2000t, xc7vx330t, xc7vx415t, xc7vx485t, xc7vx550t, xc7vx690t, xc7vx980t, xc7vx1140t, xc7vh580t, xc7vh870t | OK | OK |
| Xilinx <#xilinx> | Artix UltraScale+ <https://www.xilinx.com/products/silicon-devices/fpga/artix-ultrascale-plus.html> | xcau15p, xcau25p | OK | TBD |
| Xilinx <#xilinx> | Kintex UltraScale <https://www.xilinx.com/products/silicon-devices/fpga/kintex-ultrascale.html#productTable> | xcku035, xcku040, xcku060, xcku115 | OK | OK (primary) |
| Xilinx <#xilinx> | Kintex UltraScale+ <https://www.xilinx.com/products/silicon-devices/fpga/kintex-ultrascale-plus.html#productTable> | xcku3p, xcku5p | OK | OK |
| Xilinx <#xilinx> | Virtex 6 <https://www.xilinx.com/products/silicon-devices/fpga/virtex-6.html> | xc6vlx130t | OK | OK |
| Xilinx <#xilinx> | Virtex UltraScale <https://www.amd.com/en/products/adaptive-socs-and-fpgas/fpga/virtex-ultrascale.html#productTable> | xcvu095 | OK | TBD |
| Xilinx <#xilinx> | Virtex UltraScale+ <https://www.xilinx.com/products/silicon-devices/fpga/virtex-ultrascale-plus.html#productTable> | xcvu9p | OK | OK |
| Xilinx <#xilinx> | Spartan UltraScale+ <https://www.amd.com/en/products/adaptive-socs-and-fpgas/fpga/spartan-ultrascale-plus.html#productTable> | xcsu35p | OK | TBD |
| Xilinx <#xilinx> | Spartan 3 <https://www.xilinx.com/products/silicon-devices/fpga/spartan-3.html> | xc3s200, xc3s500e | OK | OK |
| Xilinx <#xilinx> | Spartan 6 <https://www.xilinx.com/products/silicon-devices/fpga/spartan-6.html> | xc6slx9, xc6slx16, xc6slx25, xc6slx45, xc6slx45T, xc6slx150T | OK | OK |
| Xilinx <#xilinx> | Spartan 7 <https://www.xilinx.com/products/silicon-devices/fpga/spartan-7.html> | xc7s15, xc7s25, xc7s50 | OK | OK |
| Xilinx <#xilinx> | XC9500XL <https://www.xilinx.com/support/documentation/data_sheets/ds054.pdf> | xc9536xl, xc9572xl, xc95144xl, xc95188xl | NA | OK |
| Xilinx <#xilinx> | XC2C/XA2C (coolrunner II) <https://www.xilinx.com/support/documentation/data_sheets/ds090.pdf> | xc2c32a, xa2c64a | TBD | OK |
| Xilinx <#xilinx> | XCF <https://www.xilinx.com/products/silicon-devices/configuration-memory/platform-flash.html> | xcf01s, xcf02s, xcf04s | NA | OK |
| Xilinx <#xilinx> | Zynq7000 <https://www.xilinx.com/products/silicon-devices/soc/zynq-7000.html> | xc7z010, xc7z020 | OK | NA |
| Xilinx <#xilinx> | ZynqMPSoC <https://www.xilinx.com/products/silicon-devices/soc/zynq-ultrascale-mpsoc.html> | xczu2cg, xczu9eg, xczu11eg, xczu17eg | OK | NA |
- AS: Active Serial flash mode
- EF: External Flash
- IF: Internal Flash
- NA: Not Available
- NT: Not Tested
BOARDS
Note:
openFPGALoader -b arty bitstream.bit # Loading in SRAM (volatile) openFPGALoader -b arty -f bitstream.bit # Writing in flash (non-volatile)
| Board name | Description | FPGA | Memory | Flash | Constraints |
| ac701 | Xilinx Artix-7 FPGA AC701 Evaluation Kit <https://www.xilinx.com/products/boards-and-kits/ek-a7-ac701-g.html> | Artix xc7a200tfbg676 | OK | NT | AC701 ➚ |
| acornCle215 | Acorn CLE 215+ <http://squirrelsresearch.com/acorn-cle-215> | Artix xc7a200tsbg484 | OK | OK | |
| alinx_ax7201 | AX7201 FPGA Dev Board & Kit with AMD Artix 7 <https://www.en.alinx.com/Product/FPGA-Development-Boards/Artix-7/AX7201.html> | Artix xc7a200tsbg484 | OK | OK | |
| alinx_ax7203 | AX7203 FPGA Dev Board & Kit with AMD Artix 7 <https://www.en.alinx.com/Product/FPGA-Development-Boards/Artix-7/AX7203.html> | Artix xc7a200tfbg484 | OK | OK | |
| litex-acorn-baseboard-mini | The LiteX-Acorn-Baseboards are baseboards developed around the SQRL’s Acorn board (or Nite/LiteFury) <https://github.com/enjoy-digital/litex-acorn-baseboard/> | Artix xc7a200tsbg484 | OK | OK | |
| alchitry_au | Alchitry Au <https://alchitry.com/products/alchitry-au-fpga-development-board> | Artix xc7a35tftg256 | OK | OK | |
| alchitry_au_plus | Alchitry Au+ (Plus) <https://www.sparkfun.com/products/17514> | Artix xc7a100tftg256 | OK | OK | |
| alinx_ax516 | ALINX AX516 <https://www.alinx.com/en/detail/281> | Spartan6 xc6slx16csg324 | OK | OK | |
| alinx_ax7101 | ALINX AX/7101 <https://alinx.com/en/detail/494> | Artix xc7a100tfgg484 | OK | OK | |
| alinx_ax7102 | ALINX AX/7102 <https://alinx.com/en/detail/493> | Artix xc7a100tfgg484 | OK | OK | |
| analogMax | Trenz TEI0010 - AnalogMax <https://wiki.trenz-electronic.de/display/PD/TEI0010+-+AnalogMax> | Max 10 10M08SAU169C8G | SVF | SVF | |
| antmicro_ddr4_tester | Antmicro Data Center DRAM Tester <https://opensource.antmicro.com/projects/data-center-dram-tester> | Kintex7 xc7k160t | OK | OK | |
| antmicro_ddr5_tester | Antmicro DDR5 Tester <https://opensource.antmicro.com/projects/ddr5-tester> | Kintex7 xc7k160t | OK | OK | |
| antmicro_lpddr4_tester | Antmicro LPDDR4 Test Board <https://opensource.antmicro.com/projects/lpddr4-test-board> | Kintex7 xc7k70t | OK | OK | |
| arty_a7_35t | Digilent Arty A7 <https://reference.digilentinc.com/reference/programmable-logic/arty-a7/start> | Artix xc7a35ticsg324 | OK | OK | Arty-A7-35T ➚ |
| arty_a7_100t | Digilent Arty A7 <https://reference.digilentinc.com/reference/programmable-logic/arty-a7/start> | Artix xc7a100tcsg324 | OK | OK | Arty-A7-100T ➚ |
| arty_s7_25 | Digilent Arty S7 <https://reference.digilentinc.com/reference/programmable-logic/arty-s7/start> | Spartan7 xc7s25csga324 | OK | OK | Arty-S7-25 ➚ |
| arty_s7_50 | Digilent Arty S7 <https://reference.digilentinc.com/reference/programmable-logic/arty-s7/start> | Spartan7 xc7s50csga324 | OK | OK | Arty-S7-50 ➚ |
| arty_z7_10 | Digilent Arty S7 <https://reference.digilentinc.com/reference/programmable-logic/arty-z7/start> | Zynq7000 xc7z010csg400 | OK | NA | |
| arty_z7_20 | Digilent Arty S7 <https://reference.digilentinc.com/reference/programmable-logic/arty-z7/start> | Zynq7000 xc7z020csg400 | OK | NA | |
| arty | Digilent Analog Discovery 2 <https://reference.digilentinc.com/test-and-measurement/analog-discovery-2/start> | Spartan6 xc6slx25 | OK | NT | |
| arty | Digilent Digital Discovery <https://reference.digilentinc.com/test-and-measurement/digital-discovery/start> | Spartan6 xc6slx25 | OK | NT | |
| axu2cga | Alinx AXU2CGA Zynq MPSoC Dev Board <http://www.alinx.com/en/index.php/default/content/101.html> | ZynqMPSoC XCZU2CG | OK | NA | |
| basys3 | Digilent Basys3 <https://reference.digilentinc.com/reference/programmable-logic/basys-3/start> | Artix xc7a35tcpg236 | OK | OK | |
| cmod_s7 | Digilent Cmod S7 <https://https://digilent.com/reference/programmable-logic/cmod-s7/start> | Spartan7 xc7s25csga225 | NA | OK | |
| gatemate_evb_jtag | Cologne Chip GateMate FPGA Evaluation Board (JTAG mode) <https://colognechip.com/programmable-logic/gatemate-evaluation-board/> | Cologne Chip GateMate Series | OK | OK | |
| gatemate_evb_spi | Cologne Chip GateMate FPGA Evaluation Board (SPI mode) <https://colognechip.com/programmable-logic/gatemate-evaluation-board/> | Cologne Chip GateMate Series | OK | OK | |
| gatemate_pgm_spi | Cologne Chip GateMate FPGA Programmer (SPI mode) <https://colognechip.com/programmable-logic/gatemate/> | Cologne Chip GateMate Series | OK | OK | |
| certusnx_versa_evn | Certus-NX Versa Evaluation Board <https://www.latticesemi.com/products/developmentboardsandkits/certuspro-nx-versa-board> | Certus LFD2NX-40 | OK | OK | |
| certuspronx_evn | CertusPro-NX Evaluation Board <https://www.latticesemi.com/products/developmentboardsandkits/certuspro-nxevaluationboard> | CertusPro-NX LFCPNX-100 | OK | OK | |
| certuspronx_versa_evn | CertusPro-NX Versa <https://www.latticesemi.com/products/developmentboardsandkits/certuspro-nx-versa-board> | CertusPro-NX LFCPNX-100 | OK | OK | |
| cmoda7_15t | Digilent CmodA7 <https://digilent.com/reference/programmable-logic/cmod-a7/start> | Artix xc7a15tcpg236 | OK | OK | |
| cmoda7_35t | Digilent CmodA7 <https://digilent.com/reference/programmable-logic/cmod-a7/start> | Artix xc7a35tcpg236 | OK | OK | |
| colorlight | Colorlight 5A-75B (version 7) <https://fr.aliexpress.com/item/32281130824.html> | ECP5 LFE5U-25F-6BG256C | OK | OK | |
| colorlight-i5 | Colorlight I5 <https://www.colorlight-led.com/product/colorlight-i5-led-display-receiver-card.html> | ECP5 LFE5U-25F-6BG381C | OK | OK | Colorlight-i5-v7.0 ➚ |
| colorlight-i9 | Colorlight I9 <https://www.colorlightinside.com/Products/i%20Receiving-series/34_101.html> | ECP5 LFE5U-45F-6BG381C | OK | OK | Colorlight-i9-v7.2 ➚ |
| colorlight-i9+ | Colorlight I9+ <https://www.colorlight-led.tech/colorlight-i9-2/> | Artix xc7a50tfgg484 | OK | OK | |
| crosslinknx_evn | Lattice CrossLink-NX Evaluation Board <https://www.latticesemi.com/en/Products/DevelopmentBoardsAndKits/CrossLink-NXEvaluationBoard> | Nexus LIFCL-40 | OK | OK | |
| cyc1000 | Trenz cyc1000 <https://shop.trenz-electronic.de/en/TEI0003-02-CYC1000-with-Cyclone-10-FPGA-8-MByte-SDRAM> | Cyclone 10 LP 10CL025YU256C8G | OK | OK | |
| cyc5000 | Trenz CYC5000 <https://shop.trenz-electronic.de/en/TEI0050-01-AAH13A-CYC5000-with-Cyclone-V-FPGA-25kLE-8-MByte-SDRAM> | Cyclone V 5CEBA2U15C8 | OK | OK | |
| c10lp-refkit | Trenz c10lp-refkit <https://shop.trenz-electronic.de/en/TEI0009-02-055-8CA-Cyclone-10-LP-RefKit-10CL055-Development-Board-32-MByte-SDRAM-16-MByte-Flash> | Cyclone 10 LP 10CL055YU484C8G | OK | OK | |
| c5g | Terasic C5G (Cyclone V GX Starter Kit) <https://www.terasic.com.tw/cgi-bin/page/archive.pl?No=830> | Cyclone V GX 5CGXFC5C6F27C7N | OK | NT | |
| de0 | Terasic DE0 <https://www.terasic.com.tw/cgi-bin/page/archive.pl?No=364> | Cyclone III EP3C16F484C6 | OK | NT | |
| de0nano | Terasic de0nano <https://www.terasic.com.tw/cgi-bin/page/archive.pl?No=593> | Cyclone IV E EP4CE22F17C6 | OK | OK | |
| de0nanoSoc | Terasic de0nanoSoc <https://www.terasic.com.tw/cgi-bin/page/archive.pl?Language=English&CategoryNo=205&No=941> | Cyclone V SoC 5CSEMA4U23C6 | OK | ||
| de10lite | Terasic de10lite <https://www.terasic.com.tw/cgi-bin/page/archive.pl?Language=English&CategoryNo=218&No=1021&PartNo=1> | MAX 10 10M50DAF484C7G | OK | ||
| de10nano | Terasic de10Nano <https://www.terasic.com.tw/cgi-bin/page/archive.pl?Language=English&CategoryNo=205&No=1046> | Cyclone V SoC 5CSEBA6U23I7 | OK | ||
| de1Soc | Terasic DE1-SoC <https://www.terasic.com.tw/cgi-bin/page/archive.pl?Language=English&CategoryNo=167&No=836> | Cyclone V SoC 5CSEMA5F31C6 | OK | ||
| deca | Arrow/Terasic DECA <https://www.terasic.com.tw/cgi-bin/page/archive.pl?Language=English&CategoryNo=&No=944&PartNo=1> | MAX 10 10M50DAF484C6GES | OK | ||
| dragonL | KNJN Dragon-L PCI Express & HDMI FPGA board <https://www.knjn.com/FPGA-Dragon-L.html> | Spartan6 xc6slx25Tcsg324 | OK | OK | |
| ecp5_evn | Lattice ECP5 5G Evaluation Board <https://www.latticesemi.com/en/Products/DevelopmentBoardsAndKits/ECP5EvaluationBoard> | ECP5G LFE5UM5G-85F | OK | OK | ECP5-EVN ➚ |
| ecpix5 | LambdaConcept ECPIX-5 (FT2232) <https://shop.lambdaconcept.com/home/46-2-ecpix-5.html#/2-ecpix_5_fpga-ecpix_5_85f> | ECP5 LFE5UM5G-85F | OK | OK | ECPIX-5-45F ➚ ECPIX-5-85F ➚ |
| ecpix5_r03 | LambdaConcept ECPIX-5 (FT4232) <https://shop.lambdaconcept.com/home/46-2-ecpix-5.html#/2-ecpix_5_fpga-ecpix_5_85f> | ECP5 LFE5UM5G-85F | OK | OK | ECPIX-5-45F ➚ ECPIX-5-85F ➚ |
| fireant | Fireant Trion T8 <https://www.crowdsupply.com/jungle-elec/fireant> | Trion T8F81 | NA | AS | |
| fomu | Fomu PVT <https://tomu.im/fomu.html> | iCE40UltraPlus UP5K | NA | OK | Fomu-PVT ➚ |
| gr740-mini | GR740-MINI <https://gaisler.com/index.php/products/boards/gr740-mini> | CertusPro-NX LFCPNX-100 | OK | NA | |
| hyvision_opt01 | HyVision PCIe OPT01 rev.F <NA> | Kintex7 xc7k70tfbg676 | OK | OK | |
| honeycomb | honeycomb <https://github.com/Disasm/honeycomb-pcb> | littleBee GW1NS-2C | OK | IF | |
| hseda-xc6slx16 | XILINX SPARTAN6 XC6SLX16 Microblaze SDRAM USB2.0 FPGA <http://hseda.com/product/xilinx/XC6SLX16/XC6SLX16.htm> | Spartan6 xc6slx16-ftg256 | OK | OK | |
| ice40_generic | iCEBreaker <https://1bitsquared.com/collections/fpga/products/icebreaker> | iCE40UltraPlus UP5K | NA | AS | iCEBreaker ➚ |
| icebreaker-bitsy | iCEBreaker-bitsy <https://1bitsquared.com/collections/fpga/products/icebreaker-bitsy> | iCE40UltraPlus UP5K | NA | OK | iCEBreaker-bitsy-v0 ➚ iCEBreaker-bitsy-v1 ➚ |
| ice40_generic | icestick <https://www.latticesemi.com/icestick> | iCE40 HX1k | NA | AS | IceStick ➚ |
| ice40_generic | iCE40-HX8K <https://www.latticesemi.com/Products/DevelopmentBoardsAndKits/iCE40HX8KBreakoutBoard.aspx> | iCE40 HX8k | OK | AS | iCE40-HX8K ➚ |
| ice40_generic | Olimex iCE40HX1K-EVB <https://www.olimex.com/Products/FPGA/iCE40/iCE40HX1K-EVB/open-source-hardware> | iCE40 HX1k | NT | AS | iCE40HX1K-EVB ➚ |
| ice40_generic | Olimex iCE40HX8K-EVB <https://www.olimex.com/Products/FPGA/iCE40/iCE40HX8K-EVB/open-source-hardware> | iCE40 HX8k | NT | AS | iCE40HX8K-EVB ➚ |
| ice40_generic | iCE40 UltraPlus Breakout Board (iCE40UP5K-B-EVN) <https://www.latticesemi.com/Products/DevelopmentBoardsAndKits/iCE40UltraPlusBreakoutBoard> | iCE40-UP5K | NT | AS | iCE40-UP ➚ |
| ice40_generic | Icezum Alhambra II <https://alhambrabits.com/alhambra> | iCE40 HX4k | NT | AS | IceZumAlhambraII ➚ |
| icepi-zero | Icepi Zero <https://github.com/cheyao/icepi-zero> | ECP5 LFE5U | OK | OK | |
| kc705 | Xilinx KC705 <https://www.xilinx.com/products/boards-and-kits/ek-k7-kc705-g.html> | Kintex7 xc7k325t | OK | NT | KC705 ➚ |
| kcu105 | Xilinx KCU105 <https://www.xilinx.com/products/boards-and-kits/kcu105.html> | Kintex UltraScale xcku040-ffva1156 | OK | OK (primary and secondary) | |
| kcu116 | Xilinx KCU116 <https://www.xilinx.com/products/boards-and-kits/kcu116.html> | Kintex UltraScale+ xcku5p-ffvb676 | OK | OK | |
| LD-KONFEKT | Lone Dynamics Corporation - Machdyne Konfekt computer <https://machdyne.com/product/konfekt-computer/> | ECP5 LFE5U-12F-6BG256C | OK | OK | |
| LD-SCHOKO | Lone Dynamics Corporation - Machdyne Schoko computer <https://machdyne.com/product/schoko-computer/> | ECP5 LFE5U-45F-6CABGA256 | OK | OK | |
| licheeTang | Sipeed Lichee Tang <https://tang.sipeed.com/en/hardware-overview/lichee-tang/> | eagle s20 EG4S20BG256 | OK | OK | |
| lilygo-t-fpga | Lilygo T-FPGA <https://www.lilygo.cc/products/t-fpga> | Gowin GW1NSR-LV4CQN48PC6/15 | OK | OK | |
| machXO2EVN | Lattice MachXO2 Breakout Board Evaluation Kit <https://www.latticesemi.com/products/developmentboardsandkits/machxo2breakoutboard> | MachXO2 LCMXO2-7000HE | OK | OK | |
| machXO3EVN | Lattice MachXO3D Development Board <https://www.latticesemi.com/products/developmentboardsandkits/machxo3d_development_board> | MachXO3D LCMXO3D-9400HC | OK | NT | |
| machXO3SK | Lattice MachXO3LF Starter Kit <https://www.latticesemi.com/en/Products/DevelopmentBoardsAndKits/MachXO3LFStarterKit> | MachXO3 LCMX03LF-6900C | OK | OK | |
| mlk-s200-eg4d20 | MILIANKE S200 EG4D20 Development Board <https://www.milianke.com/product-item-108.html> | eagle s20 EG4D20EG176 | OK | OK | |
| mini_itx | Avnet Mini-ITX Base Kit <https://www.avnet.com/wps/portal/us/products/avnet-boards/avnet-board-families/mini-itx/> | AMD Xilinx XC7Z045/XC7Z100-2FFG900 | OK | NA | |
| mimas_a7 | Numato Systems Mimas A7 <https://numato.com/product/mimas-a7-artix-7-fpga-development-board/> | Artix xc7a50tfgg484 | OK | OK | |
| nexys_a7_50 | Digilent Nexys A7(Nexys 4 DDR) <https://digilent.com/reference/programmable-logic/nexys-a7/start> | Artix xc7a50tcsg324 | OK | OK | Nexys4DDR ➚ |
| nexys_a7_100 | Digilent Nexys A7(Nexys 4 DDR) <https://digilent.com/reference/programmable-logic/nexys-a7/start> | Artix nexys_a7_100 | OK | OK | Nexys4DDR ➚ |
| nexysVideo | Digilent Nexys Video <https://reference.digilentinc.com/reference/programmable-logic/nexys-video/start> | Artix xc7a200tsbg484 | OK | OK | |
| xem8320 | Opal Kelly XEM8320 <https://opalkelly.com/products/xem8320/> | Artix UltraScale+ xcau25p-2ffvb676e | OK | TBD | |
| olimex_gatemateevb | Olimex CCGMA1 Cologne Chip GateMate FPGA Evaluation Board <https://www.olimex.com/Products/FPGA/GateMate/GateMateA1-EVB/open-source-hardware> | Cologne Chip GateMate Series (GM1A1) | OK | NT | |
| opensourceSDRLabKintex7 | Open Source SDR Lab Kintex-7 325t FPGA PCIE Development Board <https://opensourcesdrlab.com/products/fpga-xilinx-kintex-7-xc7k325t-pcie-development-board-with-dual-gigabit-ethernet-ports-dual-10-gigabit-sfp-optical-communication> | Kintex7 xc7k325tffg676 | OK | OK | |
| orbtrace_dfu | ORBTrace mini (dfu mode) <https://store.zyp.no/product/orbtrace-mini> | ECP5 LFE5U-25F-8BG256C | NA | OK (DFU) | |
| orangeCrab | Orange Crab <https://github.com/gregdavill/OrangeCrab> | ECP5 LFE5U-25F-8MG285C | OK (JTAG) | OK (DFU) | OrangeCrab-r0.2 ➚ |
| papilio_one | Papilio One <https://papilio.cc/index.php?n=Papilio.PapilioOne> | Spartan3E xc3s500e-vq100 | OK | OK | |
| pipistrello | Saanlima Pipistrello LX45 <http://pipistrello.saanlima.com/index.php?title=Welcome_to_Pipistrello> | Spartan6 xc6slx45-csg324 | OK | OK | |
| pynq_z1 | PYNQ-Z1 <https://digilent.com/reference/programmable-logic/pynq-z1/start> | Zynq7000 xc7z020clg400 | OK | NA | |
| pynq_z2 | PYNQ-Z2 <https://www.tulembedded.com/FPGA/ProductsPYNQ-Z2.html> | Zynq7000 xc7z020clg400 | OK | NA | |
| qmtechCyclone10 | QMTech Cyclone 10 Starter Kit <http://www.chinaqmtech.com/productinfo/1858435.html> | Cyclone 10 LP 10CL016YU484C8G | OK | OK | |
| qmtechCycloneIV | QMTech CycloneIV Core Board <https://fr.aliexpress.com/item/32949281189.html> | Cyclone IV EP4CE15F23C8N | OK | OK | |
| qmtechCycloneV | QMTech CycloneV Core Board <https://fr.aliexpress.com/i/1000006622149.html> | Cyclone V 5CEFA2F23I7 | OK | OK | |
| qmtechCycloneV_5ce523 | QMTech CycloneV Core Board <https://fr.aliexpress.com/item/1005001782703399.html> | Cyclone V 5CEFA5F23I7 | OK | OK | |
| qmtechKintex7 | QMTech Kintex7 Core Board <https://www.aliexpress.com/item/1005003668804223.html> | Kintex xc7k325tffg676 | OK | OK | |
| genesys2 | Digilent Kintex7 Evaluation Board <https://digilent.com/reference/programmable-logic/genesys-2/start> | Kintex xc7k325tffg900 | OK | OK | |
| redpitaya14 | Redpitaya/STEMlab xc7z7010 with 125MHz 14 bits ADC <https://redpitaya.com/stemlab-125-14/> | Zynq7000 xc7z010clg400 | OK | NA | |
| runber | SeeedStudio Gowin RUNBER <https://www.seeedstudio.com/Gowin-RUNBER-Development-Board-p-4779.html> | littleBee GW1N-4 | OK | IF/EF | |
| runber | Scarab Hardware MiniSpartan6+ <https://www.kickstarter.com/projects/1812459948/minispartan6-a-powerful-fpga-board-and-easy-to-use> | Spartan6 xc6slx25-3-ftg256 | OK | NT | |
| spartanEdgeAccelBoard | SeeedStudio Spartan Edge Accelerator Board <http://wiki.seeedstudio.com/Spartan-Edge-Accelerator-Board> | Spartan7 xc7s15ftgb196 | OK | NA | |
| SPEC45 | CERN Simple PCIe FMC carrier SPEC <https://ohwr.org/project/spec150/wikis/home> | Spartan6 xc6slx45Tfgg484 | OK | OK | |
| SPEC150 | CERN Simple PCIe FMC carrier SPEC <https://ohwr.org/project/spec150/wikis/home> | Spartan6 xc6slx150Tfgg484 | OK | OK | |
| stlv7325 | Sitlinv STLV7325 Board <https://www.aliexpress.com/item/1005001275162791.html> | Kintex xc7k325tffg676 | OK | OK | |
| tangconsole | Sipeed Tang Console (dock board for Tang Mega 60k or 138k SOM) <https://wiki.sipeed.com/hardware/en/tang/tang-console/mega-console.html> | Gowin Arora V GW5AT-60 / GW5AT-138 | OK | OK | |
| tangnano | Sipeed Tang Nano <https://tangnano.sipeed.com/en/> | littleBee GW1N-1 | OK | ||
| tangnano1k | Sipeed Tang Nano 1K <https://tangnano.sipeed.com/en/> | littleBee GW1NZ-1 | OK | IF | |
| tangnano4k | Sipeed Tang Nano 4K <https://tangnano.sipeed.com/en/> | littleBee GW1NSR-4C | OK | IF/EF | |
| tangnano9k | Sipeed Tang Nano 9K <https://tangnano.sipeed.com/en/> | littleBee GW1NR-9C | OK | IF/EF | |
| tangnano20k | Sipeed Tang Nano 20k <https://wiki.sipeed.com/nano20k> | Gowin Arora GW2A(R)-18(C) | OK | EF | |
| tangprimer20k | Sipeed Tang Primer 20k <https://wiki.sipeed.com/en/primer20k> | Gowin Arora GW2A(R)-18(C) | OK | EF | |
| tangprimer25k | Sipeed Tang Primer 25k <https://wiki.sipeed.com/hardware/zh/tang/tang-primer-25k/primer-25k.html> | Gowin Arora V GW5A-25A (GW5A-LV25MG121) | OK | TBD | |
| tangmega138k | Sipeed Tang Mega 138k <https://wiki.sipeed.com/hardware/zh/tang/tang-mega-138k/mega-138k.html> | Gowin Arora V GW5AST-138B (GW5AST-LV138FPG676A) | OK | TBD | |
| te0712_8 | Trenz Electronic TE0712 FPGA-Module mit AMD Artix™ 7(TE0712) <https://shop.trenz-electronic.de/en/TE0712-03-81I36-A-FPGA-Module-with-AMD-Artix-7-XC7A200T-1FBG484I-1-GByte-DDR3-4-x-5-cm> | XC7A200TFBG484 | OK | OK | |
| tec0117 | Trenz Gowin LittleBee (TEC0117) <https://shop.trenz-electronic.de/en/TEC0117-01-FPGA-Module-with-GOWIN-LittleBee-and-8-MByte-internal-SDRAM> | littleBee GW1NR-9 | OK | IF | |
| trion_t20_bga256_jtag | Efinix Trion T20 BGA256 Dev Kit <https://www.efinixinc.com/products-devkits-triont20.html> | Trion T20BGA256 | OK | NT | |
| tec0330 | PCIe FMC Carrier with Xilinx Virtex-7 FPGA (TEC0330) <https://shop.trenz-electronic.de//TEC0330-05-PCIe-FMC-Carrier-with-Xilinx-Virtex-7-FPGA-8-Lane-PCIe-GEN2-SODIMM-SDRAM> | XC7VX330T-2FFG1157C | OK | OK | |
| trion_t120_bga576 | Efinix Trion T120 BGA576 Dev Kit (SPI mode) <https://www.efinixinc.com/products-devkits-triont120bga576.html> | Trion T120BGA576 | NA | AS | |
| trion_t120_bga576_jtag | Efinix Trion T120 BGA576 Dev Kit (JTAG mode) <https://www.efinixinc.com/products-devkits-triont120bga576.html> | Trion T120BGA576 | OK | OK | |
| trion_ti60_f225 | Efinix Titanium F225 Dev Kit (SPI mode) <https://www.efinixinc.com/products-devkits-titaniumti60f225.html> | Titanium Ti60F225 | NA | AS | |
| trion_ti60_f225_jtag | Efinix Titanium F225 Dev Kit (JTAG mode) <https://www.efinixinc.com/products-devkits-titaniumti60f225.html> | Titanium Ti60F225 | OK | OK | |
| ulx3s | Radiona ULX3S <https://radiona.org/ulx3s/> | ECP5 LFE5U | OK | OK | ULX3S-12F ➚ ULX3S-25F ➚ ULX3S-45F ➚ ULX3S-85F ➚ |
| ulx3s_dfu | Radiona ULX3S DFU mode <https://github.com/emard/had2019-playground> | ECP5 LFE5U | NA | OK | |
| ulx4m_dfu | Radiona ULX4M LD/LS DFU mode <https://github.com/intergalaktik/ulx4m-ls> | ECP5 LFE5U | NA | OK | |
| vec_v6 | Xilinx VCU118 <https://vmm-srs.docs.cern.ch/> | xc6vlx130tff784 | OK | OK | |
| vc709 | AMD Virtex-7 FPGA VC709 Connectivity Kit <https://www.xilinx.com/products/boards-and-kits/dk-v7-vc709-g.html> | Virtex7 xc7vx690tffg1761 | OK | NA | |
| vcu108 | Xilinx VCU108 <https://www.xilinx.com/products/boards-and-kits/vcu108.html> | Virtex UltraScale xcvu095-ffva2104 | OK | TBD | |
| vcu118 | Xilinx VCU118 <https://www.xilinx.com/products/boards-and-kits/vcu118.html> | Virtex UltraScale+ xcvu9p-flga2104 | OK | OK | |
| vcu128 | Xilinx VCU128 <https://www.xilinx.com/products/boards-and-kits/vcu128.html> | Virtex UltraScale+ xcvu37p-fsvh2892 | OK | OK | |
| vcu1525 | AMD Virtex UltraScale+ FPGA VCU1525 Acceleration Development Kit <https://www.xilinx.com/products/boards-and-kits/vcu1525-a.html> | Virtex UltraScale+ xcvu9p-fsgd2104 | OK | NT | |
| xtrx | FairWaves XTRXPro <https://www.crowdsupply.com/fairwaves/xtrx> | Artix xc7a50tcpg236 | OK | OK | |
| xyloni_spi | Efinix Xyloni <https://www.efinixinc.com/products-devkits-xyloni.html> | Trion T8F81 | NA | AS | |
| usrpx300 | Ettus Research USRP X300 <https://www.ettus.com/all-products/x300-kit/> | Kintex xc7k325tffg900 | OK | NA | |
| usrpx310 | Ettus Research USRP X300 <https://www.ettus.com/all-products/x310-kit/> | Kintex xc7k410tffg900 | OK | NA | |
| xmf3 | PLDkit XMF3 <https://pldkit.com/xilinx/xmf3> | Xilinx xc3s200ft256, xcf01s | OK | OK | |
| ypcb003381p1 | YPCB-00338-1P1 Kintex-7 Accelerator Card <https://www.tiferking.cn/index.php/2024/12/19/650/> | Kintex7 xc7k480tffg1156 | OK | OK. BPI parallel NOR flash (MT28GU512AAA1EGC) | |
| zc702 | Xilinx ZC702 <https://www.xilinx.com/products/boards-and-kits/ek-z7-zc702-g.html> | zynq7000 xc7z020clg484 | OK | NA | |
| zc706 | Xilinx ZC706 <https://www.xilinx.com/products/boards-and-kits/ek-z7-zc706-g.html> | zynq7000 xc7z045ffg900 | OK | NA | ZC706 ➚ |
| zcu102 | Xilinx ZCU102 <https://www.xilinx.com/products/boards-and-kits/ek-u1-zcu102-g.html> | zynqMPSoC XCZU9EG | OK | NA | |
| zcu106 | Xilinx ZCU106 <https://www.xilinx.com/products/boards-and-kits/zcu106.html> | zynqMPSoC XCZU7EV | OK | NA | |
| zedboard | Avnet ZedBoard <https://www.avnet.com/wps/portal/us/products/avnet-boards/avnet-board-families/zedboard/> | zynq7000 xc7z020clg484 | OK | NA | ZedBoard ➚ |
| zybo_z7_10 | Digilent Zybo Z7-10 <https://reference.digilentinc.com/reference/programmable-logic/zybo-z7/start> | zynq7000 xc7z010clg400 | OK | NA | |
| zybo_z7_20 | Digilent Zybo Z7-20 <https://reference.digilentinc.com/reference/programmable-logic/zybo-z7/start> | zynq7000 xc7z020clg400 | OK | NA | |
| VMM3 | CERN board with VMM3 <https://vmm-srs.docs.cern.ch/> | xc7s50csga324? | OK | OK | |
| efinix_jtag_ft2232 | Efinix FT2232 development boards with JTAG on port 2 (Ti180J484 EVK, etc) <https://www.efinixinc.com/products-devkits-titaniumti180j484.html> | Titanium Ti180J484 (and others) | OK | NA | |
| step-max10_v1 | STEP MAX10 V1 <https://wiki.stepfpga.com/step-max10> | Altera 10M02SCM153C8G | OK | NA | |
| step-mxo2_v2 | STEP MXO2 V2 <https://wiki.stepfpga.com/xo2-4000hc> | Lattice LCMXO2-4000HC-4MG132CC | OK | OK |
- AS: Active Serial flash mode
- EF: External Flash
- IF: Internal Flash
- NA: Not Available
- NT: Not Tested
CABLES
| keyword | Name | Description |
| anlogicCable | anlogic JTAG adapter <https://github.com/AnlogicInfo/anlogic-usbjtag> | JTAG adapter firmware for stm32 |
| arm-usb-ocd-h | Olimex ARM-USB-OCD-H adapter <https://www.olimex.com/Products/ARM/JTAG/ARM-USB-OCD-H/> | High-speed 3-IN-1 fast USB ARM JTAG, USB-to-RS232 virtual port and power supply 5VDC device |
| arm-usb-tiny-h | Olimex ARM-USB-TINY-H adapter <https://www.olimex.com/Products/ARM/JTAG/ARM-USB-TINY-H/> | Low-cost high-speed ARM USB JTAG |
| bus_blaster | Dangerousprototypes Bus Blaster <http://dangerousprototypes.com/docs/Bus_Blaster> | Jtag adapter based on ft2232 |
| bus_blaster_b | Dangerousprototypes Bus Blaster <http://dangerousprototypes.com/docs/Bus_Blaster> | Jtag adapter based on ft2232 (interface B) |
| ch347_jtag | ch347 JTAG adapter <https://www.wch-ic.com/products/CH347.html> | QinHeng Electronics USB To UART+JTAG (mode 3) |
| ch552_jtag | ch552 JTAG adapter <https://github.com/diodep/ch55x_jtag> | Tang Nano USB-JTAG interface. FT2232C clone firmware for CH552 microcontroler |
| cmsisdap | ARM CMSIS DAP protocol interface <https://os.mbed.com/docs/mbed-os/v6.11/debug-test/daplink.html> | ARM CMSIS DAP protocol interface (hid only) |
| gatemate_pgm | gatemate pgm <https://colognechip.com/programmable-logic/gatemate/> | Cologne Chip GateMate FPGA Programmer. FT232H-based JTAG/SPI programmer cable |
| gatemate_evb_jtag | gatemate evb JTAG <https://colognechip.com/programmable-logic/gatemate/> | Cologne Chip GateMate JTAG programmer |
| gatemate_evb_spi | gatemate evb spi <https://colognechip.com/programmable-logic/gatemate/> | Cologne Chip GateMate SPI programmer |
| gwu2x | gwu2x <https://www.gowinsemi.com/en/product/detail/55/> | Gowin GWUX2X |
| dfu | DFU interface <http://www.usb.org/developers/docs/devclass_docs/DFU_1.1.pdf> | DFU (Device Firmware Upgrade) USB device compatible with DFU protocol |
| digilent | digilent cable | FT2232 JTAG / UART cable |
| diglent_b | digilent cable | digilent FT2232 JTAG / UART cable (interface B) |
| digilent_hs2 | digilent hs2 cable <https://store.digilentinc.com/jtag-hs2-programming-cable/> | FT232H JTAG programmer cable from digilent |
| digilent_hs3 | digilent hs3 <https://digilent.com/shop/jtag-hs3-programming-cable/> | JTAG programmer cable from digilent |
| dirtyJtag | dirty Jtag <https://github.com/jeanthom/DirtyJTAG> | JTAG probe firmware for STM32F1 |
| efinix_spi_ft4232 | efinix SPI (ft4232) | efinix SPI interface (FTDI4232 interface A) |
| efinix_jtag_ft4232 | efinix JTAG (ft4232) | efinix JTAG interface (FTDI4232 interface B) |
| efinix_spi_ft2232 | efinix SPI (ft2232) | efinix SPI interface (FTDI2232 interface A) |
| efinix_jtag_ft2232 | efinix JTAG (ft2232) | efinix JTAG interface (FTDI2232 interface B) |
| ft2232 | FT2232 C/D/H | generic programmer cable based on Ftdi FT2232 (interface A) |
| ft2232 | Tang Nano (1k, 4k, 8k) USB-JTAG interface <https://github.com/sipeed/RV-Debugger-BL702> | USB-JTAG/UART debugger based on BL702 microcontroler. |
| ft2232 | Sipeed RV-Debugger-BL702 <https://github.com/sipeed/RV-Debugger-BL702> | RV-Debugger-BL702 is an opensource project that implement a JTAG+UART debugger with BL702C-A0. |
| ft2232 | honeycomb USB-JTAG interface. <https://github.com/Disasm/f042-ftdi> | FT2232C clone based on STM32F042 microcontroler |
| ft2232_b | FT2232 C/D/H | generic programmer cable based on Ftdi FT2232 (interface B) |
| ft231X | FT231X <https://www.ftdichip.com/old2020/Products/ICs/FT231X.html> | generic USB<->UART converters in bitbang mode (with some limitations and workaround) |
| ft232 | FT232H <https://ftdichip.com/products/ft232hl/> | generic programmer cable based on Ftdi FT232Hx. One interface, MPSSE capable |
| ft232RL | FT232RL <https://ftdichip.com/products/ft232rl/> | generic USB<->UART converters in bitbang mode (with some limitations and workaround) |
| ft4232 | FT4232 <https://ftdichip.com/products/ft4232h-56q/> | quad interface programmer cable. MPSSE capable. |
| ft4232hp | FT4232HP (interface A) <https://ftdichip.com/wp-content/uploads/2023/02/DS_FT4233HP.pdf> | quad interface programmer cable. MPSSE capable. High Speed USB Bridge with Type-C/PD3.0 Controller |
| ft4232hp_b | FT4232HP (interface B) <https://ftdichip.com/wp-content/uploads/2023/02/DS_FT4233HP.pdf> | quad interface programmer cable. MPSSE capable. High Speed USB Bridge with Type-C/PD3.0 Controller |
| ecpix5-debug | ecpix5-debug <https://shop.lambdaconcept.com/home/46-ecpix-5.html> | LambdaConcept ECPIX5 (45k/85k) UART/JTAG interface |
| jlink | jlink <https://www.segger.com/products/debug-probes/j-link> | SEGGER J-Link Debug Probes |
| jlink | jlink_base | SEGGER J-Link BASE Debug Probes |
| jlink | jtrace_pro | SEGGER J-Trace PRO Debug Probes |
| jtag-smt2-nc | jtag-smt2-nc <https://digilent.com/shop/jtag-smt2-nc-surface-mount-programming-module> | JTAG-SMT2-NC Surface-mount Programming Module |
| lpc-link2 | lpc-link2 <https://www.nxp.com/design/microcontrollers-developer-resources/lpc-link2:OM13054> | LPC-Link2 (OM13054) cmsisDAP firmware |
| numato | numato | Embedded cable for Numato Systems Mimas-A7 board |
| orbtrace | orbtrace interface <https://github.com/orbcode/orbtrace> | Open source FPGA-based debug and trace interface |
| papilio | papilio <https://papilio.cc/> | Papilio FPGA Platform |
| steppenprobe | steppenprobe <https://github.com/diegoherranz/steppenprobe> | Open Source Hardware JTAG/SWD/UART/SWO interface board based on FTDI FT2232H |
| remote-bitgang | OpenOCD remote bitbang <https://github.com/openocd-org/openocd/blob/master/doc/manual/jtag/drivers/remote_bitbang.txt> | The remote_bitbang JTAG driver is used to drive JTAG from a remote (TCP) process |
| tigard | tigard <https://www.crowdsupply.com/securinghw/tigard> | SWD/JTAG/UART/SPI programmer based on Ftdi FT2232HQ |
| usb-blaster | intel USB Blaster I interface | JTAG programmer cable from intel/altera (FT245 + EPM7064) |
| usb-blasterII | intel USB Blaster II interface <https://www.intel.com/content/dam/www/programmable/us/en/pdfs/literature/ug/ug_usb_blstr_ii_cable.pdf> | JTAG programmer cable from intel/altera (EZ-USB FX2 + EPM570) |
| usb-blasterIII | intel USB Blaster III interface <https://www.intel.com/content/dam/www/programmable/us/en/pdfs/literature/ug/ug_usb_blstr_ii_cable.pdf> | JTAG programmer cable from intel/altera (FTDI2232 with custom VID/PID) |
| xvc-client | Xilinx Virtual Cable <https://github.com/Xilinx/XilinxVirtualCable> | Xilinx Virtual Cable (XVC) is a TCP/IP-based protocol that acts like a JTAG cable. |
| xvc-server | Xilinx Virtual Cable (server side) <https://github.com/Xilinx/XilinxVirtualCable> | Xilinx Virtual Cable (XVC) is a TCP/IP-based protocol that acts like a JTAG cable. |
| libgpiod | Bitbang GPIO <https://git.kernel.org/pub/scm/libs/libgpiod/libgpiod.git/> | Bitbang GPIO pins on Linux host. |
| jetson-nano-gpio | Bitbang GPIO <https://github.com/jwatte/jetson-gpio-example> | Bitbang GPIO pins on Jetson Nano Linux host. Use /dev/mem to have a faster clock. |
| ch347 | CH347 <https://github.com/wuxx/USB-HS-Bridge> | CH347 is a USB HS bus converter with UART, I2C, SPI and JTAG interfaces |
ANLOGIC NOTES
Sipeed Lichee Tang
For this target, openFPGALoader supports svf and bit.
bit file load (memory)
openFPGALoader -m -b licheeTang /somewhere/project/prj/*.bit
Since -m is the default, this argument is optional.
bit file load (spi flash)
openFPGALoader -f -b licheeTang /somewhere/project/prj/*.bit
svf file load
It’s possible to produce this file by using TD:
- Tools->Device Chain
- Add your bit file
- Option : Create svf
or by using prjtang project <https://github.com/mmicko/prjtang>:
mkdir build cd build cmake ../ make
Now a file called tangbit is present in current directory and has to be used as follows:
tangbit --input /somewhere.bit --svf bitstream.svf
openFPGALoader -b licheeTang /somewhere/*.svf
COLOGNE CHIP NOTES
Supported Boards/Cables
- GateMate Evaluation Board using board parameters -b gatemate_evb_jtag or -b gatemate_evb_spi
- GateMate Programmer using cable parameter -c gatemate_pgm
Programming Modes
Supported configuration files are bitfiles *.bit and it’s ASCII equivalents *.cfg.
JTAG Configuration
Performs an active hardware reset and writes the configuration into the FPGA latches via JTAG. The configuration mode pins CFG_MD[3:0] must be set to 0xC (JTAG).
- 1.
- Program using Evaluation Board:
openFPGALoader -b gatemate_evb_jtag <bitfile>.cfg.bit
- 2.
- Program using Programmer Cable:
openFPGALoader -c gatemate_pgm <bitfile>.cfg.bit
SPI Configuration
Performs an active hardware reset and writes the configuration into the FPGA latches via SPI. The configuration mode pins CFG_MD[3:0] must be set to 0x4 (SPI passive).
- 1.
- Program using Evaluation Board:
openFPGALoader -b gatemate_evb_spi <bitfile>.cfg.bit
- 2.
- Program using Programmer Cable:
openFPGALoader -b gatemate_pgm_spi <bitfile>.cfg.bit
JTAG Flash Access
It is possible to access external flashes via the internal JTAG-SPI-bypass. The configuration mode pins CFG_MD[3:0] must be set to 0xC (JTAG). Note that the FPGA will not start automatically.
- 1.
- Write to flash using Evaluation Board:
openFPGALoader -b gatemate_evb_jtag <bitfile>.cfg.bit
- 2.
- Write to flash using Programmer Cable:
openFPGALoader -c gatemate_pgm -f <bitfile>.cfg.bit
The offset parameter can be used to store data at any point in the flash, e.g.:
openFPGALoader -b gatemate_evb_jtag -o <offset> <bitfile>.cfg.bit
SPI Flash Access
If the programming device and FPGA share the same SPI signals, it is possible to hold the FPGA in reset and write data to the flash. The configuration mode can be set as desired. If the FPGA should start from the external memory after reset, the configuration mode pins CFG_MD[3:0] set to 0x0 (SPI active).
- 1.
- Write to flash using Evaluation Board:
openFPGALoader -b gatemate_evb_spi -f <bitfile>.cfg.bit
- 2.
- Write to flash using Programmer Cable:
openFPGALoader -b gatemate_pgm_spi -f <bitfile>.cfg.bit
The offset parameter can be used to store data at any point in the flash, e.g.:
openFPGALoader -b gatemate_evb_spi -o <offset> <bitfile>.cfg.bit
EFINIX NOTES
Firant and Xyloni boards (efinix trion T8)
.hex file is the default format generated by Efinity IDE, so nothing special must be done to generates this file.
openFPGALoader supports only active mode (SPI) (JTAG is WIP).
hex file load
openFPGALoader -b fireant /somewhere/project/outflow/*.hex
or, for xyloni board
openFPGALoader -b xyloni_spi /somewhere/project/outflow/*.hex
Since openFPGALoader access the flash directly in SPI mode the -b fireant, -b xyloni_spi is required (no autodetection possible).
Trion and Titanium JTAG usage
openFPGALoader supports loading to RAM and SPI Flash with JTAG
Tested with J-Link BASE
bin file load
openFPGALoader --cable jlink_base -m /somewhere/project/outflow/*.bin
hex file flash
Example for ti60f225. NOTE: JTAG chains with more than one device (eg –index-chain) are currently not supported for writing to SPI flash
openFPGALoader --cable jlink_base --fpga-part ti60f225 -f /somewhere/project/outflow/*.hex
GOWIN NOTES
GOWIN GW1N
Note:
- Trenz TEC0117
- Sipeed Tang Nano
- Sipeed Tang Nano 4K
- Honeycomb
- RUNBER
.fs file is the default format generated by Gowin IDE, so nothing special must be done to generates this file.
Since the same file is used for SRAM and Flash a CLI argument is used to specify the destination.
Flash SRAM
with -m:
openFPGALoader -m -b BOARD_NAME impl/pnr/*.fs
where BOARD_NAME is:
- tec0117
- tangnano
- tangnano1k
- tangnano4k
- tangnano9k
- tangnano20k
- tangprimer20k
- runber
Flash
Attention:
with -f, file load:
openFPGALoader -f -b BOARD_NAME impl/pnr/*.fs
where BOARD_NAME is:
- tec0117
- runber
It’s possible to flash external SPI Flash (connected to MSPI) in bscan mode by using --external-flash instead of -f.
Note:
User Flash
Attention:
Gowin FPGA come with extra flash space that can be read and written from the programmable logic (“User Flash”). This flash section can also be programmed via the JTAG interface:
openFPGALoader --write-flash /path/to/bitstream.fs --user-flash /path/to/flash.bin
INTEL NOTES
Intel/Altera
Note:
- CYC1000
- C10LP-RefKit
- DE0
- de0nano
Loading a bitstream
SVF and RBF files are supported.
sof to svf generation:
quartus_cpf -c -q 12.0MHz -g 3.3 -n p project_name.sof project_name.svf
sof to rbf generation:
quartus_cpf --option=bitstream_compression=off -c project_name.sof project_name.rbf
Warning:
You can have Quartus automatically generate SVF and RBF files by adding these lines to the qsf file, or include them in a tcl file in FuseSoC
set_global_assignment -name ON_CHIP_BITSTREAM_DECOMPRESSION OFF set_global_assignment -name GENERATE_RBF_FILE ON set_global_assignment -name GENERATE_SVF_FILE ON
file load:
openFPGALoader -b boardname project_name.svf # or openFPGALoader -b boardname project_name.rbf
with boardname = de0, cyc1000, c10lp-refkit, de0nano, de0nanoSoc or qmtechCycloneV.
SPI flash
RPD and RBF are supported. POF is only supported for MAX10 (internal flash).
pof to rpd:
quartus_cpf -c project_name.pof project_name.rpd
sof to rpd:
# CYC1000 quartus_cpf -o auto_create_rpd=on -c -d EPCQ16A -s 10CL025YU256C8G project_name.svf project_name.jic # C10LP-RefKit quartus_cpf -o auto_create_rpd=on -c -d EPCQ16A -s 10CL055YU484C8G project_name.svf project_name.jic
file load:
openFPGALoader -b boardname -r project_name_auto.rpd # or openFPGALoader -b boardname -r project_name.rbf
with boardname = cyc1000, c10lp-refkit.
MAX10: FPGA Programming Guide
Supported Boards:
- step-max10_v1
- analogMax
Supported File Types:
- svf
- pof
- bin (arbitrary binary files)
Internal Flash Organization
The internal flash is divided into five sections:
- UFM1 and UFM0 for user data
- CFM2, CFM1, and CFM0 for storing one or two bitstreams
[image: max10 internal flash memory structure] [image]
Flash usage depends on the configuration mode. In all modes:
- CFM0 is used to store a bitstream
- UFM0 and UFM1 are available for user data
- The remaining CFMx sections (CFM1, CFM2) can be used for additional bitstreams or user data
Using svf
This method is the simplest (and slowest) way to load or write a bitstream.
Note:
openFPGALoader [-b boardname] -c cablename the_svf_file.svf
Parameters:
- boardname: One of the boards supported by openFPGALoader (optional).
- cablename: One of the supported cables (see --list-cables).
Using pof
To write a bitstream into the internal flash, using a pof file is the fastest approach.
openFPGALoader [-b boardname] [--flash-sector] -c cablename the_pof_file.pof
Parameters:
- boardname: A board supported by openFPGALoader (optional).
- cablename: One of the supported cables (see --list-cables).
- --flash-sector: Optional. Comma-separated list of sectors to update. If omitted, the entire flash is erased and reprogrammed.
Accepted Flash Sectors:
- UFM0, UFM1: User Flash Memory sections.
- CFM0, CFM1, CFM2: Configuration Flash Memory sectors.
Example:
openFPGALoader -c usb-blaster --flash-sector UFM1,CFM0,CFM2 the_pof_file.pof
This command updates UFM1, CFM0, and CFM2, leaving all other sectors unchanged.
Using an arbitrary binary file
Unlike Altera Quartus, it supports any binary format without limitations (not limited to a .bin). With this feature, it's not required to provides the file at gateware build time: it may be updated at any time without gateware modification/rebuild.
Note:
Basic usage:
openFPGALoader [-b boardname] -c cablename [--offset $OFFSET] the_bin_file.bin
- boardname: a boards supported by openFPGALoader (optional).
- cablename: One of the supported cables (see --list-cables).
- $OFFSET: To start writing $OFFSET bytes after User Flash memory start address (optional, default: 0x00).
This command erases and writes the contents of the_bin_file.bin into UFM1 and UFM0. If --offset is specified, the binary content is written starting from that offset.
Depending on the max10 configuration mode (see picture), it's possible to extend User Flash Memory area by using CFM2 and CFM1. This is not the default behavior and user must explictly change this by using --flash-sector argument:
- --flash-sector UFMx or --flash-sector CFMy (with x= 1 or 0 and y = 2 or 1) to specify only one sector
- --flash-sector UFM1,UFM0 is equivalent to the default behavior
- --flash-sector UFM1,CFM2 to erase and update UFM1, UFM0 and CFM2 (equivalent to --flash-sector UFM1,UFM0,CFM2)
Intel/Altera (Old Boards)
Note:
- Cyclone II (FPGA) (Tested OK: EP2C5T144C8N)
- Max II (CPLD) (Tested OK: EPM240T100C5N)
Loading a Serial Vector Format (.svf)
SVF files are supported.
To load the file:
openFPGALoader -c usb-blaster project_name.svf
LATTICE NOTES
MachXO2/MachXO3
Flash memory
.jed file is the default format generated by Lattice Diamond, so nothing special must be done to generates this file.
File load:
openFPGALoader [-b yourboard] [--flash-sector CFG0] impl1/*.jed
where yourboard may be:
- machX02EVN
- machX03EVN
- machXO3SK
and where --flash-sector CFG0 is needed for the MachXO3D Breakout Board.
.bit may also be used for machXO2
SRAM
To generates .bit file Bitstream file must be checked under Exports Files in Lattice Diamond left panel.
File load:
openFPGALoader [-b yourboard] impl1/*.bit
where yourboard may be:
- machX02EVN
- machX03EVN
- machXO3SK
iCE40
.bin is the default format generated by nextpnr, so nothing special must be done.
Since most ice40 boards uses the same pinout between FTDI and SPI flash a generic ice40_generic board is provided.
For the specific case of the iCE40HXXK-EVB where no onboard programmer is present, please use this:
| FTDI | iCE40HXXK-EVB |
| SI (ADBUS1) | Pin 8 |
| SCK (ADBUS0) | Pin 9 |
| SO (ADBUS2) | Pin 7 |
| CS (ABDUS4) | Pin 10 |
| RST (ADBUS6 | Pin 6 |
| DONE (ADBUS7) | Pin 5 |
Bin file load:
openFPGALoader -b ice40_generic /somewhere/*.bin
Since it's a direct access to the flash (SPI) the -b option is required.
ECP5/ECP3/Certus-NX/CertusPro-NX/Crosslink-NX
SRAM
openFPGALoader [-b yourBoard] [-c yourCable] -m project_name/*.bit
Hint:
SPI Flash
Note:
BIT:
openFPGALoader [-b yourBoard] [-c yourCable] -f project_name/*.bit # or *.bin
MCS:
To generate .mcs file PROM File must be checked under Exports Files in Lattice Diamond left panel.
openFPGALoader [-b yourBoard] [-c yourCable] project_name/*.mcs
XILINX NOTES
To simplify further explanations, we consider the project is generated in the current directory.
Note:
- 1.
- Spartan Edge Accelerator Board has only pinheader, so the cable must be provided
- 2.
- A JTAG <-> SPI bridge (used to write bitstream in FLASH) is available for some device, see spiOverJtag <https://github.com/trabucayre/openFPGALoader/blob/master/spiOverJtag> to check if your model is supported.
- 3.
- Board provides the device/package model, but if the targeted board is not officially supported but the FPGA yes, you can use --fpga-part to provide the model.
- 4.
- With spartan3, the flash is an independent JTAG device. User has to use --index-chain to access FPGA (RAM only) or flash (write/read only).
Warning:
.bit file is the default format generated by vivado, so nothing special task must be done to generate this bitstream.
.bin is not, by default, produced. To have access to this file you need to configure the tool:
- GUI: Tools -> Settings -> Bitstreams -> check -bin_file.
- TCL: append your TCL file with set_property STEPS.WRITE_BITSTREAM.ARGS.BIN_FILE true [get_runs impl_1].
Warning:
Warning:
Loading a bitstream
.bit and .bin are allowed to be loaded in memory.
File load:
openFPGALoader [-m] -b arty *.runs/impl_1/*.bit (or *.bin)
or
openFPGALoader [-m] -b spartanEdgeAccelBoard -c digilent_hs2 *.runs/impl_1/*.bit (or *.bin)
SPI flash
Note:
.mcs must be generated through Vivado with a tcl script like:
Warning:
set project [lindex $argv 0]
set bitfile "${project}.runs/impl_1/${project}.bit"
set mcsfile "${project}.runs/impl_1/${project}.mcs"
write_cfgmem -format mcs -interface spix4 -size 16 \
-loadbit "up 0x0 $bitfile" -loaddata "" \
-file $mcsfile -force
Note:
The tcl script is used with:
vivado -nolog -nojournal -mode batch -source script.tcl -tclargs myproject
File load:
openFPGALoader [--fpga-part xxxx] -f -b arty *.runs/impl_1/*.mcs (or .bit / .bin)
Note:
Note:
Some boards with UltraScale FPGAs, like the VCU118 and KCU16, support the SPIx8 (Dual Quad SPI) configuration. In this case, the spix8 option write_cfgmem on the above example can be used to generate two .mcs files, to fit bigger designs or for faster programming. Only .mcs files can be used to program the FPGA in this case.
In this case, to load the two .mcs files:
openFPGALoader --board vcu118 -f --target-flash both --bitstream *.runs/impl_1/*_primary.mcs --secondary-bitstream *.runs/impl_1/*_secondary.mcs
On these boards, each SPI flash can be programmed independently with the --target-flash option. The default target is the primary flash.
For example, to program only the secondary flash with arbitrary data not related to FPGA configuration:
openFPGALoader --board vcu118 -f --target-flash secondary --bitstream arbitrary_data
TO DO
Global
- improve error message (be more precise)
- catch all exception
- documentation (code + API)
Cable
- fix ch552 (Sipeed tangNano): works with SRAM, fails with Flash
- busblaster support
- anlogic cable support
Devices/boards
- improve frequency configuration. Use FPGA, cable or –freq args maximum frequency
- rework cyclone10 eeprom access to avoid using FT2232 interfaceB Spi emulation (only supported by trenz board)
- fix checksum computation with gowin GW2A
- add support for tangPrimer (anlogic EG4S20)
Misc
- •
- fix spiFlash class to be able to write everywhere (currently offset is hardcoded to 0)
Author
Gwenhael Goavec-Merou and contributors
Copyright
2019-2022, Gwenhael Goavec-Merou and contributors
| March 12, 2026 | latest |
