2. 开发环境搭建:Vivado + Vitis 统一开发平台安装、许可证配置、硬件描述语言(Verilog/VHDL)与C/C++混合工程创建
说实话,很多初学者一上来就急着写代码,结果卡在环境搭建上好几个小时。我当年第一次装Vivado时,光许可证就折腾了一整天。嗯,这节课咱们就把这事彻底捋清楚。
2.1 统一开发平台:Vivado + Vitis 到底是什么关系?
先搞清楚一个概念。Vivado和Vitis,其实是同一套工具链的两个面孔。
- Vivado:负责硬件端。写Verilog/VHDL、做综合、布局布线、生成比特流。说白了,就是管FPGA那部分。
- Vitis:负责软件端。写C/C++、编译、调试ARM核上的程序。它取代了老版的SDK。
这两者怎么配合?我画个图你就明白了。
你看,左边Vivado管硬件,右边Vitis管软件。中间通过导出的硬件描述文件(.xsa)连接起来。我个人习惯是先跑通硬件,再写软件,这样调试时心里有底。
2.2 安装流程:别踩这些坑
安装其实不复杂,但有几个地方容易翻车。我一个个说。
2.2.1 下载与安装
- 去官网下载:Xilinx官网,找Vivado ML Edition。建议下载WebPACK版本,免费且够用。
- 选择组件:安装时勾选“Vivado”和“Vitis”。别漏了Vitis,不然你后面没法写C代码。
- 磁盘空间:这个要重点说。完整安装大概需要100GB以上。我建议至少留150GB。曾经有个学员装到一半磁盘满了,结果重装了一下午。
- 安装路径:不要有中文!不要有空格!老老实实用
C:\Xilinx或/opt/Xilinx。
⚠️ 注意:安装过程中会提示安装驱动。务必选择“是”。否则你的开发板插上电脑后,系统认不出来。
2.2.2 许可证配置
许可证这事,我当年被坑过。这里直接给标准流程:
| 步骤 | 操作 | 说明 |
|---|---|---|
| 1 | 打开Vivado → Help → Obtain License | 会跳转到Xilinx官网 |
| 2 | 注册账号,申请免费WebPACK License | 用公司或学校邮箱,个人邮箱也行 |
| 3 | 下载 .lic 文件 | 会发到你邮箱,或者直接在页面下载 |
| 4 | Vivado → Help → Manage License → Load License | 选择刚才下载的 .lic 文件 |
| 5 | 确认状态显示“WebPACK” | 绿色勾就对了 |
💡 小技巧:如果你在公司内网,可能无法直接访问官网。可以先用手机热点下载 .lic 文件,再拷到电脑上加载。我出差时经常这么干。
2.3 创建第一个混合工程:Verilog + C
好,环境装好了,许可证也配好了。咱们来创建一个真正的混合工程。说白了,就是让FPGA上的逻辑和ARM上的程序能互相通信。
2.3.1 在Vivado中创建硬件工程
- 打开Vivado → Create Project → 选“RTL Project”
- 选择芯片:比如
xc7z020clg400-1(Zynq-7020) - 添加一个Verilog文件:
led_blink.v
写一段最简单的LED闪烁代码:
// led_blink.v
module led_blink (
input wire clk, // 50MHz 时钟
input wire rst_n, // 复位,低有效
output reg [3:0] led // 4个LED
);
reg [31:0] cnt;
always @(posedge clk or negedge rst_n) begin
if (!rst_n) begin
cnt <= 32'd0;
led <= 4'b0000;
end else begin
cnt <= cnt + 1;
// 每 50M 个时钟翻转一次(约1秒)
if (cnt == 32'd49_999_999) begin
cnt <= 32'd0;
led <= ~led;
end
end
end
endmodule
这段代码很简单。但我要提醒你:实际项目中,计数器宽度和时钟频率一定要算清楚。我见过有人把50MHz算成50,000,000,结果少了个0,LED闪得跟频闪灯似的。
2.3.2 综合、实现、生成比特流
在Vivado里点“Generate Bitstream”。等几分钟。如果报错,多半是时序问题。嗯,这个后面章节会细讲。
2.3.3 导出硬件到Vitis
- File → Export → Export Hardware → 勾选“Include bitstream”
- 生成 .xsa 文件(比如
design_1_wrapper.xsa) - Launch Vitis
2.3.4 在Vitis中创建软件工程
- Vitis中:Create Application Project
- 选择刚才导出的 .xsa 文件
- 选择模板:Hello World(或者Empty Application)
- 写C代码控制LED:
// main.c
#include <stdio.h>
#include "xparameters.h"
#include "xgpio.h"
XGpio Gpio; // GPIO 实例
int main() {
int status;
u32 led_value = 0;
// 初始化GPIO
status = XGpio_Initialize(&Gpio, XPAR_GPIO_0_DEVICE_ID);
if (status != XST_SUCCESS) {
printf("GPIO初始化失败!\n");
return XST_FAILURE;
}
// 设置方向:输出
XGpio_SetDataDirection(&Gpio, 1, 0x00);
printf("LED测试开始...\n");
while (1) {
led_value = ~led_value; // 翻转
XGpio_DiscreteWrite(&Gpio, 1, led_value);
sleep(1); // 延时1秒
}
return 0;
}
🔑 关键点:硬件(Verilog)和软件(C)通过AXI总线通信。Vivado里把GPIO模块挂到AXI总线上,Vitis里通过API读写。这就是“协同设计”的核心。
2.4 避坑指南:我踩过的雷
- 版本匹配问题:Vivado和Vitis必须是同一版本。2023.1的Vivado配2023.1的Vitis。混搭会报莫名其妙错。我曾经用2022.2的Vivado配2023.1的Vitis,折腾了两天才发现是版本问题。
- 路径不要有中文:工程路径、用户名、文件夹名,统统用英文。Vivado对中文支持很差。
- 防火墙拦截:第一次加载许可证时,防火墙可能会拦截。关掉防火墙再试。
- JTAG驱动:如果开发板连不上,去设备管理器看看驱动。Xilinx的USB驱动有时需要手动安装。
2.5 验证:下载到开发板
最后一步,把硬件和软件一起下载到板子上。
- 在Vivado里:Open Hardware Manager → Auto Connect → Program Device
- 选择 .bit 文件,下载
- 在Vitis里:Run As → Launch on Hardware
- 看到LED闪烁了吗?如果闪了,恭喜你,环境搭建成功!
💡 如果LED不亮:先检查复位引脚。很多开发板的复位是低有效,代码里要对应。另外,检查一下板子的跳线,确保时钟源正确。
好了,环境搭建就到这里。这套流程你走一遍,后面所有章节的实验都能跑起来。记住:硬件是骨架,软件是灵魂,两者缺一不可。
公众号:蓝海资料掘金营,微信deep3321