Architecture and workflows¶
xbtest sources and workflows will allow you to build and packages an xclbin compatible with the performances and capabilities of your platform.
xbtest compute units architecture¶
Depending on resources of your platform, here is a view of the various xbtest compute units (CUs) available (along with some of their connectivity). These CUs contain the resources to test your platform (GT and memories) but also to consume a programmable amount of power.
Important
xbtest requires at least 1 PLRAM is present in your platform. If your Alveo™ card is fitted with a multi SLR FPGA type, ideally there should be 1 PLRAM per SLR.
CU type |
Description |
---|---|
Memory |
|
Power |
|
GT_MAC |
|
GT_PRBS |
|
GT_LPBK |
|
Verify |
|
HW sources overview¶
The HW sources used to create and package your xclbin are located in <xbtest_local_repo>/src/hw
directory (see xbtest sources):
xbtest_catalog/
: xbtest IP catalog.
build_source/xbtest_wizard_v6_0/
: xclbin and RPM/DEB build workflows sources.
xclbin_generate/
: xclbin_generate workflow sources.
cfg/
: Examples of xclbin configuration for various platforms:
pwr_cfg/
: Power floorplan sources definition.
vpp_cfg/
: Vitis configuration.
wizard_cfg.json
: Wizard configuration JSON file: wizard_cfg.json.
rpm_generate/
: rpm_generate workflow sources.
include/
: Example of files included in RPM/DEB package for various platforms:
xbtest_pfm_def.json
: Platform definition JSON file: xbtest_pfm_def.json.
These HW sources are structured as:
<xbtest_local_repo>/src/hw
├── build_source/
│ └── xbtest_wizard_v6_0/
│ ├── rpm_generate/
│ │ ├── build/
│ │ ├── include/
│ │ ├── gen_rpm.py
│ │ └── xbtest_deps.sh
│ └── xclbin_generate/
│ ├── build/
│ ├── cfg/
│ └── gen_xclbin.py
└── xbtest_catalog/
├── xbtest_sub_xxv_gt_v1_0/
└── xbtest_wizard_v6_0/
HW build workflows overview¶
xbtest HW packages are built with following workflows:
xclbin_generate: Create the xclbin.
rpm_generate: Create xbtest HW package.
checklist: Manual check of the xclbin & packages.
Workflow |
Component |
Description |
Input products |
Output products |
---|---|---|---|---|
|
|
Use From Vivado IP catalog, this workflow creates and customizes the various CU RTL IPs. CUs RTL IPs are finally packaged as XO to be consumed by Vitis linker. |
|
|
|
Run Vitis tools required to build the xclbin. |
|
|
|
|
Package the xclbin and its customization JSON files to RPM/DEB deliverables. |
|
RPM/DEB packages. |
|
|
Process of verifying the xclbin and updating the platform definition JSON file.
|
RPM/DEB packages. |
Checklist. |
The following figures represents the different HW build workflows and their inputs/outputs:
Here is the default location of the various files present in the diagram:
File |
Description / location |
---|---|
Input products |
|
IP catalog |
Provided IP catalog:
|
Vitis INI |
Configuration of Vitis (see Configure Vitis):
|
Post system linker TCL hook |
Required Vitis TCL hook (see Required Vitis TCL hooks):
|
Optional TCL hook |
Optional Vitis TCL hook (see Optional TCL hooks):
|
Power CU configuration |
Configuration of the power cu (see Define power CU floorplan):
|
Wizard configuration |
Define and configure the content of the xclbin (see Wizard configuration JSON file: wizard_cfg.json):
|
Intermediate products |
|
|
Actual script used to run Vitis:
|
Vitis option files |
Various intermediate Vitis files:
|
Wizard configuration files
|
Various intermediate configuration files (see Overview):
|
XOs |
Generated XOs from the IP catalog based on the configuration. These XOs will be used by Vitis:
|
AIE compiler outputs |
AIE compiler results:
|
User metadata |
User metadata which will be inserted in the xclbin. Internally used to transfer information between workflows.
|
Output products |
|
xclbin |
Generated xclbin:
|
JSON templates
|
Template provided as reference for manual editing or calibration (see Select pre-canned tests and Platform definition JSON file: xbtest_pfm_def.json):
|
DCP |
Vivado design checkpoint:
|
File |
Description / location |
---|---|
Input products |
|
xclbin |
xclbin copied from its generated location:
|
JSON files
|
Updated templates after checklist filling (see Select pre-canned tests and Platform definition JSON file: xbtest_pfm_def.json):
|
Output products |
|
Packages |
RPM/DEB packages:
|
Where:
<xbtest_build>
represents the xbtest build source directory (e.g.path/to/your/xbtest/src/hw/build_source/xbtest_wizard_v6_0/
).
<xbtest_catalog>
represents the xbtest IP catalog directory (e.g.path/to/your/xbtest/src/hw/xbtest_catalog/
).
<dev_platform>
is provided with command line option--xpfm
. For example: Ifpath/to/xilinx_u55c_gen3x16_xdma_3_202210_1.xpfm
is provided, then<dev_platform>
is set withxilinx_u55c_gen3x16_xdma_3_202210_1
. Ifpath/to/hw.xsa
is provided, then<dev_platform>
is set withhw
. Ifpath/to/your/xilinx-u250-gen3x16-xdma-4.1-202210-1-dev-1-3512975.noarch.rpm
is provided, then<dev_platform>
is set withxilinx-u250-gen3x16-xdma-4.1-202210-1-dev-1-3512975.noarch
.
<project_name>
is provided with command line option--project_name
.
These files are structured as follow:
├── <xbtest_catalog>
└── <xbtest_build>/
├── xclbin_generate/
│ ├── cfg/<dev_platform>/
│ │ ├── pwr_cfg/
│ │ │ ├── dynamic_geometry.json
│ │ │ ├── utilization.json
│ │ │ └── invalid.json
│ │ ├── vpp_cfg/
│ │ │ ├── postsys_link.tcl
│ │ │ ├── place_design_pre.tcl
│ │ │ ├── route_design_pre.tcl
│ │ │ └── vpp.ini
│ │ └── wizard_cfg.json
│ └── output/<dev_platform>/<project_name>/
│ ├── <project_name>.xclbin
│ └── u_ex/run/
│ ├── vpp_link/link/vivado/vpl/prj/prj.runs/impl_1/level0_wrapper_postroute_physopt.dcp
│ ├── kernel_xo/
│ ├── user_metadata.json
│ ├── wizard_actual_config.json
│ ├── wizard_auto_config.json
│ ├── wizard_user_config.json
│ ├── vpp_link.ini
│ ├── vpp_package.ini
│ ├── libadf.a
│ ├── build_xclbin.sh
│ └── sw/
│ ├── test/*.json
│ └── xbtest_pfm_def_template.json
└── rpm_generate/
├── include/
│ └── <deploy_platform>/
│ ├── test/*.json
│ └── xbtest_pfm_def.json
├── xbtest-<...>.rpm
└── xbtest-<...>.deb
xclbin_generate
workflow overview¶
This diagram shows the major steps of the workflow with its input and output products: