🏠

Vitis-Tutorials 构建与代码组织分析文档

1. 项目目录结构

Vitis-Tutorials 是 AMD/Xilinx 官方提供的 Vitis 开发环境教程集合,按功能域划分为多个顶层模块,每个模块包含设计教程、功能教程和配套文档。

graph TD Root["Vitis-Tutorials/"] --> AIE["AI_Engine_Development/"] Root --> Dev["Developer_Contributed/"] Root --> Emb["Embedded_Software/"] Root --> GS["Getting_Started/"] Root --> HW["Hardware_Acceleration/"] Root --> ML["Machine_Learning/"] Root --> HLS["Vitis_HLS/"] Root --> Plat["Vitis_Platform_Creation/"] Root --> Docs["docs-jp/"] Root --> Meta["CHANGELOG.md/FAQs.md/Jenkinsfile/LICENSE.txt/README.md/index.rst"] AIE --> AIE1["AIE/ (Versal AI Engine 初代)"] AIE --> AIEML["AIE-ML/ (Versal AI Engine-ML 增强版)"] AIE1 --> AIE_Design["Design_Tutorials/ (端到端设计)"] AIE1 --> AIE_Feat["Feature_Tutorials/ (功能特性演示)"] Dev --> Dev_Examples["01-Versal_Custom_Thin_Platform/02-AIE_DSP_with_Makefile_and_GUI/03-HLS_Code_Optimization/"] Emb --> Emb_Feat["Feature_Tutorials/ (用户管理模式/调试/脚本化)"] Emb --> Emb_GS["Getting_Started/ (嵌入式入门)"] GS --> GS_Vitis["Vitis/ (Vitis 基础流程)"] GS --> GS_HLS["Vitis_HLS/ (HLS 入门)"] GS --> GS_Lib["Vitis_Libraries/ (库使用)"] GS --> GS_Plat["Vitis_Platform/ (平台入门)"] HW --> HW_Design["Design_Tutorials/ (卷积/TSP/Cholesky等)"] HW --> HW_Feat["Feature_Tutorials/ (混合C/RTL内核/HBM/P2P等)"] HLS --> HLS_Design["Design_Tutorials/ (多项式向量化/波束成形)"] HLS --> HLS_Feat["Feature_Tutorials/ (代码分析器)"] Plat --> Plat_Design["Design_Tutorials/ (KV260/ZCU104/VCK190平台)"] Plat --> Plat_Feat["Feature_Tutorials/ (Petalinux定制/平台验证)"]

核心目录职责说明

目录 职责
AI_Engine_Development/ Versal AI Engine 设计教程,包含 AIE 和 AIE-ML 两代引擎的端到端设计与功能演示
Hardware_Acceleration/ Alveo/Versal FPGA 硬件加速设计,涵盖 HLS 内核、RTL 内核混合集成、HBM/P2P 等高级特性
Getting_Started/ 新手入门教程,覆盖 Vitis 基础流程、HLS 入门、Vitis 库使用和平台创建
Vitis_Platform_Creation/ 自定义 Vitis 平台(XPFM)创建教程,支持边缘和数据中心设备
Developer_Contributed/ 社区开发者贡献的设计示例

2. 构建/编译流水线

Vitis-Tutorials 采用异构多阶段构建流程,涵盖硬件内核编译、AI Engine 图编译、主机代码编译和系统链接四个核心阶段。

flowchart TD subgraph Input["输入源"] HLS_C["HLS C/C++ 内核代码"] RTL["RTL Verilog/VHDL 内核"] AIE_Graph["AIE Graph 代码 (C++)"] Host_Code["主机代码 (C/C++/Python)"] Platform["目标平台 (.xpfm)"] end subgraph Build_Stages["构建阶段"] HLS_Comp["HLS 编译 (v++ -c)"] RTL_Pack["RTL 内核打包 (Vitis RTL Kernel Wizard)"] AIE_Comp["AIE 图编译 (aiecompiler)"] Host_Comp["主机代码编译 (gcc/g++/CMake)"] Link["系统链接 (v++ -l)"] Pack["xclbin 打包"] end subgraph Output["输出产物"] XO["内核目标文件 (.xo)"] AIE_ELF["AIE 可执行文件"] Host_Exe["主机可执行文件"] XCLBIN["FPGA 比特流容器 (.xclbin)"] end Input --> Build_Stages Build_Stages --> Output HLS_C --> HLS_Comp RTL --> RTL_Pack HLS_Comp --> XO RTL_Pack --> XO AIE_Graph --> AIE_Comp AIE_Comp --> AIE_ELF Host_Code --> Host_Comp Host_Comp --> Host_Exe XO --> Link AIE_ELF --> Link Platform --> Link Link --> Pack Pack --> XCLBIN

核心构建流程详解

  1. 内核编译阶段
    • HLS 内核通过 v++ -c 编译生成 .xo 目标文件
    • RTL 内核通过 Vitis RTL Kernel Wizard 打包为 .xo 文件
  2. AI Engine 编译阶段
    • AIE 图代码通过 aiecompiler 编译生成 AIE 可执行文件
  3. 主机代码编译阶段
    • 主机代码通过 gcc/g++ 或 CMake 编译,链接 XRT 运行时库
  4. 系统链接阶段
    • v++ -l 将内核目标文件、AIE 可执行文件和目标平台链接,生成最终的 .xclbin 比特流容器

3. 依赖管理

Vitis-Tutorials 依赖管理以工具链和平台为核心,采用声明式配置和环境变量结合的方式。

graph TD subgraph Toolchain_Deps["工具链依赖"] Vitis["Vitis 工具链 (2022.2+/settings.sh)"] XRT["XRT 运行时 (setup.sh)"] Petalinux["Petalinux (仅嵌入式平台)"] CMake["CMake (主机代码构建)"] end subgraph Platform_Deps["平台依赖"] Alveo["Alveo 数据中心平台 (.xpfm)"] Edge["Versal/Zynq 边缘平台 (.xpfm)"] end subgraph Config_Files["声明式配置"] Makefile["Makefile (构建脚本)"] CFG["v++ 配置文件 (.cfg)"] CMakeLists["CMakeLists.txt (主机代码)"] end Toolchain_Deps --> Config_Files Platform_Deps --> Config_Files Config_Files --> Build["构建执行"]

依赖管理策略

  1. 工具链依赖
    • 通过 settings.sh(Vitis)和 setup.sh(XRT)环境脚本激活
    • 版本要求:Vitis 2022.2+,XRT 版本与 Vitis 匹配
  2. 平台依赖
    • 目标平台通过 .xpfm 文件声明,在 Makefile 中通过 PLATFORM 变量指定
    • 例如:PLATFORM := /opt/xilinx/platforms/xilinx_u200_gen3x16_xdma_1_202110_1/xilinx_u200_gen3x16_xdma_1_202110_1.xpfm
  3. 内核与系统依赖
    • 通过 .cfg 配置文件声明内核实例、连接关系和性能剖析选项
    • 例如:nk=krnl_vadd:1:krnl_vadd_1 声明 1 个 krnl_vadd 内核实例

4. 多语言协作

Vitis-Tutorials 是典型的异构多语言项目,涉及 C/C++、RTL(Verilog/VHDL)、Python 和 AIE Graph C++ 等语言,通过 Vitis 统一工具链和 XRT 运行时实现互操作。

graph TD subgraph Languages["语言层"] C_Host["C/C++ 主机代码"] Python["Python 主机代码 (XRT Python Binding)"] HLS_Cpp["HLS C++ 内核"] RTL["RTL Verilog/VHDL 内核"] AIE_Cpp["AIE Graph C++"] end subgraph Interop["互操作层"] XRT["XRT 运行时 (C/Python API)"] Vitis_Link["Vitis 链接器 (v++ -l)"] AIE_Interface["AIE-PL 接口 (Stream/MMIO)"] end subgraph Hardware["硬件层"] PS["处理系统 (ARM/x86)"] PL["可编程逻辑 (FPGA)"] AIE["AI Engine 阵列"] end Languages --> Interop Interop --> Hardware C_Host --> XRT Python --> XRT HLS_Cpp --> Vitis_Link RTL --> Vitis_Link AIE_Cpp --> AIE_Interface XRT --> PS Vitis_Link --> PL AIE_Interface --> AIE PL <--> AIE PS <--> PL PS <--> AIE

多语言协作机制

  1. 主机与硬件交互
    • C/C++ 主机通过 XRT C API 加载 .xclbin、调用内核、管理内存
    • Python 主机通过 XRT Python Binding 实现相同功能
  2. HLS 与 RTL 内核混合集成
    • 通过 Vitis 链接器将 HLS 内核和 RTL 内核打包到同一个 .xclbin
    • 通过 .cfg 配置文件声明内核实例和连接关系
  3. AIE 与 PL 交互
    • AIE 阵列通过 AXI4-Stream 或 AXI4-MM 接口与 PL 逻辑通信
    • AIE Graph C++ 代码声明接口连接关系,由 aiecompiler 编译实现

5. 开发工作流

Vitis-Tutorials 的典型开发工作流包括环境初始化、硬件构建、主机代码构建和运行测试四个核心环节。

flowchart TD subgraph Env_Init["环境初始化"] A["克隆仓库"] B["激活 Vitis 环境"] C["激活 XRT 环境"] end subgraph HW_Build["硬件构建"] D["进入 hw_src 目录"] E["修改 Makefile 中的 PLATFORM 变量"] F["执行 make 构建 xclbin"] end subgraph SW_Build["主机代码构建"] G["进入 sw_src 目录"] H["执行 CMake 配置"] I["执行 make 构建主机可执行文件"] end subgraph Test["运行测试"] J["硬件仿真 (hw_emu)"] K["硬件执行 (hw)"] end Env_Init --> HW_Build HW_Build --> SW_Build SW_Build --> Test A --> B B --> C C --> D D --> E E --> F F --> G G --> H H --> I I --> J I --> K

常用命令示例

1. 环境初始化

# 克隆仓库
git clone https://github.com/Xilinx/Vitis-Tutorials.git
cd Vitis-Tutorials

# 激活 Vitis 环境
source /opt/Xilinx/Vitis/2022.2/settings.sh

# 激活 XRT 环境
source /opt/xilinx/xrt/setup.sh

2. 硬件构建(以 Hardware_Acceleration/Design_Tutorials/10-get_moving_with_alveo 为例)

# 进入硬件源目录
cd Hardware_Acceleration/Design_Tutorials/10-get_moving_with_alveo/design_src/hw_src

# 修改 Makefile 中的 PLATFORM 变量(如果需要)
# PLATFORM := /path/to/your/platform.xpfm

# 构建硬件仿真 xclbin
make TARGET=hw_emu

# 构建硬件 xclbin
make TARGET=hw

3. 主机代码构建

# 进入软件源目录
cd ../sw_src

# 创建构建目录
mkdir build && cd build

# CMake 配置
cmake ..

# 构建主机可执行文件
make

4. 运行测试

# 硬件仿真
export XCL_EMULATION_MODE=hw_emu
./host_executable alveo_examples.xclbin

# 硬件执行
unset XCL_EMULATION_MODE
./host_executable alveo_examples.xclbin

总结

Vitis-Tutorials 是一个结构清晰、异构多语言的 FPGA/AI Engine 开发教程集合,采用分层抽象的设计理念,通过声明式配置和统一工具链实现了复杂异构系统的可复现构建。其核心特点包括:

  1. 清晰的目录结构:按功能域划分顶层模块,每个模块包含设计教程和功能教程
  2. 多阶段异构构建流程:涵盖硬件内核、AI Engine、主机代码和系统链接四个核心阶段
  3. 工具链与平台为核心的依赖管理:通过环境脚本和声明式配置管理依赖
  4. 完善的多语言协作机制:通过 XRT 和 Vitis 统一工具链实现 C/C++、RTL、Python 和 AIE Graph C++ 的互操作
  5. 清晰的开发工作流:从环境初始化到运行测试的完整流程,配有详细的命令示例
On this page