Vitis System Compilation(Vitis 系统编译)模式也可搭配标准 Vitis 内核 (.xo) 和应用加速设计流程一起使用。因此,您可将 VSC 与 Vitis HLS C++ 内核搭配使用(如 Vitis 高层次综合用户指南(UG1399) 中所述),也可将其与 RTL 内核搭配使用(如 Vitis 统一软件平台文档:应用加速开发(UG1393) 中所述)。
给定 VSC 加速器代码 sc_acc.cpp 和 Vitis 内核 kernel.xo 的情况下,需通过下列命令行来构建工程:
v++ -c sc_acc.cpp -o sc_acc.o
v++ -l sc_acc.o kernel.xo -o hw.xclbin # also produces hw.o
g++ -c host.cpp -o host.o
g++ -l -o host.exe host.o sc_acc.o hw.o -lvpp_acc -lxrt_hw -lpthread
在前述场景中,kernel.xo 已编译完成。因此,VSC 加速器代码 (sc_acc.cpp) 需按以上第一条 v++
命令中所示进行编译。输出即为对象文件 sc_acc.o
。v++
命令会识别 VSC 加速器代码,并将其正确编译到对象文件内。
随后,运行 v++ --link
命令以将 .xo 文件和 .o 文件链接到 .xclbin 中。请注意,这样不仅会生成 hw.xclbin 文件,还会生成 hw.o 文件。hw.o 文件是主机应用编译中 g++
命令所必需的,如后续步骤中所示。
g++
命令会对主机代码进行编译,然后将各对象文件(host.o、sc_acc.o 和 hw.o)链接在一起以生成 host.exe 可执行文件。请注意,在 g++
命令行中添加了 vpp_acc
库和 xrt_hw
库,因为这些是链接进程所必需的库。
在标准 Vitis 流程中,用户主机代码必须使用本机 XRT 或 OpenCL 代码显式加载 .xclbin。在混合型 VSC-XO 流程中,用户主机代码仍可显式加载 .xclbin,但这并非必要操作。可改为通过调用 API vpp::sc::get_xrt_device()
来获取器件 ID (device-ID)。
在本机 XRT 与 VSC API 之间,可轻松传递缓冲器对象。在以下章节中描述了两种可能的缓冲器传输场景。