1. 课程导论与实验环境搭建:Zynq架构概览、AXI总线协议基础、Vivado与Vitis开发环境安装与配置

各位同学,欢迎来到这门实战课。我是你们的老朋友,一个在Zynq上摸爬滚打了好几年的工程师。今天咱们先不急着写代码,把地基打牢了,后面才能盖高楼。

说实话,我刚开始接触Zynq的时候,也被PS和PL之间那套复杂的通信机制搞得头大。后来踩的坑多了,才慢慢摸清门道。这门课,就是要把我这些年总结的经验,尤其是那些调试和定位故障的“土办法”,都分享给你们。

1.1 Zynq架构概览:一个芯片,两个世界

Zynq是什么?说白了,它就是一个芯片里住了两个“人”。

  • PS(Processing System):双核ARM Cortex-A9处理器,跑Linux或者裸机程序。它负责控制、运算、网络通信这些“动脑子”的活儿。
  • PL(Programmable Logic):也就是FPGA部分。它负责高速数据采集、信号处理、自定义接口这些“力气活”。

这两个世界怎么沟通?靠的就是AXI总线。你可以把AXI想象成一条高速公路,PS和PL就是高速公路两端的城市。数据、控制信号、中断,都在这条路上跑。

核心观点: Zynq设计的精髓,就是把ARM的软件灵活性和FPGA的硬件加速能力结合起来。但结合不好,就是灾难。我见过太多项目,PS和PL各干各的,最后联调时发现数据对不上,那叫一个痛苦。

下面这张图,是我自己画的Zynq内部结构简图,帮你快速建立整体印象。

Zynq架构概览图 Zynq-7000 内部架构概览 PS (Processing System) ARM Cortex-A9 双核 32KB I/D Cache DDR控制器 DDR3/DDR4 高速外设 USB / GigE / SD 低速外设 UART / SPI / I2C AXI 互联矩阵 (Interconnect) PL (Programmable Logic) 自定义IP AXI4-Lite / Stream 高速接口 GTX / LVDS / ADC 逻辑资源 LUT / FF / BRAM DSP单元 DSP48E1 AXI 从机/主机接口 AXI总线 PS与PL通过AXI总线进行数据交互,实现软硬件协同工作

1.2 AXI总线协议基础:握手的艺术

AXI(Advanced eXtensible Interface)是ARM公司推出的高性能总线协议。在Zynq里,我们主要跟三种AXI打交道:

接口类型 特点 典型应用场景 我踩过的坑
AXI4-Full 高性能,支持突发传输,地址/数据分离 DMA传输、大块数据搬运 突发长度没对齐,导致数据错位
AXI4-Lite 轻量级,单次传输,不支持突发 配置寄存器、读取状态 地址偏移算错,写错寄存器
AXI4-Stream 无地址,连续数据流 高速数据采集、视频流 TLAST信号没处理好,丢帧

我的小建议: 刚开始做Zynq开发,优先用AXI4-Lite来调试。它简单,容易理解。等把通信链路调通了,再换成AXI4-Full或者Stream来跑性能。别一上来就搞复杂的,容易把自己绕进去。

AXI的握手信号,说白了就是五个通道:读地址、读数据、写地址、写数据、写响应。每个通道都有一套VALID/READY握手协议。

  • VALID:发送方说“我准备好了,数据/地址有效”。
  • READY:接收方说“我准备好了,可以接收”。
  • 当VALID和READY同时为高时,传输发生。

为什么会这样设计?你想想看,如果发送方和接收方速度不一样,没有握手信号,数据就会丢。这个机制保证了不管两边跑多快,数据都不会丢。

1.3 Vivado与Vitis开发环境安装与配置

工欲善其事,必先利其器。咱们先把开发环境搭好。我个人习惯用Vivado 2020.1以上的版本,对Zynq-7000系列支持比较稳定。

1.3.1 安装前的准备

安装之前,先检查你的电脑配置。别装到一半发现硬盘不够,那就尴尬了。

项目 最低要求 推荐配置
操作系统 Windows 10 64位 / Ubuntu 18.04 Windows 11 / Ubuntu 20.04
CPU Intel Core i5 或 AMD 同等 Intel Core i7 或 AMD Ryzen 7
内存 8 GB 32 GB 或以上
硬盘 100 GB 空闲空间 SSD 500 GB 或以上

注意: 安装路径不要有中文和空格!我曾经因为路径里有个空格,编译了一整天都报错,最后发现是路径问题。血的教训啊。

1.3.2 安装步骤

  1. 下载安装包:从Xilinx官网下载Vivado HLx WebPACK或Design Edition。建议下载包含Vitis的All-in-One安装包。
  2. 运行安装程序:以管理员身份运行。选择安装Vivado和Vitis。
  3. 选择产品:勾选“Vivado”和“Vitis”。如果你用的是Zynq-7000系列,不需要勾选Versal或UltraScale+。
  4. 选择器件:在“Design Tools”里,确保勾选了“Zynq-7000”器件支持。
  5. 等待安装:这个过程比较长,大概需要1-2小时。可以去喝杯咖啡,或者看看我后面的课程笔记。
  6. 配置License:安装完成后,配置License文件。可以用免费的WebPACK License,或者购买Node-Locked License。

1.3.3 验证安装

安装完成后,咱们验证一下环境是否正常。

# 打开终端(Linux)或命令提示符(Windows)
# 检查Vivado版本
vivado -version

# 检查Vitis版本
vitis -version

# 如果能看到版本信息,说明安装成功

验证小技巧: 创建一个最简单的Vivado工程,添加一个Zynq Processing System IP,然后生成Bitstream。如果能成功生成,说明你的环境完全OK。这一步虽然简单,但能帮你排除90%的环境问题。

1.4 本章小结

这一章,我们聊了Zynq的架构、AXI总线的基础,以及开发环境的搭建。这些东西看起来基础,但非常重要。我见过太多人,一上来就写代码,结果连PS和PL怎么通信都没搞清楚,最后调试到崩溃。

记住一句话:理解架构,比会写代码更重要。 后面的课程,我们会一步步深入,从最简单的AXI-Lite通信开始,一直到复杂的DMA和中断调试。每一步,我都会把我在项目中踩过的坑、总结的经验,毫无保留地分享给你们。