3. 开发环境搭建

Zynq 平台的开发环境不是“装一个 IDE”那么简单,而是由硬件设计、软件工程、Linux 系统构建、板级调试四条工具链协同组成。以 AMD 官方工具为例,Vivado 负责 PL 逻辑与 Block Design,Vitis 负责裸机/独立应用与异构程序,PetaLinux 负责 Linux 镜像与设备树,而 JTAG 与串口则构成从主机到目标板的物理调试通道。本节按“工具职责—安装要点—链路连接—验证方法”的顺序展开,帮助读者搭起一条可复现的最小开发链路。

一、四条工具链的职责边界

先明确各工具在工程中的位置,避免混用:

  • Vivado:完成 Zynq PS 配置(DDR、时钟、MIO、外设使能)、PL 逻辑设计、约束与综合实现,最终导出 .xsa 硬件描述文件。它是所有后续工具的“源头”。
  • Vitis:导入 .xsa,创建平台工程(Platform Project)与应用工程(Application Project),支持裸机(standalone)与 Linux 应用开发,并生成 FSBL、BOOT.bin 等启动文件。
  • PetaLinux:基于 Yocto 构建 Linux 内核、根文件系统、设备树与启动镜像,输出 BOOT.BIN、image.ub、rootfs,适合网关类需要完整 Linux 的场景。
  • SDK/IDE:旧版 Xilinx SDK 已被 Vitis 取代,但许多存量工程仍以 SDK 工程形式存在;理解其与 Vitis 的对应关系有助于迁移旧项目。

四者关系可用下图表示:Vivado 输出硬件描述,Vitis 与 PetaLinux 分别消费它生成软件与系统镜像,最终通过 JTAG/串口落到板卡上运行。

Zynq 开发环境四条工具链与调试链路 Vivado PS 配置 / PL 逻辑 导出 .xsa Vitis 平台工程 / 应用工程 FSBL / BOOT.bin PetaLinux 内核 / 设备树 / rootfs image.ub .xsa .xsa(硬件描述) Zynq 目标板 PS + PL / DDR / 外设 下载 / 调试 启动镜像 JTAG 调试器 下载 bit / 断点 / 寄存器 USB-UART 串口 115200 8N1 / 控制台 主机侧工具链 → 目标板:JTAG 负责下载与调试,串口负责运行日志与交互

二、安装与版本选择

AMD 工具对版本匹配非常敏感。建议 Vivado、Vitis、PetaLinux 使用同一大版本(例如统一为 2022.2 或 2023.2),否则 .xsa 导入、设备树生成、FSBL 编译都可能报错。安装时注意:

  • Vivado 安装勾选 Zynq-7000 与 Zynq UltraScale+ 器件系列,避免后续无法综合。
  • Vitis 通常随 Vivado 一起安装,也可单独安装;确认包含“Embedded Software Development”组件。
  • PetaLinux 是独立安装包,依赖主机上的 bash、python3、gcc、git、tar、cpio 等,官方提供 petalinux-util 依赖检查脚本。
  • Linux 主机建议 Ubuntu 20.04/22.04 LTS,磁盘预留 200 GB 以上,因为 PetaLinux 构建缓存较大。
若主机为 Windows,PetaLinux 需在 WSL2 或独立 Linux 虚拟机中运行;Vivado/Vitis 可在 Windows 原生运行,但跨系统共享 .xsa 时注意路径与换行符。

三、JTAG 与串口调试链路

JTAG 与串口是两条独立但互补的通道,实际调试中通常同时连接:

通道物理接口主要用途典型参数
JTAG板载 14 针或 2×5 排针,接 Platform Cable USB / Digilent HS2下载 bitstream、FSBL 调试、CPU 断点、寄存器与内存查看频率 1–10 MHz,Vivado/Vitis 中设置
串口USB-UART 桥(CP210x / FT232)U-Boot 与 Linux 控制台、启动日志、登录交互115200 bps,8 数据位,无校验,1 停止位

连接顺序建议:先接 JTAG,再接串口,最后上电。上电前用 lsusb(Linux)或设备管理器(Windows)确认调试器与串口芯片均被识别。Linux 下串口设备通常为 /dev/ttyUSB0 或 /dev/ttyUSB1,可用以下命令打开:

# 查看串口设备
ls /dev/ttyUSB*

# 以 115200 8N1 打开串口(minicom)
sudo minicom -D /dev/ttyUSB0 -b 115200

# 或使用 picocom
sudo picocom -b 115200 /dev/ttyUSB0

若串口无输出,先确认波特率、线序(TX/RX 是否交叉)、板卡是否已上电,以及 U-Boot 是否配置了正确的 console 设备。JTAG 侧则可在 Vivado Hardware Manager 中执行 Open Target → Auto Connect,若能识别到 xc7z020 等器件 ID,说明 JTAG 链路正常。

四、最小验证流程

环境搭好后,建议用一条最小链路验证四件工具是否贯通:

  1. 在 Vivado 中新建 Zynq 工程,仅使能 UART1 与 DDR,生成 .xsa。
  2. 在 Vitis 中导入 .xsa,创建 Hello World 应用,编译生成 .elf。
  3. 通过 JTAG 下载 bitstream 与 .elf,在串口终端应看到 “Hello World” 输出。
  4. 若需 Linux,则在 PetaLinux 中 petalinux-create 工程、petalinux-config --get-hw-description 导入 .xsa,构建后在串口看到内核启动日志。
常见问题:Vitis 导入 .xsa 报“hardware handoff 版本不匹配”,通常是 Vivado 与 Vitis 版本不一致;串口乱码多为波特率或时钟配置错误;JTAG 无法识别器件则检查排线方向与目标板供电。