vrtbin Format
A vrtbin (.vbin) file is the deployment artefact in SLASH. It packages
everything needed to program and interact with a V80 design into a single
archive.
Overview
A vrtbin is a gzip-compressed tar archive produced by the SLASH linker
(slashkit) via the add_vbin() CMake function. VRT extracts the archive
at runtime when you construct a vrt::Device.
┌───────────────────────────────┐
│ .vbin file │ gzip-compressed tar
├───────────────────────────────┤
│ system_map.xml │ always present — design metadata
│ *.pdi │ hardware only — FPGA bitstream(s)
│ vpp_emu │ emulation only — C-model executable
│ emu_manifest.json │ emulation only — argument routing
│ vpp_sim │ simulation only — simulator launcher
│ report_utilization.xml │ optional — FPGA resource usage
└───────────────────────────────┘
Archive Contents
File |
Present |
Purpose |
|---|---|---|
|
Always |
Design metadata: platform, clock frequency, kernel descriptions, register maps, memory connections, and streaming connections. |
|
Hardware |
FPGA bitstream file(s). If multiple PDI files exist, VRT prefers
|
|
Emulation |
Compiled C-model executable of the HLS kernels. |
|
Emulation |
Maps kernel arguments to emulation call types (scalar, buffer) and routing for register read-back. |
|
Simulation |
Verilog simulator wrapper executable. |
|
Optional |
FPGA resource utilisation report (LUTs, FFs, BRAMs, URAMs, DSPs). |
system_map.xml
The system_map.xml file is the most important entry in the archive. It
drives VRT’s runtime behaviour — kernel discovery, argument routing, memory
port mapping, and platform detection all come from this file.
Schema
<SystemMap>
<Platform>Hardware</Platform>
<ShellType>service</ShellType>
<ClockFrequency>250000000</ClockFrequency>
<ServiceLayer>
<Ethernet enabled="true">
<eth index="0" />
</Ethernet>
<VIRT>
<interface index="0" connection="eth0" />
</VIRT>
</ServiceLayer>
<Kernel>
<Name>increment_0</Name>
<BaseAddress>0x20100000000</BaseAddress>
<Range>0x1000</Range>
<register offset="0x00" name="CTRL" access="RW"
description="Control register" range="32" />
<register offset="0x10" name="size" access="W"
description="Number of elements" range="32" />
<functional_args>
<arg idx="0" name="size" type="scalar"
offset="0x10" range="32" r="0" w="1" />
<arg idx="1" name="in" type="buffer"
offset="0x18" range="64" r="1" w="1"
port="m_axi_gmem0" />
</functional_args>
<connection port="m_axi_gmem0" target="HBM1" />
</Kernel>
</SystemMap>
Key elements:
<Platform>One of
Hardware,Emulation, orSimulation. VRT maps this to thevrt::Platformenum and selects the appropriate back-end.<ShellType>Hardware shell required by the design. Hardware vbins use
serviceorcompute. VRT passes this tovrtdbefore programming so the daemon can reset the board to the matching boot partition when needed. Legacy vbins without this element are treated asservice.<ClockFrequency>Kernel clock frequency in Hz (e.g.
250000000for 250 MHz).<Kernel>One block per kernel instance. Contains the instance name, base address, register definitions, functional argument metadata, and memory port connections.
<functional_args>Each
<arg>describes a kernel argument: index, name, type (scalarorbuffer), register offset, range in bits, read/write flags, and the associated AXI port name (for buffer arguments).<connection>Maps an AXI memory-mapped port to a physical memory target (e.g.
HBM1,DDR0). VRT uses this to determine the correctMemoryConfigfor buffer allocation.
How VRT Uses the Vrtbin
When you construct vrt::Device(bdf, vrtbinPath):
Extract —
Vrtbin::extract()decompresses the gzip archive into a temporary cache directory.Discover — VRT locates
system_map.xml, PDI files, and emulation/simulation executables within the extracted tree.Parse — the XML parser reads
system_map.xmlto build kernel objects with register maps, argument metadata, and memory configurations.Select platform — the
<Platform>value determines whether VRT uses PCIe BAR access (hardware), ZeroMQ tovpp_emu(emulation), or ZeroMQ tovpp_sim(simulation).Program — on hardware, VRT programs the FPGA with the PDI bitstream(s) via the vrtd daemon. On emulation/simulation, it launches the model executable in a background thread.
Inspecting a Vrtbin
Use v80-smi inspect to display a vrtbin’s metadata without programming
a device:
v80-smi inspect my_design.vbin
This prints the platform, clock frequency, kernel names, argument lists,
and memory connections parsed from system_map.xml.
You can also examine the raw archive contents:
tar tzf my_design.vbin
See Command Reference for the full inspect command
reference.
Creating a Vrtbin
Vrtbin archives are produced by the SLASH linker (slashkit) through the
CMake add_vbin() function:
add_vbin(TARGET "my_design_hw" PLATFORM "hw" CFG "config.cfg" KERNELS ${_KERNELS})
The linker reads compiled HLS kernel IP (component.xml files) and a
connectivity configuration (config.cfg) to produce the archive. One
target is created per platform (hw, emu, sim).
See SlashTools for the full add_vbin()
reference and Your First Kernel for a worked
example.