第二章:Vitis统一软件平台:Vitis架构概览、Vitis核心组件、Vitis安装与配置

各位同学,欢迎来到第二章。说实话,Vitis这个平台刚出来的时候,我第一反应是“又来了个新工具”。但用了一段时间后,我发现它确实把之前Xilinx那一堆分散的工具整合得不错。今天我们就来聊聊Vitis到底是个什么东西,它的骨架长什么样,以及怎么把它装到你的机器上。

2.1 Vitis架构概览:从SDx到Vitis的进化

先说说背景。早些年,Xilinx有SDSoC、SDAccel、Vivado HLS,三个工具各管一摊。你做个嵌入式加速,得在三个界面之间来回切。我个人习惯是把所有开发流程统一到一个环境里,所以Vitis出来的时候,我挺高兴的——它把这三兄弟合并了。

Vitis的架构,说白了就是三层:

  • 底层:Vivado硬件设计工具,负责综合、布局布线,生成比特流。
  • 中间层:Vitis统一开发环境,包含编译器、调试器、分析器。
  • 上层:各种库和框架,比如Vitis AI、Vitis Vision、Vitis HLS。

你想想看,以前写HLS代码,得在Vivado HLS里写完,再导到SDSoC里做系统集成。现在直接在Vitis里搞定,省了不少事。

核心变化:Vitis不再是一个单纯的IDE,而是一个统一软件平台。它把硬件设计、软件编译、系统调试全部整合到一个工作流里。

下面这张图是我自己画的Vitis架构概览,帮你快速建立整体认知:

Vitis统一软件平台架构概览 上层:应用与加速库 Vitis AI | Vitis Vision | Vitis HLS | 自定义加速器 用户编写的C/C++/OpenCL代码 + Xilinx官方库 中层:Vitis核心工具链 编译器 v++ / g++ 调试器 XRT / 硬件仿真 分析器 性能/资源分析 运行时(XRT) 驱动/API 下层:Vivado硬件设计平台 综合(Synthesis) | 布局布线(Place & Route) | 比特流生成 FPGA硬件描述 + IP集成 + 时序约束

这张图你看懂了吗?上层是写代码的地方,中层是编译调试的地方,下层是生成硬件的地方。三个层次通过标准接口通信,互不干扰。

2.2 Vitis核心组件:你每天都会打交道的几个东西

Vitis里组件不少,但真正每天用的,其实就这几个。我按使用频率排个序:

2.2.1 Vitis IDE(集成开发环境)

这是你写代码、编译、调试的主战场。基于Eclipse,但做了大量定制。我个人习惯把视图调成“C/C++透视图”,这样左边是工程树,右边是编辑器,下面是控制台和问题窗口。

小技巧:第一次打开Vitis IDE时,它会让你选工作空间(workspace)。我建议单独建一个文件夹,别跟Vivado的工程混在一起。不然文件多了,找起来头疼。

2.2.2 Vitis HLS(高层次综合)

这个是我们课程的核心。它把C/C++代码转成RTL硬件描述。说白了,你写个for循环,它给你生成一个状态机加数据通路。

我记得第一次用Vitis HLS时,写了个简单的矩阵乘法,综合出来一看,资源用了8000多个LUT。我当时就懵了——这比手写Verilog多了三倍。后来加了流水线优化指令,才降下来。所以啊,HLS不是万能的,你得学会怎么“指挥”它。

2.2.3 XRT(Xilinx运行时库)

XRT是连接软件和硬件的桥梁。你的C程序通过XRT的API来加载比特流、启动加速器、传输数据。没有XRT,你的加速器就是个摆设。

举个例子,你要在FPGA上跑一个FFT加速器,流程是这样的:

  1. 调用xrt::device::load_xclbin()加载比特流
  2. 调用xrt::kernel::run()启动加速器
  3. 调用xrt::bo::sync()同步数据

嗯,这里要注意:XRT的API版本更新很快。我去年写的代码,今年升级Vitis后,有几个API就废弃了。所以建议你锁定一个Vitis版本,别频繁升级。

2.2.4 Vitis分析器

这个工具用来分析性能瓶颈。它能告诉你:

  • 哪个函数占用了最多的硬件资源
  • 数据搬运花了多少时间
  • 流水线有没有被阻塞

我曾经遇到一个项目,加速器跑起来比CPU还慢。用分析器一看,发现数据搬运占了90%的时间。后来改成DMA传输,性能直接翻了10倍。所以,分析器不是摆设,一定要学会用。

2.3 Vitis安装与配置:手把手教你搞定环境

安装Vitis,说简单也简单,说复杂也复杂。我踩过不少坑,下面给你总结一份避坑指南。

2.3.1 系统要求

项目 最低要求 推荐配置
操作系统 Ubuntu 18.04 / CentOS 7 Ubuntu 20.04 / 22.04
内存 16 GB 32 GB 或以上
硬盘 100 GB 空闲 256 GB SSD
CPU 4核 8核或以上

警告:千万不要在Windows上直接装Vitis!虽然官方说有Windows版,但我在Windows上折腾了两天,各种路径问题、权限问题。最后老老实实装了双系统。Linux才是Vitis的亲爹。

2.3.2 安装步骤

安装其实就三步,但每一步都有坑:

  1. 下载安装包:去Xilinx官网下载Vitis Unified Software Platform。文件很大,大概20-30GB。建议用下载工具,别用浏览器直接下,容易断。
  2. 运行安装程序:./xsetup。这里要注意,安装程序会问你要不要装Vivado。如果你只做HLS开发,可以只选Vitis,不选Vivado。但如果你要做完整的硬件设计,两个都得装。
  3. 配置环境变量:安装完后,记得在.bashrc里加一行:source /opt/Xilinx/Vitis/2023.1/settings64.sh。不然每次打开终端都得手动source。

避坑指南:我曾经在安装时选了“全部安装”,结果硬盘直接爆了。Vitis + Vivado + 文档,加起来超过100GB。建议只装你需要的组件。比如我们做HLS,只需要Vitis和Vivado HLS就够了。

2.3.3 验证安装

装完后,打开终端,输入:

vitis -version

如果能看到版本号,说明安装成功。然后试试HLS:

vitis_hls -version

嗯,如果报错说找不到命令,八成是环境变量没配好。回去检查.bashrc。

2.3.4 配置许可证

Vitis需要许可证。如果你有正版license,把.lic文件放到/opt/Xilinx/Vitis/2023.1/licenses/下。如果没有,可以用Xilinx的免费版——Vitis HLS有社区版,功能受限但够用。

小技巧:我习惯把license文件放在$HOME/.Xilinx/下,然后在.bashrc里设置export XILINXD_LICENSE_FILE=$HOME/.Xilinx/license.lic。这样换版本时不用重新配置。

2.4 第一个Vitis工程:Hello World

光说不练假把式。我们来创建一个最简单的Vitis工程,验证环境是否正常。

  1. 打开Vitis IDE,选择工作空间。
  2. 点击 File → New → Application Project。
  3. 选择平台(Platform),如果没有现成的,选 Create a new platform from hardware。
  4. 选择模板(Template),选 Empty Application。
  5. 在 src 目录下新建一个 main.c,写个简单的打印:
#include <stdio.h>
#include <xrt/xrt_device.h>

int main() {
    printf("Hello from Vitis!\n");
    
    // 检查设备
    xrt::device device = xrt::device(0);
    printf("Device name: %s\n", device.get_info<xrt::info::device::name>().c_str());
    
    return 0;
}

编译运行,如果控制台打印出设备信息,恭喜你,环境配置成功了。

好了,第二章就到这里。Vitis的架构和安装其实不难,难的是后面怎么用好它。下一章我们会深入Vitis HLS的编译流程,到时候你会看到C代码是怎么一步步变成硬件电路的。


可可精品资料库