2. 开发环境搭建:Vivado与Vitis安装配置、开发板连接与验证、SDK环境初始化
说实话,很多初学者在Zynq上栽跟头,不是因为芯片多难,而是环境没搭好就开始写代码。我见过有人折腾了一周,最后发现是驱动装错了版本。这一章,咱们就把地基打牢。
Zynq的开发环境,说白了就是两件套:Vivado 负责硬件设计(PL端),Vitis 负责软件开发(PS端)。从2019.2版本开始,Xilinx把SDK整合进了Vitis,但底层逻辑没变。我个人习惯用2020.2或2021.1,这两个版本比较稳定,踩过的坑少。
核心要点:Vivado + Vitis 的版本必须严格一致。混装版本会导致编译链不匹配,你连Hello World都跑不起来。
2.1 软件安装与版本选择
先说说版本选择。Xilinx每年出一个大版本,比如2020.2、2021.1。我建议你选偶数年的小版本,比如2020.2、2022.1。为什么呢?因为奇数年的初版往往有坑,我在2021.1上就遇到过Vivado仿真器崩溃的问题,后来打了补丁才解决。
安装流程其实不复杂,但有几个关键点要注意:
- 安装路径不要有中文和空格。C:\Xilinx 或者 D:\Xilinx 都行,别搞什么“我的工具”这种目录。
- 选择安装组件时,勾选“Vivado”和“Vitis”两个大类。如果你做Zynq,记得把“Zynq-7000”器件库选上,默认是不全选的。
- 安装时间很长,大概1-2小时。去喝杯咖啡,或者看看文档。
| 组件 | 说明 | 是否必选 |
|---|---|---|
| Vivado | 硬件设计、综合、实现、比特流生成 | 是 |
| Vitis | 软件编译、调试、SDK环境 | 是 |
| DocNav | 离线文档浏览器 | 推荐 |
| PetaLinux | Linux系统构建工具 | 按需 |
小技巧:安装完成后,建议把Vivado的快捷方式固定到任务栏。你后面会频繁打开它,每次去开始菜单翻找很浪费时间。
2.2 开发板连接与驱动验证
软件装好了,接下来就是连板子。我用的比较多的是ZedBoard和Zynq-7020开发板。连接步骤其实很简单:
- 用Micro USB线连接开发板的JTAG/UART口到电脑。
- 插上12V电源,按下电源开关。
- 观察板子上的LED,正常的话会亮起。
但这里有个坑——驱动。Windows系统不会自动识别Xilinx的USB-JTAG驱动。你需要手动安装。我记得第一次装的时候,设备管理器里显示的是“未知设备”,折腾了半天才发现是驱动没装对。
驱动安装方法:
- 打开Vivado安装目录下的
data\xicom\cable_drivers\nt64\文件夹。 - 右键
install_drivers.cmd,选择“以管理员身份运行”。 - 等待提示“驱动安装成功”。
验证驱动是否装好:打开设备管理器,你应该能看到 “Digilent USB Device” 或者 “Xilinx USB Cable” 这样的设备。如果没有,重启电脑再试一次。
注意:如果你用的是Windows 10/11,记得关闭驱动强制签名。否则驱动装不上。具体方法:重启时按F8,选择“禁用驱动程序强制签名”。
2.3 Vivado硬件工程创建与验证
驱动搞定了,咱们来创建一个最简单的硬件工程,验证环境是否通。
打开Vivado,点击 Create Project。项目名称我习惯用 led_test,路径别太长。选择 RTL Project,然后选芯片型号。以Zynq-7020为例,型号是 xc7z020clg484-1。
创建完成后,添加一个Verilog源文件:
module led_test(
input wire clk,
input wire rst_n,
output reg [3:0] led
);
reg [31:0] cnt;
always @(posedge clk or negedge rst_n) begin
if (!rst_n)
cnt <= 32'd0;
else
cnt <= cnt + 1'b1;
end
always @(posedge clk or negedge rst_n) begin
if (!rst_n)
led <= 4'b0001;
else if (cnt == 32'd50_000_000)
led <= {led[2:0], led[3]};
end
endmodule
然后添加约束文件,把时钟、复位和LED引脚分配好。以ZedBoard为例:
set_property PACKAGE_PIN Y9 [get_ports clk]
set_property IOSTANDARD LVCMOS33 [get_ports clk]
set_property PACKAGE_PIN F22 [get_ports rst_n]
set_property IOSTANDARD LVCMOS33 [get_ports rst_n]
set_property PACKAGE_PIN T22 [get_ports {led[0]}]
set_property PACKAGE_PIN T21 [get_ports {led[1]}]
set_property PACKAGE_PIN U22 [get_ports {led[2]}]
set_property PACKAGE_PIN U21 [get_ports {led[3]}]
set_property IOSTANDARD LVCMOS33 [get_ports {led[*]}]
点击 Generate Bitstream,等几分钟。如果综合和实现都通过,说明Vivado环境没问题。
验证结果:下载比特流到板子,你应该能看到LED在流水灯效果。如果没反应,检查约束文件里的引脚编号是否和你的板子一致。
2.4 Vitis环境初始化与Hello World
硬件验证通过后,咱们来初始化Vitis环境。Vitis本质上是一个基于Eclipse的IDE,但做了大量定制。
在Vivado中,先导出硬件描述文件:
- 点击 File → Export → Export Hardware
- 勾选 Include bitstream
- 保存为
.xsa文件
然后打开Vitis,工作空间我习惯放在项目目录下的 vitis_workspace 文件夹。点击 Create Application Project,选择刚才导出的 .xsa 文件。
在模板选择界面,选 Hello World 模板。Vitis会自动生成一个简单的C工程:
#include <stdio.h>
#include "platform.h"
int main()
{
init_platform();
print("Hello World\n\r");
cleanup_platform();
return 0;
}
点击编译,然后右键工程选择 Run As → Launch on Hardware (Single Application Debug)。如果一切正常,Vitis的Console窗口会打印出 Hello World。
经验之谈:第一次下载程序时,如果提示“无法连接JTAG”,别慌。检查一下板子电源、USB线是否插紧。我遇到过好几次,都是USB线接触不良导致的。
2.5 环境验证全流程SVG
下面这张图总结了从安装到验证的完整流程,你可以对照着检查自己的环境:
2.6 常见问题与避坑指南
环境搭建过程中,我遇到过不少问题。挑几个典型的说说:
- Vivado闪退:通常是显卡驱动问题。更新显卡驱动,或者在Vivado启动时加
--disable-gpu参数。 - Vitis编译报错“undefined reference to”:检查BSP配置,看外设驱动是否添加完整。
- JTAG连接失败:先检查驱动,再检查线缆。我有一根USB线只能充电不能传数据,坑了我一下午。
- 比特流下载后板子没反应:检查约束文件里的引脚编号,特别是时钟引脚。很多开发板的时钟引脚是固定的,别搞错了。
重要提醒:每次更换开发板型号,都要重新导出硬件描述文件(.xsa)。Vitis工程是基于这个文件生成的,板子变了,硬件描述也得变。
嗯,环境搭建这部分就这些。你跟着步骤走,应该半小时内就能跑通。如果卡住了,回头看看SVG流程图,确认自己到哪一步了。环境通了,后面写代码才踏实。