2、开发环境搭建:安装Vivado、SDK、PetaLinux,配置JTAG和串口,验证开发板连接
Zynq嵌入式系统开发的核心在于同时驾驭ARM处理器(PS端)与FPGA可编程逻辑(PL端),而这一切的起点是构建一套可靠、版本匹配的开发环境。本章将系统讲解Vivado、SDK(现集成于Vitis)、PetaLinux三大工具的安装要点,并深入剖析JTAG与UART串口的硬件连接原理与验证方法。环境搭建的成败往往不取决于软件安装本身,而在于对硬件链路(USB-JTAG桥接、电平转换、时钟复位)的深刻理解。我们将通过一个完整的“从零到点亮”的实战案例,确保你的开发板能够被主机稳定识别并完成数据交互。
上图展示了Zynq开发环境搭建的核心硬件链路。主机通过一根USB线缆连接开发板上的FTDI FT2232H芯片,该芯片将USB协议转换为两路独立通道:Channel A用于JTAG调试(TCK/TMS/TDI/TDO),Channel B用于UART串口通信(TX/RX)。这两路信号分别连接到Zynq芯片的JTAG TAP控制器和PS端的UART控制器(MIO14/15)。理解这条链路是排障的基础——当开发板无法识别时,问题可能出现在USB驱动、FTDI芯片供电、JTAG信号完整性或Zynq电源时钟等多个环节。
2.1 核心原理:三大工具的分工与版本协同
Vivado、SDK(Vitis)与PetaLinux在Zynq开发中扮演着不同角色,但它们必须基于同一版本体系协同工作。Vivado负责PL端的逻辑设计、综合与比特流生成,同时也能创建PS端的硬件描述文件(XSA)。SDK(2019.2及以后版本为Vitis)运行在Vivado之上,用于编写、编译和调试ARM核的裸机或Linux应用代码。PetaLinux则是针对Xilinx SoC定制的嵌入式Linux构建工具,它依赖Vivado生成的XSA文件来配置内核设备树和启动镜像。
| 工具 | 主要功能 | 输出产物 | 版本要求 |
|---|---|---|---|
| Vivado | PL逻辑设计、综合、实现、比特流生成 | .bit, .xsa | 2020.1及以上 |
| Vitis/SDK | PS端C/C++开发、调试、裸机BSP | .elf, .bin | 与Vivado同版本 |
| PetaLinux | Linux内核、根文件系统、U-Boot构建 | BOOT.BIN, image.ub | 需匹配Vivado版本 |
版本匹配是环境搭建中最容易忽视的坑。例如,Vivado 2020.1对应的PetaLinux版本是2020.1,如果混用2020.2的PetaLinux与2020.1的Vivado,生成的XSA文件可能无法被正确解析。建议在安装前查阅Xilinx官方《UG1144》文档中的版本兼容表。
2.2 操作流程:从安装到验证的完整步骤
环境搭建遵循“先软件后硬件,先驱动后工具”的原则。以下是经过验证的标准化流程:
- 安装Vivado/Vitis:下载“Vivado HLx 2020.1: All OS installer”,选择“Vivado ML Enterprise”或“Vitis”平台,勾选“Zynq-7000”器件支持。安装路径避免中文和空格,建议C:\Xilinx。安装完成后,务必运行“Cable Drivers”安装程序(位于安装目录\data\xicom\cable_drivers\nt64\dlc10_win7.exe),这是识别JTAG的关键。
- 安装PetaLinux:PetaLinux仅支持Linux主机(Ubuntu 18.04/20.04)。下载PetaLinux 2020.1安装包,执行
./petalinux-v2020.1-final-installer.run,默认安装到/opt/pkg/petalinux。安装前需安装依赖库:sudo apt-get install -y gcc git make net-tools libncurses5-dev tftpd zlib1g-dev libssl-dev flex bison libselinux1 gnupg wget diffstat chrpath socat xterm autoconf libtool tar unzip texinfo zlib1g-dev gcc-multilib build-essential zlib1g-dev:i386 screen pax gzip。 - 配置JTAG驱动:在Windows设备管理器中,确认“Xilinx USB Cable”出现在“通用串行总线控制器”下。若出现黄色感叹号,手动更新驱动指向C:\Xilinx\Vivado\2020.1\data\xicom\cable_drivers\nt64\。Linux下需添加用户到dialout组:
sudo usermod -a -G dialout $USER。 - 连接开发板:使用Micro-USB线连接PC与开发板的“PROG/UART”接口。打开开发板电源,观察电源指示灯(通常为绿色)亮起。
- 验证JTAG链路:打开Vivado,点击“Open Hardware Manager”->“Open Target”->“Auto Connect”。若成功,将显示设备ID“xc7z020_1”和“xc7z020_2”(PS与PL各一个TAP)。
- 验证串口:在设备管理器中查看“Ports (COM & LPT)”,应出现“USB Serial Port (COMx)”和“USB Serial Port (COMy)”。COMx对应JTAG,COMy对应UART。使用MobaXterm或PuTTY连接COMy,波特率115200,数据位8,停止位1,无校验。
get_hardware_devices,应返回类似xc7z020_1和xc7z020_2的列表。若返回为空,检查USB线是否为数据线(而非仅充电线),并尝试更换USB端口。
2.3 案例拆解:从零到点亮PS端LED的完整闭环
本案例的目标是验证整个工具链和硬件链路是否畅通,最终实现通过PS端MIO控制LED闪烁。我们选用ZedBoard开发板(XC7Z020-CLG484),该板卡具有板载FTDI芯片和两个LED(MIO7和MIO8)。
背景与约束:主机为Windows 10 64位,Vivado 2020.1,开发板通过USB线连接。初始现象是Vivado无法识别设备,设备管理器显示“未知USB设备”。
分析判断过程:首先检查USB线缆,更换为已知良好的数据线后问题依旧。接着检查FTDI芯片供电,用万用表测量板载3.3V测试点,电压正常。怀疑是驱动未正确安装,手动更新驱动指向Vivado安装目录下的cable_drivers,系统提示“驱动已是最新”,但设备仍异常。最后发现是Windows的驱动签名策略阻止了未签名驱动的加载,需在启动时按F8选择“禁用驱动程序强制签名”。
实际操作步骤:
- 重启电脑,开机时按F8进入高级启动选项,选择“禁用驱动程序强制签名”。
- 重新连接开发板,设备管理器自动识别为“Xilinx USB Cable”,并分配COM端口。
- 打开Vivado 2020.1,创建RTL工程,添加Zynq PS核(ZYNQ7 Processing System),保持默认配置。
- 在PS配置中,使能UART1(MIO14/15)和GPIO MIO7/MIO8为输出。
- 生成比特流,导出硬件到SDK(File->Export Hardware,勾选“Include bitstream”)。
- 在SDK中创建“Application Project”,模板选择“Hello World”,修改代码为循环翻转MIO7和MIO8。
- 连接开发板,下载比特流和ELF文件,观察LED以约1Hz频率闪烁。
结果对比:驱动修复前,Vivado无法连接目标;修复后,硬件管理器显示两个设备ID,串口终端输出“Hello World”和LED闪烁日志。整个排障耗时约40分钟,其中驱动签名问题占30分钟。
风险与代价:禁用驱动签名会降低系统安全性,仅建议在开发环境使用。若使用Linux主机,则无此问题,但需注意权限配置。
复盘经验:遇到USB设备无法识别,优先检查驱动签名策略,其次才是硬件问题。建议在Windows上安装Vivado后立即重启并禁用驱动签名,避免后续排障。
2.4 常见误区与总结复盘
环境搭建的常见误区集中在三个方面:版本不匹配、驱动安装不完整、硬件连接错误。版本不匹配会导致XSA文件无法导入或PetaLinux构建失败;驱动安装不完整表现为JTAG无法识别但串口正常;硬件连接错误则包括使用了仅充电的USB线、未连接板载电源跳线、JTAG链上多个设备地址冲突等。
另一个常见误区是混淆了PS端和PL端的JTAG链。Zynq内部有两个TAP:PS_TAP和PL_TAP,它们通过一条菊花链连接。在Vivado硬件管理器中,你会看到两个设备ID,这是正常现象。如果只显示一个,说明PL端电源未开启或PL_TAP被禁用。