Command Reference
v80-smi is the command-line system management interface for AMD Alveo V80
boards. Running v80-smi with no subcommand prints usage help.
Device Addressing
Several commands accept a -d/--device option that takes a BDF
(Bus:Device.Function) address. The following formats are supported:
Format |
Example |
|---|---|
|
|
|
|
|
|
|
|
Commands
version
Print the v80-smi version and exit.
v80-smi version [-p|--plain]
- -p, --plain
Print only the version in
x.y.zformat with no prefix. Useful for scripting.
list
Enumerate V80 boards visible on the system and report their readiness status.
v80-smi list [-j|--json] [-J|--pretty-json] [-l|--long] [-s|--sensors]
- -j, --json
Output as compact JSON.
- -J, --pretty-json
Output as indented JSON.
- -l, --long
Include additional information (PCI IDs, driver status).
- -s, --sensors
Include sensor readings (temperature, power). Requires the vrtd daemon to be running.
inspect
Display metadata from a vrtbin file on disk without programming it onto a device.
v80-smi inspect <vbin> [-j|--json] [-J|--pretty-json]
- vbin
Path to the vrtbin file. Required.
- -j, --json
Output as compact JSON.
- -J, --pretty-json
Output as indented JSON.
query
Display the metadata of the vrtbin currently loaded on a device.
v80-smi query -d <BDF> [-j|--json] [-J|--pretty-json]
- -d, --device <BDF>
Board address. Required.
- -j, --json
Output as compact JSON.
- -J, --pretty-json
Output as indented JSON.
program
Load a vrtbin file onto a device, programming the FPGA.
v80-smi program <vbin> -d <BDF>
- vbin
Path to the vrtbin file. Required.
- -d, --device <BDF>
Board address. Required.
reset
Perform a hardware reset of a V80 board. This executes a full PCIe secondary bus reset and rescan (hotplug) sequence.
v80-smi reset -d <BDF> [--shell-type <service|compute>]
- -d, --device <BDF>
Board address. Required.
- --shell-type <service|compute>
Shell to boot after reset.
serviceselects boot partition 0 andcomputeselects boot partition 1. Defaults toservice.
write-static-shell
Write the installed static SLASH shell PDI to a V80 board.
v80-smi write-static-shell --flash -d <BDF> [--pdi <file>]
v80-smi write-static-shell --jtag -d <BDF> [--pdi <file>] [--xsdb-target-id <id>] [--bash-source <file> ...]
v80-smi write-static-shell --jtag --no-remove-device [--pdi <file>] [--xsdb-target-id <id>] [--bash-source <file> ...]
Modes:
--flashresolvesamd_v80_gen5x8_25.1.pdiviapython3 -m slashkit static-shell-pathand programs it through the VRTD cfgmem programming command.--jtagresolvesamd_v80_gen5x8_25.1_nofpt.pdithe same way, optionally sources Vivado/Vitis setup scripts, and runsxsdbwith the installedversal_flash_pdi.tclscript.--pdibypasses static-shell path resolution for active development. The file must match the selected mode: use a flash-image PDI with--flashand a no-FPT/JTAG-bootable PDI with--jtag.
- --flash
Program the flash-image PDI via VRTD cfgmem programming.
- --jtag
Program the no-FPT PDI over JTAG via
xsdb.
- -d, --device <BDF>
Board address. Required except with
--jtag --no-remove-device.
- --pdi <file>
Use this PDI file instead of resolving the installed static shell PDI.
- --no-remove-device
Skip the pre-JTAG PCIe device removal. Valid only with
--jtag. PCIe rescan still runs afterxsdb.
- --xsdb-target-id <id>
Select the
Versal xcv80XSDBtarget_id. Valid only with--jtag.
- --bash-source <file>
Source a shell setup script before running
xsdb. May be repeated and is valid only with--jtag.
In JTAG mode, v80-smi removes all V80 PCIe functions through VRTD unless
--no-remove-device is used, runs /bin/bash -c 'source ...; xsdb ...'
with PDI_PATH set to the selected PDI, optionally sets V80_TARGET_ID
from --xsdb-target-id, and always asks VRTD to rescan PCIe after
the xsdb step completes. Since default PDI resolution uses
python3 -m slashkit, setting PYTHONPATH can select an in-repo
slashkit.
Progress is printed to stderr. Flash mode polls VRTD for cfgmem job status and
prints phase changes plus interval-based PDI download progress. JTAG mode prints
local stages such as PCIe removal, xsdb execution, and PCIe rescan.
validate
Run memory integrity and bandwidth tests against a board’s HBM and DDR
subsystems. For each memory path, bandwidth is reported as single-direction
C2H read, single-direction H2C write, and simultaneous bidirectional
throughput (read, write, and total). After the per-memory phases, a final
parallel phase drives HBM and DDR simultaneously with 2 * N buffers for
single-direction tests and 4 * N threads for bidirectional tests; this
phase is skipped when --ddr-only or --hbm-only is given.
v80-smi validate -d <BDF> [-j|--threads <N>] [-R|--no-reset] [--mm-channel <spec>] [--buffer-size <size>] [--offset <size>] [--starting-offset <size>] [--raw-transfer-test | --use-qdma-driver] [--ddr-only | --hbm-only] [--channel-allocation <auto|paired>] [--channel-region-stride <size>] [--ring-size-index <0-15>] [--bandwidth-iterations <N>] [--bandwidth-duration <seconds>]
Requirements by mode:
Default mode uses VRTD buffers, requires a running VRTD daemon, and resets the board unless
--no-resetis given.--raw-transfer-testbypasses VRTD for transfers and requires the SLASH QDMA driver device node for the board. It skips reset.--use-qdma-driverbypasses both VRTD and SLASH for transfers and requires the stockqdma-pfdriver to be bound to the board’s QDMA PF. This backend is built only whenSMI_ENABLE_QDMA_DRIVER_BACKENDis enabled at CMake configure time.
- -d, --device <BDF>
Board address. Required.
- -j, --threads <N>
Number of parallel buffers/threads for the validation test (1–64, default 8). Bidirectional phases use
2 * Nlogical positions in each enabled memory space.
- --buffer-size <size>
Size of each test buffer. Values may be bare bytes or use
k/Korm/Msuffixes. The default and maximum are512M. Values must be 4 KiB-aligned.
- --offset <size>
Distance between logical buffer positions. The default is
512M. Values may be bare bytes or usek/Korm/Msuffixes, must be 4 KiB-aligned, and must be at least--buffer-sizeso buffers do not overlap.
- --starting-offset <size>
Offset from each memory-space base for logical position 0. The default is
0. Values may be bare bytes or usek/Korm/Msuffixes and must be 4 KiB-aligned.
Buffers are placed at memory_base + starting_offset + position * offset.
Single-direction phases use positions 0..N-1. Bidirectional phases use
positions 0..2N-1 with reads on even positions and writes on odd positions.
The full range must remain inside the 64 x 512 MB DDR/HBM address space. If any
placement option is specified in default VRTD mode, validate uses raw VRTD
buffers so the exact addresses are honored; this requires raw memory access
permission.
The largest phase maps up to 4 * N * buffer-size of host buffers when both
HBM and DDR are enabled, or 2 * N * buffer-size with --ddr-only or
--hbm-only; the command fails early if that exceeds currently available
host memory.
- -R, --no-reset
Skip the device reset step before running memory tests.
- --mm-channel <spec>
AXI-MM / NoC channel selection for each buffer’s QDMA queue pair, in every mode.
specis either a single value applied to all buffers, or a comma-separated list giving one channel per logical buffer position (exactly2 x --threadsentries; there is no repeating/wrap, and any other length is an error):auto(the default) lets the driver stripe queues across both channels byqid & 1.0/1pin the queue to that AXI-MM channel (and hence NoC channel).e.g. with
-j 1the list0,1puts buffer position 0 on channel 0 and position 1 on channel 1. Bidirectional phases use positions0..2N-1; single-direction phases use the firstNentries.
This is independent of
--channel-allocation(which controls the device address):--mm-channelcontrols the host-side NoC ingress (NMU) per queue. With--use-qdma-driverthe selection maps to the stock driver’s per-queue MM-channel attribute.
- --raw-transfer-test
Use libslash raw QDMA transfers instead of VRTD buffers. This mode implies
--no-resetand requires the SLASH QDMA driver device to be present.
- --use-qdma-driver
Run the raw transfer test over the off-the-shelf Xilinx QDMA driver (
/dev/qdma<idx>-MM-<qid>) instead of SLASH. smi provisions the queues itself: it raises the function’sqmaxvia sysfs if needed, creates and starts bidirectional AXI-MM queue pairs over generic netlink (the samexnl_pfinterfacedma-ctluses), then transfers over the per-queue char devices. Queue pairs are spread round-robin across the function’s MM engine channels (channel = qid % mm_channel_max); the CPM5 QDMA on the V80 exposes two, so the test exercises both. This mode implies--no-resetand is mutually exclusive with--raw-transfer-test. It requires the stockqdma-pfdriver to be bound to the board’s PF (it cannot be bound at the same time as the SLASH driver), and typically requires root to raiseqmaxand open the queue devices.
- --ddr-only
Run only the DDR memory tests and skip the HBM phase. Mutually exclusive with
--hbm-only.
- --hbm-only
Run only the HBM memory tests and skip the DDR phase. Mutually exclusive with
--ddr-only.
- --channel-allocation <auto|paired>
Raw-transfer-only (
--raw-transfer-testor--use-qdma-driver) control over how QDMA MM/NoC channels map onto device memory. On CPM5 the host-side NoC ingress port (NMU) is chosen per queue by the SW-context mm-channel/host_id (SLASH usesqid & 1), while the memory-side NoC egress endpoint (NSU / pseudo-channel) is chosen by the device address. Defaultautokeeps the historical behaviour: channelqid & 1with linear addressing, so both NMUs can converge on a single NSU and bandwidth caps at one path.pairedcouples the two: even positions land in memory region 0 on channel 0, odd positions in region 1 on channel 1 (one--channel-region-strideapart), giving two independent NMU->NSU paths. This mirrors the off-the-shelfdma-perfoffset_ch0/offset_ch1knobs and is the placement that lets both NoC ports contribute bandwidth.
- --channel-region-stride <size>
In
--channel-allocation pairedmode, the byte distance between the two per-channel memory regions (the NSU / pseudo-channel stride). Default16G(== half the per-memory address space, matching the dma-perf HBMoffset_ch1 - offset_ch0spacing). Must be a non-zero multiple of 4 KiB. Accepts bare bytes ork/K,m/M,g/Gsuffixes.
- --ring-size-index <0-15>
Raw-transfer-only (
--raw-transfer-testor--use-qdma-driver). Override the QDMA descriptor-ring size index used when creating SLASH raw queue pairs or starting stock-driver queues. When omitted, each backend keeps its existing default. Useful A/B values for 4 KiB descriptor throughput are0,11,13, and15.
- --bandwidth-iterations <N>
Raw-transfer-only (
--raw-transfer-testor--use-qdma-driver). Repeat each whole-buffer transfer in every bandwidth phaseNtimes and report bandwidth over the sustained loop. The default is1, which preserves the historical one-shot measurement.
- --bandwidth-duration <seconds>
Raw-transfer-only duration mode. When non-zero, each bandwidth phase repeats whole-buffer transfers until the requested wall-clock duration has elapsed and counts only completed transfers. This is useful for comparing SLASH’s raw path against long-running tools such as
dma-perf. A value of0uses--bandwidth-iterationsinstead.
debug
Low-level troubleshooting commands.
debug bar-poke
Read or write BAR words.
v80-smi debug bar-poke -d <BDF> -b <BAR> (-r|--read | -w|--write) [-x|--hex] [-W|--word-size <N>] [-c|--count <N>] <address> [value]
- -d, --device <BDF>
Board address. Required.
- -b, --bar <BAR>
BAR number (0-5). Required.
- -r, --read
Read mode.
- -w, --write
Write mode.
- -x, --hex
Print read output in hexadecimal.
- -W, --word-size <N>
Access width in bytes: 1, 2, 4, or 8 (default 4).
- -c, --count <N>
Number of words to read (default 1; must be 1 for write).
Rules:
Exactly one of
--reador--writemust be provided.valueis required for write and forbidden for read.addressis a BAR-relative byte offset.
debug mem-poke
Read or write device memory at a raw physical address. This bypasses the allocator and requires raw-mem-access permission in vrtd.
v80-smi debug mem-poke -d <BDF> (-r|--read | -w|--write) [-x|--hex] [-W|--word-size <N>] [-c|--count <N>] <address> [value] [-f|--file <path>]
- -d, --device <BDF>
Board address. Required.
- -r, --read
Read mode.
- -w, --write
Write mode.
- -x, --hex
Hex mode.
Read-to-stdout: prints values in hexadecimal.
With
--file: treats file payload as hex text/hexdump format.
- -W, --word-size <N>
Access width in bytes: 1, 2, 4, or 8 (default 4).
- -c, --count <N>
Number of words to transfer (default 1).
- -f, --file <path>
File mode transfer path.
In read mode: destination file.
In write mode: source file.
Rules:
Exactly one of
--reador--writemust be provided.addressis a device physical address.word-sizemust be 1, 2, 4, or 8.countmust be greater than zero.Scalar mode (no
--file): - write requiresvalueand forcescount == 1- read forbidsvalue- address must be aligned to word-sizeFile mode (
--filepresent): -valueis forbidden - transfer size is exactlyword-size * countbytes - with--hexfile is text hex/hexdump; without--hexfile is raw binary
debug clockwiz
Read or set clock rate for a device clock region using vrtd clock-op.
v80-smi debug clockwiz -d <BDF> (--get | --set <rate_hz>) [--region <user|service>] [-x|--hex]
- -d, --device <BDF>
Board address. Required.
- --get
Read current clock rate for selected region.
- --set <rate_hz>
Set requested clock rate in Hz for selected region.
- --region <user|service>
Clock region selector (default:
user).
- -x, --hex
Print
--getoutput in hexadecimal.
Rules:
Exactly one of
--getor--setmust be provided.--setvalue is in Hz and must be greater than zero.--hexis valid only with--get.--setprints requested and achieved frequencies.