从零开始驾驭Zynq UltraScale:一份面向初学者与工程师的终极实战教程
** 不止于理论,更聚焦实战,本文将带你深入理解Zynq UltraScale架构,掌握PS与PL协同开发的核心技能,并亲手点亮你的第一个LED。

核心关键词: zynq ultrascale 教程, zynq ultrascale, zynq, fpga, arm, 嵌入式开发, vivado, petalinux, ps-pl协同设计
摘要
你是否对将ARM处理器的灵活性与FPGA的并行计算能力完美结合充满好奇?Zynq UltraScale+ MPSoC(多处理器片上系统)正是实现这一梦想的终极平台,其复杂的架构和双核(PS+PL)的设计理念,常常让初学者望而却步,别担心,这份详尽的“Zynq UltraScale教程”将为你拨开迷雾,我们将从架构讲起,手把手带你搭建开发环境,完成第一个经典的“Hello World”——LED点灯实验,并为你规划一条清晰的学习路径,无论你是电子工程专业的学生,还是希望跨界FPGA领域的嵌入式工程师,本教程都将是你开启Zynq UltraScale大门的钥匙。
第一章:为什么选择Zynq UltraScale?—— 理解其革命性架构
在开始动手之前,我们必须先理解“敌人”(也就是我们要学习的平台),Zynq UltraScale+不仅仅是一块FPGA,它是一个高度集成的异构计算系统。
1 核心灵魂:Processing System (PS)
你可以把PS看作是这块芯片的“大脑”和“操作系统核心”,它基于ARM架构,集成了强大的处理单元:

- 应用处理器: 通常包括 ARM Cortex-A53(高性能64位应用处理器)和 ARM Cortex-R5(实时处理器),A53负责运行Linux等复杂操作系统,处理高层应用逻辑;R5则负责实时性要求极高的任务,如电机控制、数据采集等。
- 图形、视频和显示处理单元: 内置的 Mali-400 MP2 GPU 和 视频编解码器,使其成为视频处理、图像识别、HMI(人机交互界面的)的理想选择。
- 丰富的外设接口: USB 3.0, Gigabit Ethernet, PCIe, SDIO, UART, SPI, I2C等一应俱全,轻松实现与外部世界的高速通信。
小结: PS是一个功能完备的SoC(片上系统),你可以像开发普通的ARM嵌入式系统一样去使用它。
2 无限潜能:Programmable Logic (PL)
PL就是传统意义上的FPGA部分,它由可编程的逻辑单元(LUT)、块RAM、DSP48E2 slices和高速收发器(GTH/GTY)等构成。
- 硬件并行性: PL可以并行执行成千上万个任务,这是CPU无法比拟的,可以同时处理多个高速数据流、实现复杂的算法加速(如FFT、卷积)。
- 定制化硬件: 你可以根据需求“创造”出任何数字电路,从简单的逻辑门到复杂的处理器核。
- 高速接口: UltraScale系列集成的GTH/GTY收发器,支持高达几十Gbps的串行通信,适用于5G、数据中心等前沿领域。
小结: PL是实现硬件加速和功能定制的“画布”,让你的设计性能和灵活性达到新的高度。
3 魔力之源:PS-PL协同设计
Zynq UltraScale的真正威力,在于PS与PL之间的高速、低延迟连接。

- AXI (Advanced eXtensible Interface) 总线: 这是PS与PL通信的“高速公路”,通过AXI总线,PS可以像读写内存一样,访问PL中自定义的寄存器和数据模块,实现数据的无缝交互。
- 应用场景:
- 硬件加速: PS(A53)运行主程序,当需要执行一个耗时计算时,将数据通过AXI总线发送给PL中定制的一个加速器,PL完成计算后返回结果,PS在此期间可以去处理其他任务,效率极高。
- 外设扩展: PS上缺少某个特殊接口(如Cameral Link, 高速ADC)?可以在PL中实现这个接口的控制器,并通过AXI总线与PS通信。
- 实时控制: PS(R5)负责实时控制,PL负责高速数据采集和预处理,两者配合,实现低延迟的闭环系统。
第二章:准备你的战甲——Zynq UltraScale开发环境搭建
“工欲善其事,必先利其器。” 正确的环境配置是成功的第一步。
1 硬件准备
- 开发板: 推荐使用 Xilinx ZCU102 或 ZCU104 开发板,它们功能全面,资料丰富,是学习和开发的理想选择。
- 配件: Micro-USB线(用于UART通信)、以太网线、电源适配器、一台高性能PC(建议16GB以上内存,因为Vivado和PetaLinux都比较吃资源)。
2 软件准备
你需要从Xilinx官网(https://www.xilinx.com)下载并安装以下核心软件:
-
Vivado Design Suite: 这是进行FPGA和Zynq设计的“瑞士军刀”。
- 版本选择:推荐 Vivado 2025.2 或更高版本,它们对UltraScale系列的支持更完善。
- 安装选项:安装时请务必勾选 “Zynq UltraScale+ MPSoC” 器件支持,以及 “Vivado HLx System Editions”(或单独安装Vivado SDK),建议安装完整的Vivado套件,避免后续麻烦。
-
Vitis Unified Software Platform (可选但推荐): Vitis是Xilinx推出的新一代开发平台,统一了软件和硬件的开发流程,对于高级用户,Vitis提供了更现代的C/C++/Python在PL上编程的能力(AI Engine, HLS等),初学者可以先从Vivado入手,再进阶学习Vitis。
-
PetaLinux Tools (可选): 如果你想在PS上运行Linux操作系统,就需要PetaLinux工具,它用于构建定制的Linux内核、设备树和根文件系统。
安装提示: Xilinx软件安装包巨大,请确保有稳定的网络环境和足够的磁盘空间。
第三章:你的第一个Zynq项目——PS-PL协同点亮LED
理论讲完了,让我们来点实际的,我们将创建一个最经典的项目:通过PS的软件,控制PL中的一个LED灯亮灭。
1 创建Vivado工程
- 打开Vivado,选择 Create Project。
- 命名你的工程(
Zynq_LED_Blink),并选择存放路径。 - 在 Project Type 界面,选择 RTL Project,然后勾选 “Do not specify sources at this time”。
- 在 Default Part 界面,点击 Boards,然后搜索并选择你的开发板型号(
xilinx.com:zcu102:part0:1.1),Vivado会自动配置好所有相关器件参数。 - 完成创建。
2 创建并导出PS (MSS - Microprocessor Subsystem)
- 在左侧 Flow Navigator 窗口中,双击 Block Design。
- 在弹出的窗口中,搜索并添加
Zynq UltraScale+ MPSoCIP核。 - 双击这个IP核,进行配置,这是整个设计的核心。
- PS-PL Configuration: 确保勾选了 “M_AXI_GP0” 和 “S_AXI_GP0”,这是PS通过AXI总线访问PL的接口,GP0用于主模式(PS访问PL),GP1用于从模式(PL访问PS),我们先用GP0。
- Peripherals: 根据需要配置,至少保留 MIO(用于连接板载外设如LED, Switch, Button)和 DDR。
- 点击 OK,然后点击 Block Design 窗口上方的 Validate Design,等待验证通过。
- 点击 Generate Block Design。
- 设计生成后,在源窗口中找到并打开
system.bd,右键点击Zynq UltraScale+ MPSoC,选择 Export Hardware,在弹出的窗口中,勾选 “Include bitstream”(虽然我们还没生成bitstream,但养成好习惯),然后点击 OK,这一步会自动生成包含PS配置的HDF(Hardware Description File)文件。
3 创建PL逻辑并连接
我们在PL中创建一个简单的LED控制器。
- 在Vivado主界面,点击 Create Block Design,命名为
pl_led_controller。 - 添加以下IP核:
AXI GPIO:这是一个可配置的通用输入/输出接口,用于控制LED,双击配置,将 GPIO Width 设置为1(因为我们只控制一个LED),方向设置为 Out。AXI Interconnect:用于连接PS的M_AXI_GP0接口和我们创建的AXI GPIO接口。
- 连接接口:
- 将
M_AXI_GP0的M_AXI_GP0_ACLK等时钟和复位信号,连接到AXI Interconnect和AXI GPIO。 - 将
M_AXI_GP0的M_AXI_GP0通道,连接到AXI Interconnect的S_AXI端口。 - 将
AXI Interconnect的M_AXI端口,连接到AXI GPIO的S_AXI端口。
- 将
- 同样,Validate 和 Generate 这个Block Design。
- 回到顶层的
system.bd,点击 Add IP,选择 “Imported IP”,找到并导入刚刚创建的pl_led_controller。 - 将
pl_led_controller的S_AXI_ACLK等信号连接到PS的对应接口。 - Validate 和 Generate 顶层设计。
4 生成Bitstream并导出
- 在 Flow Navigator 中,点击 Generate Bitstream,这个过程会综合你的设计,生成最终的
.bit文件,可能需要一些时间。 - 生成成功后,再次右键点击
Zynq UltraScale+ MPSoCIP核,选择 Export Hardware,确保勾选了 “Include bitstream”,并覆盖之前的HDF文件。
5 使用Vitis SDK(或Vivado SDK)编写应用程序
-
在Vivado的 Flow Navigator 中,点击 Launch SDK。
-
SDK会自动导入我们之前导出的HDF,并创建一个C/C++工程。
-
创建一个新的C源文件(
main.c),编写如下代码:#include "xparameters.h" #include "xgpio.h" #include "xil_printf.h" // 定义AXI GPIO设备的ID和LED的引脚 #define LED_DEVICE_ID XPAR_AXI_GPIO_0_DEVICE_ID #define LED_CHANNEL 1 // AXI GPIO的通道1 #define LED_BIT 0 // 控制第一个LED XGpio GpioOutput; // AXI GPIO实例 int main(void) { u32 led_state = 0; // 初始化AXI GPIO驱动 int status = XGpio_Initialize(&GpioOutput, LED_DEVICE_ID); if (status != XST_SUCCESS) { xil_printf("GPIOS Initialization Failed\r\n"); return XST_FAILURE; } // 设置GPIO通道为输出方向 XGpio_SetDirection(&GpioOutput, LED_CHANNEL, 0x0); // 0x0表示输出 while (1) { // 切换LED状态 led_state ^= 1; // 向GPIO写入数据,控制LED亮灭 XGpio_DiscreteWrite(&GpioOutput, LED_CHANNEL, led_state); // 打印信息 xil_printf("LED is %s\r\n", led_state ? "ON" : "OFF"); // 延时 for (int i = 0; i < 10000000; i++); return XST_SUCCESS; } } -
右键点击工程,选择 Build Project,编译成功后,点击 Run As -> Launch on Hardware (System Debugger)。
-
如果一切顺利,你将看到开发板上的LED开始闪烁,并且在SDK控制台会打印出“LED is ON/OFF”的信息。
恭喜你!你已经成功完成了第一个Zynq UltraScale的PS-PL协同设计项目!
第四章:进阶之路与学习资源
点亮LED只是开始,Zynq UltraScale的广阔世界等待你去探索。
-
学习路径建议:
- PetaLinux入门: 学习如何构建和部署一个定制的Linux系统到PS上,学习设备树的概念,编写Linux设备驱动来控制PL中的外设。
- PL硬件加速: 学习使用Vivado HLS (High-Level Synthesis),用C/C++描述算法,自动生成高性能的硬件电路。
- Vitis AI与AI Engine: 探索Zynq UltraScale+和Versal上的AI Engine,这是进行AI推理加速的利器。
- 高速接口设计: 学习使用GTY收发器,实现PCIe、100G以太网等高速通信。
-
宝贵资源:
- 官方文档 (UGs - User Guides): Xilinx官网提供了所有IP核和平台的详细文档,这是最权威的资料。
- Xilinx Developer Forum: 全球最大的Xilinx技术社区,遇到任何问题,这里都有可能找到答案或得到官方工程师的帮助。
- GitHub: 搜索Xilinx官方提供的示例工程和参考设计。
- 国内社区: 如“电子发烧友”、“FPGA技术论坛”等,有很多国内工程师分享的教程和经验。
Zynq UltraScale+ MPSoC代表了现代嵌入式系统设计的最高水平,它模糊了硬件与软件的界限,赋予了工程师前所未有的设计自由度,本教程为你铺设了从理论到实践的坚实基石,点亮了你的第一个LED。
学习FPGA和Zynq是一个“动手”远胜于“看书”的过程,不要害怕失败,每一次编译报错、每一次调试失败,都是通往成功的阶梯,就去拥抱你的Zynq开发板,去创造属于你的精彩项目吧!
