第二章: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架构概览,帮你快速建立整体认知:
这张图你看懂了吗?上层是写代码的地方,中层是编译调试的地方,下层是生成硬件的地方。三个层次通过标准接口通信,互不干扰。
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加速器,流程是这样的:
- 调用
xrt::device::load_xclbin()加载比特流 - 调用
xrt::kernel::run()启动加速器 - 调用
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 安装步骤
安装其实就三步,但每一步都有坑:
- 下载安装包:去Xilinx官网下载Vitis Unified Software Platform。文件很大,大概20-30GB。建议用下载工具,别用浏览器直接下,容易断。
- 运行安装程序:
./xsetup。这里要注意,安装程序会问你要不要装Vivado。如果你只做HLS开发,可以只选Vitis,不选Vivado。但如果你要做完整的硬件设计,两个都得装。 - 配置环境变量:安装完后,记得在
.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工程,验证环境是否正常。
- 打开Vitis IDE,选择工作空间。
- 点击
File → New → Application Project。 - 选择平台(Platform),如果没有现成的,选
Create a new platform from hardware。 - 选择模板(Template),选
Empty Application。 - 在
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代码是怎么一步步变成硬件电路的。