1. AXI总线基础:三种协议概述与区别

大家好,我是你们的FPGA讲师。今天咱们聊聊AXI总线——这个在Vivado里绕不开的话题。

说实话,我刚接触AXI的时候,也被那堆信号线搞得头大。什么AW、AR、W、R、B,光看名字就晕了。但干久了你会发现,AXI其实没那么复杂。说白了,它就是ARM公司定义的一套总线标准,专门用来让IP核之间高效通信。

Vivado里几乎所有IP核都支持AXI接口。你想想看,从Zynq的PS到PL,从DMA到FIFO,从DDR控制器到视频处理核,全都在用AXI。所以搞懂它,是FPGA开发的必修课。

1.1 AXI4:高性能全功能版

AXI4是完整版协议,支持突发传输。什么叫突发?就是一次握手,后面连续传一堆数据。我做过一个项目,用AXI4从DDR里搬图像数据,一次突发256个字节,效率比单次传输高了十几倍。

AXI4有五个独立通道:

  • 读地址通道(AR):告诉从设备我要读哪里
  • 读数据通道(R):从设备把数据发回来
  • 写地址通道(AW):告诉从设备我要写哪里
  • 写数据通道(W):把数据发出去
  • 写响应通道(B):从设备告诉你写完了没

每个通道都是独立的,可以并行工作。这就是AXI4牛的地方——读写可以同时进行,互不干扰。

关键特性:

  • 支持突发传输,长度1~256笔
  • 数据总线宽度可配:8/16/32/64/128/256/512/1024位
  • 支持乱序传输(通过ID标签实现)
  • 支持独占访问和锁定访问

我在项目中遇到过一个问题:用AXI4从DDR读数据,结果读回来的数据顺序乱了。后来才发现,是ID标签没配好。嗯,这里要注意——如果你不需要乱序,就把所有传输的ID设成一样,保证顺序不乱。

1.2 AXI4-Lite:轻量级控制总线

AXI4-Lite是AXI4的简化版。说白了,就是去掉了突发功能,每次只能传一个数据。但好处是逻辑简单,占资源少。

我一般用它来配寄存器。比如控制一个视频处理核的增益、偏移量,或者查查状态寄存器。这种场景下,数据量小,不需要突发,用Lite正合适。

AXI4-Lite的特点:

  • 数据总线固定32位或64位
  • 不支持突发(突发长度固定为1)
  • 不支持乱序
  • 不支持独占访问
  • 信号线比AXI4少很多

我的建议:能用Lite就别用Full。Lite的时序更容易收敛,占用的LUT和FF也少。我见过有人用AXI4 Full去配寄存器,纯属杀鸡用牛刀。

1.3 AXI4-Stream:高速数据流

AXI4-Stream是专门为数据流设计的。它没有地址通道,只有数据通道。数据像流水一样,从上游流到下游。

这个协议在视频处理、DMA、FIFO这些场景里用得最多。我做过一个4K视频处理的项目,数据率高达6Gbps,用AXI4-Stream一点问题没有。

AXI4-Stream的信号线:

  • TVALID:发送方说"我有数据"
  • TREADY:接收方说"我准备好了"
  • TDATA:数据总线
  • TLAST:这一包数据的最后一个
  • TKEEP:哪些字节是有效的
  • TUSER:用户自定义信息

为什么它效率高?因为没有地址开销。你想想看,传视频数据时,每帧图像都是连续的像素流,根本不需要地址。用AXI4-Stream,一拍就能传一个像素,效率拉满。

避坑指南:我曾经在AXI4-Stream的TLAST信号上栽过跟头。接收方如果不处理TLAST,就会把两包数据当成一包处理,结果数据全乱了。所以一定要在状态机里判断TLAST,该复位复位,该换行换行。

1.4 三种协议对比

特性 AXI4 AXI4-Lite AXI4-Stream
地址通道 有 有 无
突发传输 支持(1~256) 不支持 流式传输
数据宽度 8~1024位 32/64位 任意
乱序支持 支持 不支持 不支持
典型应用 DDR、DMA、大块数据 寄存器配置、控制接口 视频流、音频流、FIFO
资源开销 高 低 中

1.5 知识体系结构图

下面这张图帮你理清三种协议的关系和适用场景:

AXI总线协议家族 AXI4 高性能全功能版 ✅ 突发传输 ✅ 乱序支持 ✅ 独占访问 ✅ 5个独立通道 典型应用 DDR控制器 DMA引擎 大块数据传输 资源开销:高 AXI4-Lite 轻量级控制总线 ❌ 不支持突发 ❌ 不支持乱序 ❌ 不支持独占 ✅ 5个通道(简化) 典型应用 寄存器配置 控制接口 状态查询 资源开销:低 AXI4-Stream 高速数据流 ❌ 无地址通道 ✅ 流式传输 ✅ 握手协议 ✅ TLAST包尾标记 典型应用 视频流处理 音频数据流 FIFO接口 资源开销:中 选择原则:控制用Lite,数据用Stream,大块数据用Full

1.6 怎么选?我的经验

选哪种协议,其实看场景:

  • 配寄存器:用AXI4-Lite。简单、省资源、时序好。
  • 传视频/音频流:用AXI4-Stream。效率最高,没有地址开销。
  • 读写DDR或大块数据:用AXI4 Full。突发传输能充分利用带宽。

我见过有人把AXI4-Lite用在视频流上,结果带宽不够,画面卡成PPT。也见过有人用AXI4 Full去配寄存器,浪费了资源不说,时序还难收敛。所以选对协议,事半功倍。

好了,这一章就到这里。三种协议的区别你搞明白了吗?下一章咱们聊聊AXI的握手协议——VALID和READY信号怎么配合,这可是写AXI接口的核心。


可可精品资料库