开发环境搭建:Vivado HLS/Vitis HLS安装、许可证配置、环境变量设置、第一个HLS工程创建
说实话,很多初学者一上来就急着写代码,结果卡在环境搭建上大半天。我见过太多人花了两天装工具,最后发现是许可证没配好。这一章,咱们就把这事一次性搞定。
1. 工具版本选择——别盲目追新
Vivado HLS 和 Vitis HLS 其实是一脉相承的东西。Vivado HLS 是 2019.2 之前的叫法,从 2020.1 开始,Xilinx 把它整合进了 Vitis 统一平台。我个人习惯用 Vitis HLS 2021.1 或 2022.2,这两个版本比较稳定。
选版本时,你想想看:你的开发板是什么芯片?如果是 Zynq-7000 系列,Vivado HLS 2018.3 其实就够用。如果是 Versal 或 Kintex UltraScale+,那得用 Vitis HLS 2021.1 以上。
| 芯片系列 | 推荐工具版本 | 备注 |
|---|---|---|
| Zynq-7000 / Artix-7 | Vivado HLS 2018.3 ~ 2019.2 | 老项目兼容性好 |
| Kintex-7 / Virtex-7 | Vivado HLS 2019.2 | 最后一个纯HLS版本 |
| Zynq UltraScale+ / Kintex UltraScale | Vitis HLS 2020.2 ~ 2021.2 | 推荐2021.1 |
| Versal / AI Engine | Vitis HLS 2022.2+ | 需要配套Vitis统一平台 |
2. 安装流程——三步走
安装其实不复杂,但有几个细节容易翻车。我按步骤拆开讲。
2.1 下载安装包
去 Xilinx 官网下载。注意:需要注册账号,而且下载速度很慢。我建议用 Xilinx Unified Installer,它会把 Vivado、Vitis、HLS 打包在一起。你只需要勾选 Vitis 组件,HLS 会自动包含。
2.2 安装路径
安装路径不要有中文,不要有空格。我习惯装到 C:\Xilinx\Vitis_HLS\2021.1 这种结构。Linux 下建议装到 /opt/Xilinx/ 目录。
嗯,这里要注意:磁盘空间至少留 50GB。Vitis HLS 完整安装大概 30GB,加上后续的 IP 库和例程,50GB 是底线。
2.3 许可证配置——最容易出问题的一步
许可证分两种:Node-Locked(节点锁定)和 Floating(浮动)。个人学习用 Node-Locked 就够了。
我曾经帮一个同事排查问题,他装完工具死活跑不了综合。折腾了两小时,最后发现许可证文件路径配错了。他复制了 .lic 文件,但环境变量指向了另一个空目录。
配置步骤很简单:
- 打开 Xilinx License Manager
- 选择 "Load License"
- 浏览到你的 .lic 文件
- 点 "Activate"
或者手动设置环境变量:
# Windows 下
set XILINXD_LICENSE_FILE=C:\Xilinx\license.lic
# Linux 下
export XILINXD_LICENSE_FILE=/opt/Xilinx/license.lic
vitis_hls -l,如果能看到 "License checked out successfully",那就对了。
3. 环境变量设置——让系统找到工具
安装完工具,系统还不知道它在哪。你需要把工具路径加到 PATH 里。
Windows 用户:
set PATH=C:\Xilinx\Vitis_HLS\2021.1\bin;%PATH%
set PATH=C:\Xilinx\Vivado\2021.1\bin;%PATH%
Linux 用户:
export PATH=/opt/Xilinx/Vitis_HLS/2021.1/bin:$PATH
export PATH=/opt/Xilinx/Vivado/2021.1/bin:$PATH
我个人习惯把这些写到 .bashrc 或 .profile 里,这样每次打开终端就不用重新设了。
4. 第一个HLS工程——从零开始
环境搭好了,咱们来跑个最简单的例子。说白了就是验证一下工具能不能正常工作。
4.1 创建工程
打开命令行,输入:
vitis_hls -i
这会进入交互模式。或者你用 GUI 模式:
vitis_hls -g
在 GUI 里,点 File → New Project。给工程起个名字,比如 hello_hls。选择你的目标芯片型号。如果你不确定,选个通用的 xc7z020 就行,这是 Zynq 7020 的型号。
4.2 写第一个C代码
在工程里新建一个源文件 top.cpp:
#include <ap_int.h>
void add_vectors(int a[4], int b[4], int c[4]) {
#pragma HLS INTERFACE s_axilite port=return
#pragma HLS INTERFACE bram port=a
#pragma HLS INTERFACE bram port=b
#pragma HLS INTERFACE bram port=c
for (int i = 0; i < 4; i++) {
#pragma HLS PIPELINE
c[i] = a[i] + b[i];
}
}
这段代码很简单:两个数组相加。但注意那个 #pragma HLS PIPELINE,它告诉工具把循环流水化。你想想看,如果不加这个,综合出来就是一个周期算一个数,效率很低。
4.3 写测试文件
再建一个 test.cpp:
#include <iostream>
#include "top.cpp"
int main() {
int a[4] = {1, 2, 3, 4};
int b[4] = {5, 6, 7, 8};
int c[4] = {0};
add_vectors(a, b, c);
for (int i = 0; i < 4; i++) {
if (c[i] != a[i] + b[i]) {
std::cout << "Test failed at index " << i << std::endl;
return 1;
}
}
std::cout << "Test passed!" << std::endl;
return 0;
}
4.4 运行综合和仿真
在 GUI 里,点 Project → Run C Simulation。如果看到 "Test passed!",说明 C 仿真通过了。
然后点 Solution → Run C Synthesis → Active Solution。等几分钟,你会看到综合报告。
5. 知识体系总览
这一章的内容,说白了就是一条线:从下载安装,到配许可证,再到跑通第一个工程。我画了个图帮你理清思路。
6. 避坑指南——我踩过的雷
- 许可证过期: 我曾经在项目交付前一天发现许可证过期了。后来我学乖了,每次装完工具第一件事就是检查许可证有效期。
- 路径有中文: 有个学员装在了 "D:\项目\HLS工具" 目录下,结果综合一直报错。改成英文路径就好了。
- 版本不匹配: 用 Vitis HLS 2022.2 打开 2019.2 的工程,有些 pragma 会报错。建议同一个项目固定一个版本。
- 磁盘空间不足: 综合过程中会产生大量中间文件。我建议至少留 20GB 空闲空间。
vitis_hls -l 确认许可证正常。这步花不了 10 秒,但能省下后面排查问题的一小时。
好了,环境搭建这块就这些。你按这个流程走一遍,应该半小时内就能跑通第一个 HLS 工程。记住,工具只是手段,关键是后面怎么用它写出高效的硬件加速代码。