第二章:开发环境搭建——Vitis统一软件平台安装、XRT配置、目标平台导入与XSA准备

说实话,很多初学者一上来就急着写代码,结果卡在环境搭建上好几个星期。我见过太多人,明明代码逻辑没问题,就是跑不起来——最后发现是XRT版本不对,或者Platform没配好。这一章,咱们就把这些基础打牢。

2.1 Vitis统一软件平台安装

Vitis这个工具,说白了就是Xilinx把以前的SDK、SDAccel、SDSoC全揉到一起了。你装一个Vitis,就等于装了整套开发链。

安装前的准备:

  • 至少100GB硬盘空间(我建议留200GB,别问我怎么知道的)
  • 16GB以上内存(32GB更稳)
  • Linux Ubuntu 18.04/20.04 或 CentOS 7.x/8.x
  • 提前装好ncurses、libtinfo5等依赖库

核心要点:Vitis安装包分为在线安装器和离线安装包。我个人习惯用离线包,省得下载到一半断网重来。

安装步骤:

  1. 从Xilinx官网下载Vitis Unified Software Platform安装包
  2. 运行安装脚本:./xsetup
  3. 选择“Vitis”组件(默认会勾选Vivado,建议保留)
  4. 设置安装路径(不要有中文或空格)
  5. 等待约1-2小时(取决于你的机器和网络)

小技巧:安装时勾选“Install Cable Drivers”,否则你后面连不上开发板。我曾经因为这个折腾了一下午。

2.2 Xilinx Runtime (XRT) 配置

XRT是什么?它是Vitis和硬件之间的桥梁。你的主机程序通过XRT来加载比特流、管理内存、启动计算单元。没有XRT,你的代码就是一堆废纸。

安装XRT:

# 对于Ubuntu系统
sudo apt install xrt_202410.2.11.0_Ubuntu_20.04-amd64-xrt.deb

# 对于CentOS/RHEL
sudo yum install xrt_202410.2.11.0_CentOS_7.8.2003-xrt.rpm

配置环境变量:

# 添加到 ~/.bashrc
source /opt/xilinx/xrt/setup.sh
export XILINX_XRT=/opt/xilinx/xrt
export LD_LIBRARY_PATH=$XILINX_XRT/lib:$LD_LIBRARY_PATH

注意:XRT版本必须和Vitis版本匹配。我遇到过有人装了Vitis 2023.2却用XRT 2022.1,结果API调用全报错。检查版本用 xbutil examine 命令。

验证安装:

xbutil examine
# 如果看到类似下面的输出,说明XRT工作正常
System Configuration
  OS: Ubuntu 20.04
  XRT: 2.14.0
  XOCL: 2.14.0

2.3 目标平台(Platform)导入

Platform就是你的硬件目标板。它包含了板级描述、内存映射、时钟配置等信息。Vitis官方提供了很多现成的Platform,比如Xilinx Alveo系列、Zynq系列。

获取Platform:

  • 官方平台:从Xilinx官网下载(如xilinx_u250_gen3x16_xdma_2_1_202010_1)
  • 自定义平台:用Vivado生成(后面章节会讲)

导入Platform到Vitis:

# 方法一:通过Vitis GUI
# 打开Vitis -> Xilinx -> Add Platform -> 选择.xpfm文件

# 方法二:命令行
vitis -platform -add /path/to/your/platform.xpfm

关键点:Platform文件是.xpfm格式。它包含了硬件描述、软件驱动、设备树等。导入后,你可以在Vitis的Platform视图中看到它。

检查Platform是否导入成功:

# 在Vitis终端中
platforminfo /opt/xilinx/platforms/xilinx_u250_gen3x16_xdma_2_1_202010_1

# 输出应该包含:
# Platform: xilinx_u250_gen3x16_xdma_2_1_202010_1
# Software Emulation: Supported
# Hardware Emulation: Supported
# Hardware: Supported

2.4 硬件描述文件(XSA)准备

XSA(Xilinx Shell Archive)是Vivado导出的硬件设计文件。它包含了你的PL端逻辑、PS端配置、时钟、复位、中断等信息。说白了,XSA就是你的硬件“蓝图”。

生成XSA的流程:

  1. 在Vivado中完成硬件设计(Block Design或RTL)
  2. 综合、实现、生成比特流
  3. 导出硬件:File -> Export -> Export Hardware
  4. 勾选“Include bitstream”
  5. 保存为.xsa文件

经验之谈:导出XSA时一定要勾选“Include bitstream”。我刚开始做项目时忘了勾,结果Vitis一直报“No bitstream found”,查了半天才发现是这个问题。

XSA文件结构:

my_design.xsa
├── hw_handoff/
│   └── design_1.hwh        # 硬件握手文件
├── ps7_init.c              # PS初始化代码
├── ps7_init.h
├── ps7_init.tcl
└── xsa.xml                 # 元数据描述

在Vitis中使用XSA:

# 创建新工程时选择XSA
vitis -workspace ./workspace -create -name my_project -platform xilinx_u250_gen3x16_xdma_2_1_202010_1 -hw ./my_design.xsa

避坑指南:XSA文件路径不要包含中文或特殊字符。我曾经把项目放在“桌面/项目”文件夹下,结果Vitis死活识别不了。改成英文路径就好了。

2.5 环境验证:跑一个Hello World

环境搭好了,咱们来验证一下。写一个最简单的Host程序,看看能不能和硬件通信。

// hello_world.cpp
#include "xrt/xrt_bo.h"
#include "xrt/xrt_device.h"
#include "xrt/xrt_kernel.h"
#include <iostream>

int main() {
    // 获取设备
    auto device = xrt::device(0);
    std::cout << "Device found: " << device.get_info<xrt::info::device::name>() << std::endl;
    
    // 加载XCLBIN
    auto uuid = device.load_xclbin("binary_container_1.xclbin");
    std::cout << "XCLBIN loaded, UUID: " << uuid.to_string() << std::endl;
    
    // 创建BO(Buffer Object)
    auto bo = xrt::bo(device, 1024, xrt::bo::flags::normal, 0);
    std::cout << "BO created, size: 1024 bytes" << std::endl;
    
    std::cout << "Environment setup successfully!" << std::endl;
    return 0;
}

编译运行:

# 编译
g++ -o hello_world hello_world.cpp -I$XILINX_XRT/include -L$XILINX_XRT/lib -lxrt_coreutil

# 运行
./hello_world

# 预期输出
Device found: xilinx_u250_gen3x16_xdma_2_1_202010_1
XCLBIN loaded, UUID: 12345678-1234-1234-1234-123456789abc
BO created, size: 1024 bytes
Environment setup successfully!

如果报错:检查XRT环境变量是否设置正确,用 echo $XILINX_XRT 查看。如果为空,重新source一下setup.sh。

2.6 本章知识体系

下面这张图帮你理清整个环境搭建的脉络:

Vitis开发环境搭建知识体系 Vitis统一平台 XRT运行时 Platform/XSA Vitis安装 • 离线/在线安装包 • 依赖库检查 • Cable驱动安装 XRT配置 • 安装XRT包 • 环境变量设置 • xbutil验证 Platform/XSA • 导入.xpfm • 导出.xsa • 包含bitstream 环境验证:Hello World程序 ✅ 开发环境就绪,可以开始软硬件协同开发

这张图展示了整个环境搭建的层次关系。Vitis、XRT、Platform/XSA三者缺一不可。只有全部配置正确,你才能跑通那个Hello World程序。

最后说一句:环境搭建是最枯燥但最重要的一步。我见过太多人跳过这一步直接写代码,结果后面花了两倍时间回来排查环境问题。磨刀不误砍柴工,把这一步走稳了,后面就顺畅了。

可可精品资料库