2. 开发环境搭建:Vivado安装与配置、Vitis IDE安装、SDK环境准备、驱动与库文件安装

说实话,很多初学者一上来就急着写代码,结果卡在环境搭建上大半天。我见过不少同事,装完Vivado发现编译报错,折腾两天才发现是路径带中文。嗯,这一章咱们就把这些坑提前填上。

本章核心目标:在Windows或Linux系统上,完整搭建Zynq开发所需的工具链——从Vivado硬件设计、Vitis软件IDE,到驱动库文件,一步到位。

2.1 工具链全景:你需要装哪些东西?

Zynq平台开发,说白了就是“软硬协同”。硬件部分用Vivado画FPGA逻辑,软件部分用Vitis写ARM代码。我习惯把整个工具链分成三层:

层级 工具/组件 作用
硬件设计层 Vivado HLx FPGA逻辑综合、布局布线、生成比特流
软件开发层 Vitis IDE ARM处理器代码编写、编译、调试
驱动与库层 Xilinx SDK / 驱动库 外设驱动、BSP、中间件

你想想看,这三层缺一不可。Vivado负责把FPGA加速器“画”出来,Vitis负责让ARM核“跑”起来,驱动库则是两者之间的桥梁。我在一个项目里试过只装Vivado不装Vitis,结果ARM端代码没法调试,白白浪费了两天。

Zynq 开发工具链架构 硬件设计层:Vivado HLx 逻辑综合 · 布局布线 · 比特流生成 · IP集成 软件开发层:Vitis IDE C/C++编译 · 调试 · 性能分析 · 系统配置 驱动与库层:SDK / BSP / 驱动库 先装Vivado 再装Vitis 最后装驱动

2.2 Vivado安装与配置

Vivado的安装包很大,动辄几十个GB。我个人习惯从Xilinx官网下载“Vivado HLx”完整版,而不是WebPACK版——因为完整版包含了所有器件支持,省得以后扩展时再补装。

2.2.1 安装步骤

  1. 下载安装包:访问AMD/Xilinx官网,选择Vivado HLx 202x.x版本。建议用2022.2或2023.1,这两个版本我实测比较稳定。
  2. 运行安装程序:Windows下以管理员身份运行,Linux下用./xsetup。
  3. 选择版本:选“Vivado HL Design Edition”或“Vivado HL System Edition”。System Edition多了System Generator,做DSP加速时很有用。
  4. 选择器件:至少勾选“Zynq-7000”系列。如果你用Zynq UltraScale+,记得勾上对应的器件包。
  5. 安装路径:不要有中文!不要有空格! 我习惯用C:\Xilinx\Vivado\2023.1这样的路径。

我曾经踩过的坑:安装路径带了中文,结果Vivado启动时一直报“找不到许可证文件”。折腾了一下午才发现是路径编码问题。从那以后,所有EDA工具的安装路径我都只用英文和数字。

2.2.2 许可证配置

Vivado需要许可证才能使用。如果你有正版License,直接加载.lic文件。如果是学生或评估用途,可以申请免费WebPACK License——虽然器件支持有限,但Zynq-7000系列基本都覆盖了。

配置方法:打开Vivado → Help → Manage License → Load License。嗯,这一步很简单,但别忘了把License文件放在纯英文路径下。

2.3 Vitis IDE安装

Vitis是Xilinx新一代的统一软件开发平台。它取代了老旧的SDK,但底层还是基于Eclipse。我个人觉得Vitis的界面比SDK清爽不少,编译速度也有提升。

2.3.1 安装方式

Vitis通常随Vivado一起安装。在Vivado安装程序的“Select Edition”页面,勾选“Vitis”即可。如果你单独下载,注意版本必须与Vivado一致——比如Vivado 2023.1配Vitis 2023.1,混搭会出问题。

小技巧:安装完成后,建议把Vitis的workspace目录放在SSD上。我试过放在机械硬盘上,工程大了以后打开速度慢得让人抓狂。

2.3.2 首次启动配置

第一次打开Vitis,它会让你选择Workspace路径。我习惯为每个项目单独建一个Workspace,比如D:\Projects\Zynq_Accel\workspace。这样不同项目之间不会互相干扰。

启动后,Vitis会自动检测Vivado的安装路径。如果检测不到,手动设置一下:Window → Preferences → Xilinx → Vivado Settings,指向Vivado的安装目录。

2.4 SDK环境准备

虽然Vitis是主流,但有些老项目或特定IP核仍然依赖Xilinx SDK(Software Development Kit)。如果你需要维护旧工程,SDK还是得备着。

2.4.1 SDK与Vitis的关系

特性 Xilinx SDK Vitis IDE
底层框架 Eclipse 4.x Eclipse 4.x(升级版)
支持语言 C/C++ C/C++、Python、OpenCL
调试器 XSDB + GDB XSDB + GDB(增强)
适用场景 传统Zynq开发 加速算法、AI推理、异构计算

说白了,如果你做的是纯嵌入式开发(裸机或Linux),SDK完全够用。但如果你要用FPGA做算法加速,Vitis是更好的选择——它原生支持OpenCL和HLS,能直接把C代码映射到FPGA上。

2.4.2 安装SDK

SDK通常作为Vivado的组件安装。在Vivado安装程序里,勾选“SDK”即可。安装完成后,你可以在开始菜单找到“Xilinx SDK 2023.1”。

注意:SDK和Vitis可以共存。我一般两个都装,SDK用来维护旧项目,Vitis用来做新项目。但别同时打开,否则调试器端口会冲突。

2.5 驱动与库文件安装

环境搭好了,还得让PC能识别Zynq开发板。这一步就是装驱动和库文件。

2.5.1 JTAG驱动

Zynq开发板通常通过JTAG(如Digilent HS2、Xilinx Platform Cable USB)连接PC。驱动装不好,Vivado就认不到板子。

  • Windows:插上JTAG线,系统会自动安装驱动。如果失败,去C:\Xilinx\Vivado\2023.1\data\xicom\cable_drivers\nt64手动运行install_drivers.exe。
  • Linux:需要配置udev规则。Xilinx提供了脚本,运行sudo <Vivado安装路径>/data/xicom/cable_drivers/lin64/install_script/install_drivers.sh。

我曾经踩过的坑:在Ubuntu 22.04上装驱动,发现脚本报错“libusb版本不兼容”。后来手动装了libusb-1.0-0-dev才解决。如果你也遇到类似问题,试试sudo apt install libusb-1.0-0-dev。

2.5.2 板级支持包(BSP)

BSP是连接硬件和软件的桥梁。Xilinx官方为常见开发板(如ZedBoard、ZCU102)提供了现成的BSP。你可以在Vitis里创建工程时直接选择对应的Board Support Package。

如果用的是自研板,需要自己生成BSP。方法:在Vivado里导出硬件描述文件(.xsa),然后在Vitis里基于.xsa文件生成BSP。这一步我会在第4章详细讲。

2.5.3 驱动库文件

Xilinx提供了丰富的驱动库,比如:

  • Xilinx Standalone Library:裸机驱动,包含GPIO、UART、SPI、I2C等外设驱动。
  • Xilinx Linux Library:Linux下的驱动,包括UIO、DMA、FPGA管理器等。
  • OpenCV for Vitis:做图像加速时必备的库。

这些库在Vitis安装时默认会带上。你可以在<Vitis安装路径>/Vitis/2023.1/data/embeddedsw下找到源码。嗯,我建议你把它们加到工程里,而不是自己从头写驱动——省时省力,还稳定。

2.6 环境验证:跑一个Hello World

装完所有东西,怎么知道环境对不对?我的习惯是跑一个最简单的Hello World程序。

  1. 打开Vivado,创建一个Zynq最小系统(只包含PS和AXI接口)。
  2. 生成比特流,导出硬件到Vitis。
  3. 在Vitis里创建Application Project,选“Hello World”模板。
  4. 编译、下载、运行。

如果串口打印出“Hello World”,恭喜你,环境搭建成功!

小技巧:第一次跑Hello World时,记得检查串口波特率。Zynq默认是115200,但有些开发板用的是9600。我就在这上面浪费过半小时——程序跑得好好的,串口助手波特率设错了,死活看不到输出。

2.7 常见问题与避坑

  • Vivado启动报错“无法找到MSVCR120.dll”:安装Visual C++ Redistributable for Visual Studio 2013即可。
  • Vitis编译时报错“undefined reference to XGpio_ConfigTable”:检查BSP是否包含GPIO驱动,或者手动添加#include "xgpio.h"。
  • JTAG连接不上开发板:先检查驱动,再检查板子供电。我遇到过好几次,板子没上电就插JTAG,结果Vivado一直报“No cable connected”。