2、开发环境搭建:Vitis安装指南、XRT配置、平台验证

好,咱们正式开始动手了。这一章我带你把开发环境搭起来。说实话,很多初学者卡在这一步就放弃了——不是软件装不上,就是装完了跑不起来。别急,我踩过的坑,你大概率不会再踩一遍。

2.1 Vitis统一软件平台安装

Vitis这个工具,说白了就是Xilinx把以前的SDK、SDAccel、SDSoC全揉到一起了。你装一个,就等于装了全套。我个人习惯用Vitis Unified Software Platform,它包含了Vivado和Vitis两部分。

2.1.1 下载与安装

去Xilinx官网下载页面,找到Vitis 2023.1或2023.2版本。注意,版本号别追最新,我建议用2023.1,因为2023.2的某些驱动在Ubuntu 20.04上有点小毛病。

安装前必看:

  • 硬盘至少留200GB空间(实际占用约120GB,但解压临时文件需要空间)
  • 内存建议32GB以上,16GB也能跑但编译时会卡
  • 操作系统:Ubuntu 18.04/20.04 或 CentOS 7.4+

下载完成后,运行安装脚本:

# 给安装文件加执行权限
chmod +x Xilinx_Unified_2023.1_0507_2203_Lin64.bin

# 运行安装(建议用sudo,避免权限问题)
sudo ./Xilinx_Unified_2023.1_0507_2203_Lin64.bin

安装过程中,选择Vitis组件即可,它会自动勾选Vivado和Vitis HLS。嗯,这里要注意:如果你只做嵌入式开发,可以不勾选Vivado的器件支持,但做图像采集肯定要选上。

2.1.2 环境变量设置

安装完成后,需要设置环境变量。我个人习惯把下面这段加到~/.bashrc里:

# Vitis 2023.1 环境变量
export XILINX_VITIS=/tools/Xilinx/Vitis/2023.1
export XILINX_VIVADO=/tools/Xilinx/Vivado/2023.1
export XILINX_HLS=/tools/Xilinx/Vitis_HLS/2023.1

# 设置PATH
export PATH=$XILINX_VITIS/bin:$XILINX_VIVADO/bin:$XILINX_HLS/bin:$PATH

# 设置许可证(如果你有本地许可证服务器)
export XILINX_LICENSE_FILE=2100@license-server-ip

然后执行 source ~/.bashrc 使其生效。验证是否安装成功:

vitis -version
vivado -version

如果能看到版本信息,恭喜,第一步走通了。

2.2 Xilinx Runtime (XRT) 配置

XRT是什么?说白了,它是连接你的应用程序和FPGA硬件的桥梁。没有它,你的C++代码调不动FPGA加速器。

2.2.1 安装XRT

XRT的安装包在Vitis安装目录下能找到,路径是:

$XILINX_VITIS/scripts/installXRT.sh

但我更推荐从Xilinx的GitHub仓库下载最新版:

# 下载XRT deb包(以Ubuntu 20.04为例)
wget https://github.com/Xilinx/XRT/releases/download/2023.1/xrt_202310.2.14.0_20.04-amd64-xrt.deb

# 安装
sudo apt update
sudo apt install ./xrt_202310.2.14.0_20.04-amd64-xrt.deb

我曾经踩过的坑: 安装XRT时忘记安装dkms,导致驱动编译失败。一定要先装好dkms:sudo apt install dkms

2.2.2 配置XRT

安装完成后,需要加载驱动并设置环境变量:

# 加载XRT驱动
sudo modprobe xclmgmt
sudo modprobe xocl

# 设置XRT环境变量(同样加到~/.bashrc)
export XILINX_XRT=/opt/xilinx/xrt
export LD_LIBRARY_PATH=$XILINX_XRT/lib:$LD_LIBRARY_PATH
export PATH=$XILINX_XRT/bin:$PATH

验证XRT是否正常工作:

xbutil validate

如果输出显示设备状态为Healthy,说明XRT配置成功。你想想看,这一步要是出问题,后面所有实验都跑不起来,所以务必确认。

2.3 平台验证

环境搭完了,怎么知道它真的能用?我一般会跑一个最简单的"Hello World"程序来验证整个链路。

2.3.1 创建Vitis平台

Vitis平台包含了硬件描述(XSA文件)和软件栈(BSP、驱动等)。对于图像采集,我们需要一个包含MIPI CSI-2接口和VDMA的平台。

这里我用一个现成的平台做验证:

# 列出可用的平台
platforminfo -l

# 你应该能看到类似这样的输出:
# xilinx_kv260_isp_202310_1
# xilinx_zcu104_base_202310_1

如果没有现成平台,可以用Vivado自己生成。我个人习惯用KV260开发板,它自带的ISP平台非常适合图像采集入门。

2.3.2 运行验证程序

写一个最简单的OpenCL程序,验证FPGA能否正常加载比特流:

#include <xrt/xrt_device.h>
#include <iostream>

int main() {
    // 获取设备
    auto device = xrt::device(0);
    std::cout << "Device name: " << device.get_info<xrt::info::device::name>() << std::endl;
    
    // 加载xclbin
    auto uuid = device.load_xclbin("test.xclbin");
    std::cout << "xclbin loaded, UUID: " << uuid.to_string() << std::endl;
    
    return 0;
}

编译运行:

# 编译
g++ -o test_xrt test_xrt.cpp -I/opt/xilinx/xrt/include -L/opt/xilinx/xrt/lib -lxrt_coreutil

# 运行(需要sudo权限访问设备)
sudo ./test_xrt

如果输出显示设备名称和UUID,说明整个开发环境——Vitis、XRT、硬件平台——全部打通了。

小技巧: 如果xbutil validate报错说找不到设备,先检查FPGA板卡是否上电,然后用lspci | grep Xilinx看看PCIe设备是否被识别。我遇到过好几次是PCIe插槽接触不良。

2.4 本章知识体系

下面这张图帮你理清整个开发环境的层次关系:

Vitis图像采集开发环境架构 应用层 OpenCL / C++ 应用程序 XRT运行时层 xclbin加载 / 内存管理 / 调度器 驱动层 xocl / xclmgmt 内核驱动 硬件层 FPGA (KV260 / ZCU104) + MIPI CSI-2

这张图很直观:你的应用程序在最上层,通过XRT调用驱动,最终控制FPGA硬件。每一层都依赖下一层正常工作。所以,当你遇到问题时,从底层往上排查——先看硬件有没有被识别,再看驱动有没有加载,最后看应用程序调用是否正确。

好了,环境搭建就到这里。记住,这一步慢一点没关系,基础打牢了,后面写代码才顺手。

本章要点回顾:

  • Vitis安装时注意磁盘空间和版本选择
  • XRT是连接软件和硬件的关键,务必验证驱动加载成功
  • 用xbutil validate和简单的OpenCL程序验证整个链路
  • 遇到问题从底层向上排查,先看硬件再看驱动

可可精品资料库