Skip to content

XPCU cable driver deployment

This page documents the host USB driver packages built from the xsession/xilinx-usb-driver submodule (externals/xilinx-usb-driver), which openFPGALoader's Windows release embeds. It covers vendor ID 03fd and product IDs 0013/000d (before firmware loading) and 0008 (after the cable re-enumerates).

Note The canonical source of truth lives in the submodule (externals/xilinx-usb-driver/DEPLOYMENT.md). This copy is kept with the other XPCU field notes so the documentation site is self-contained.

Build all packages with Docker

From externals/xilinx-usb-driver, run sh ./docker-build.sh. On Windows PowerShell, run .\docker-build.ps1.

The build creates dist/xilinx-platform-cable-{linux,windows,macos}.zip and SHA-256 files. Docker builds the Linux i686/x86_64 iMPACT compatibility libraries and the x86/x64 Windows libwdi helper. Host installation is kept out of containers because containers cannot change Windows/macOS host drivers or Linux host udev policy.

Linux

Extract the Linux ZIP and run sudo ./install.sh. Reconnect the cable, then:

openFPGALoader --cable xilinxPlatformCableUsb --detect

The libraries under lib/ are only for legacy Xilinx ISE/iMPACT. Select the directory matching the ISE process architecture and preload it, for example:

LD_PRELOAD="$PWD/lib/x86_64/libusb-driver.so" impact

Firmware (xusb_xp2.hex or xusb_emb.hex) remains Xilinx software and is not redistributed. Give openFPGALoader the file with --probe-firmware, set OPENFPGALOADER_XUSB_FIRMWARE, or use firmware installed with ISE/Vivado.

Windows

Extract the Windows ZIP, open PowerShell as Administrator, and run:

.\install.ps1
.\detect.ps1

The installer binds WinUSB to all three XPCU identities using the Docker-built libwdi helper. This intentionally replaces the vendor driver for these device IDs. Reinstall the AMD/Xilinx cable driver from Vivado if vendor applications later require it.

The Windows build uses the reliable USB control-transfer JTAG path by default. The accelerated 0xA6 path can be tested explicitly by setting OPENFPGALOADER_XPCU_ACCELERATED=1; some XPCU firmware/WinUSB combinations stall endpoint zero when that command is used.

For bootloader, driver-binding, firmware-reload, and JTAG-chain symptoms, see cable driver troubleshooting. The complete hardware debug record is in the Windows debug report.

macOS

Extract the macOS ZIP and run ./install.sh. macOS needs libusb and a libusb-enabled openFPGALoader build; it does not use a separately installed XPCU kernel driver. The helper detects the cable and installs Homebrew libusb when Homebrew is available.

Container USB limitation

The produced files are intended for native host use. Linux can pass the cable to a container with an explicit /dev/bus/usb mapping, but the cable disconnects and re-enumerates while firmware loads, so mapping the entire USB bus is usually required. Docker Desktop on Windows and macOS does not provide equivalent transparent USB passthrough; run openFPGALoader on those hosts.