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仿真器崩溃的问题,后来打了补丁才解决。

安装流程其实不复杂,但有几个关键点要注意:

  1. 安装路径不要有中文和空格。C:\Xilinx 或者 D:\Xilinx 都行,别搞什么“我的工具”这种目录。
  2. 选择安装组件时,勾选“Vivado”和“Vitis”两个大类。如果你做Zynq,记得把“Zynq-7000”器件库选上,默认是不全选的。
  3. 安装时间很长,大概1-2小时。去喝杯咖啡,或者看看文档。
组件 说明 是否必选
Vivado 硬件设计、综合、实现、比特流生成 是
Vitis 软件编译、调试、SDK环境 是
DocNav 离线文档浏览器 推荐
PetaLinux Linux系统构建工具 按需

小技巧:安装完成后,建议把Vivado的快捷方式固定到任务栏。你后面会频繁打开它,每次去开始菜单翻找很浪费时间。

2.2 开发板连接与驱动验证

软件装好了,接下来就是连板子。我用的比较多的是ZedBoard和Zynq-7020开发板。连接步骤其实很简单:

  1. 用Micro USB线连接开发板的JTAG/UART口到电脑。
  2. 插上12V电源,按下电源开关。
  3. 观察板子上的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

下面这张图总结了从安装到验证的完整流程,你可以对照着检查自己的环境:

Zynq开发环境搭建与验证流程 1. 软件安装 Vivado + Vitis 版本一致 路径无中文 2. 驱动安装 USB-JTAG驱动 设备管理器验证 关闭驱动签名 3. 硬件验证 创建RTL工程 综合/实现 下载比特流 4. 导出硬件描述 Export Hardware 生成 .xsa 文件 5. 软件验证 Hello World 打印 LED流水灯 硬件验证通过后

2.6 常见问题与避坑指南

环境搭建过程中,我遇到过不少问题。挑几个典型的说说:

  • Vivado闪退:通常是显卡驱动问题。更新显卡驱动,或者在Vivado启动时加 --disable-gpu 参数。
  • Vitis编译报错“undefined reference to”:检查BSP配置,看外设驱动是否添加完整。
  • JTAG连接失败:先检查驱动,再检查线缆。我有一根USB线只能充电不能传数据,坑了我一下午。
  • 比特流下载后板子没反应:检查约束文件里的引脚编号,特别是时钟引脚。很多开发板的时钟引脚是固定的,别搞错了。

重要提醒:每次更换开发板型号,都要重新导出硬件描述文件(.xsa)。Vitis工程是基于这个文件生成的,板子变了,硬件描述也得变。

嗯,环境搭建这部分就这些。你跟着步骤走,应该半小时内就能跑通。如果卡住了,回头看看SVG流程图,确认自己到哪一步了。环境通了,后面写代码才踏实。