第1章:AXI总线协议详解

大家好,我是你们的FPGA讲师。今天咱们聊聊AXI总线协议。

说实话,AXI协议是Zynq开发绕不开的坎。我刚开始接触Zynq时,就被这堆握手信号搞得头大。后来踩了不少坑,才慢慢摸清门道。今天我把这些经验分享给你。

1.1 为什么是AXI?

AXI是ARM公司推出的总线协议。全称是Advanced eXtensible Interface。说白了,就是芯片内部各个模块之间通信的规则。

Zynq为什么选AXI?因为它的PL(可编程逻辑)和PS(处理系统)之间需要高速通信。AXI正好能满足这个需求。

我个人习惯把AXI比作高速公路。数据就是车,地址就是出口。没有规则,车就会撞在一起。

1.2 AXI的三个版本

AXI协议有三个版本,每个都有自己的定位。

版本 特点 适用场景
AXI4 支持突发传输,高性能 DDR、DMA等大数据量传输
AXI4-Lite 简化版,不支持突发 寄存器配置、控制信号
AXI4-Stream 无地址,纯数据流 视频、音频、数据流处理

我在项目中遇到过一个问题:用AXI4-Lite去传大量数据,结果性能惨不忍睹。后来才意识到,Lite就是给配置用的,不是给数据用的。

1.3 握手信号与时序分析

AXI的核心是握手。五个通道,每个通道都有VALID和READY信号。

握手规则很简单:

  • 发送方拉高VALID,表示数据有效
  • 接收方拉高READY,表示可以接收
  • 两者同时为高时,传输发生

嗯,这里要注意:VALID不能依赖READY。也就是说,发送方不能等接收方准备好了再发数据。这是很多新手容易犯的错误。

关键点:VALID必须保持稳定,直到握手完成。READY可以随时变化。

1.4 AXI4-Stream详解

Stream协议是我用得最多的。它没有地址,只有数据流。适合做视频、音频处理。

Stream的信号包括:

  • TVALID:数据有效
  • TREADY:接收方就绪
  • TDATA:数据总线
  • TLAST:最后一笔数据
  • TKEEP:字节有效指示

我曾经在调试一个视频通路时,发现图像花屏。查了半天,原来是TKEEP信号没处理好。Stream协议里,TKEEP告诉接收方哪些字节是有效的。如果搞错了,数据就乱了。

1.5 时序分析实战

时序分析说白了就是看信号能不能在规定时间内到达。AXI的时序约束主要关注建立时间和保持时间。

我建议你这样做:

  1. 先确定时钟频率
  2. 计算数据路径延迟
  3. 检查建立时间裕量
  4. 检查保持时间裕量

你想想看,如果建立时间不够,数据还没稳定就被采样了,结果肯定是错的。保持时间不够,数据变化太快,也会采错。

小技巧:在Vivado里用report_timing_summary命令,可以快速查看时序是否满足。我每次综合完都会跑一下这个命令。

1.6 避坑指南

我踩过的坑,分享给你:

  • 坑1:AXI4-Lite的地址对齐。地址必须是4字节对齐的,否则会出错。
  • 坑2:Stream的TLAST信号。很多新手忘记拉TLAST,导致接收方一直等数据。
  • 坑3:握手超时。如果接收方一直不拉READY,发送方会卡死。需要加超时机制。

警告:千万不要在AXI总线上做组合逻辑。我曾经这么干过,结果时序一塌糊涂。AXI信号必须用寄存器打一拍。

1.7 知识体系图

下面这张图展示了AXI协议的核心知识结构。我画了很久,希望能帮你理清思路。

AXI总线协议 AXI4 AXI4-Lite AXI4-Stream 突发传输 高性能数据搬运 简化版 寄存器配置 无地址 纯数据流 握手信号:VALID + READY 时序分析:建立时间 + 保持时间 避坑:地址对齐、TLAST、超时、组合逻辑

1.8 总结

AXI协议说难不难,说简单也不简单。关键是要理解握手机制,分清三个版本的用途。

我个人建议:先从AXI4-Lite入手,配置寄存器。然后学AXI4-Stream,做数据流处理。最后再啃AXI4,做高性能传输。

这样循序渐进,你会学得更扎实。

好了,今天就聊到这里。下一章我们讲AXI的详细信号定义和时序图。

可可精品资料库