一、AXI总线概述:三种协议与核心概念

大家好,我是你们的FPGA设计讲师。今天咱们聊聊AXI总线——这个在Zynq、Versal等SoC设计中绕不开的话题。

说实话,我刚接触AXI时也被它的复杂程度吓了一跳。三种协议、五个通道、各种握手规则……但用久了你会发现,它其实很有章法。今天我就带大家把这块硬骨头啃下来。

1.1 为什么是AXI?

AXI(Advanced eXtensible Interface)是ARM公司推出的AMBA总线家族中的一员。现在几乎所有的Xilinx/AMD高端FPGA都在用。为什么?

  • 高性能:独立地址/数据通道,支持乱序传输
  • 灵活性:三种协议覆盖不同场景
  • 标准化:IP核之间即插即用

我在一个雷达信号处理项目中,就吃过总线协议不统一的亏。后来统一用AXI,IP集成效率提升了至少3倍。

1.2 三种协议,各司其职

AXI家族有三个成员,你想想看,就像工具箱里的三把螺丝刀——各有各的用处。

AXI4(Full AXI4)

这是满血版。支持突发传输(Burst),一次发起地址,后面连续传数据。适合DDR控制器、PCIe DMA这类高吞吐场景。

核心特点:

  • 独立的地址/数据通道
  • 支持1~256笔突发
  • 数据总线宽度可配(8/16/32/64/128/256/512/1024位)
  • 支持乱序传输(Out-of-Order)

我记得第一次调AXI4的DMA,突发长度设成了256,结果DDR带宽直接跑满。嗯,那种感觉确实很爽。

AXI4-Lite

轻量版。每次只能传一笔数据,没有突发能力。但接口简单,资源消耗少。

适合场景:配置寄存器、状态查询、控制信号。说白了,就是用来读写寄存器用的。

我的建议:所有控制类IP的寄存器接口,统一用AXI4-Lite。别图省事用Full AXI4,那是大炮打蚊子。

AXI4-Stream

流式接口。没有地址概念,数据像水管里的水一样持续流动。适合视频、音频、网络数据包等流式处理。

我曾经在做一个4K视频处理链时,全程用AXI4-Stream连接各个IP。从采集到显示,数据一路流过去,延迟只有几微秒。

特性 AXI4 AXI4-Lite AXI4-Stream
突发传输 支持(1~256) 不支持 流式
地址通道 有 有 无
数据通道 独立读写 独立读写 单向流
典型应用 DDR、DMA 寄存器配置 视频、音频
资源开销 高 低 中

1.3 总线架构与基本概念

AXI总线采用主从架构。Master发起传输,Slave响应。一个总线上可以有多个Master和多个Slave,通过Interconnect(互联矩阵)连接。

这里有几个关键概念,我建议大家记牢:

  • 通道(Channel):AXI4有5个独立通道(读地址、读数据、写地址、写数据、写响应),每个通道都有自己的握手信号
  • 握手协议:VALID/READY机制。发送方拉高VALID,接收方拉高READY,两者同时为高时传输发生
  • 对齐(Alignment):地址必须与数据总线宽度对齐。比如32位总线,地址必须是4的倍数

避坑指南:我曾经在一个项目中,因为地址没对齐,导致AXI总线死锁。查了两天才发现是地址最低两位没置0。从那以后,我写地址时都会手动检查对齐。

1.4 知识体系总览

下面这张图是我自己整理的AXI总线知识体系。你可以把它当作学习路线图:

AXI总线知识体系 AXI4(满血版) AXI4-Lite(轻量版) AXI4-Stream(流式) 核心特性 突发传输(1~256) 独立地址/数据通道 乱序传输支持 核心特性 单笔传输 接口简单 资源消耗低 核心特性 无地址概念 持续数据流 适合流水线处理 公共基础概念 • 主从架构(Master/Slave) • 5个独立通道(读地址/读数据/写地址/写数据/写响应) • VALID/READY握手协议 • 地址对齐规则 • 互联矩阵(Interconnect) • 数据总线宽度配置 • 窄传输(Narrow Transfer) • 原子访问(Atomic Access) 应用场景:DDR控制 / DMA传输 / 视频处理 / 寄存器配置

1.5 握手协议详解

AXI的VALID/READY握手,说白了就是两个人约见面——一个人说「我准备好了」(VALID),另一个人说「我也准备好了」(READY),然后击掌(传输发生)。

有三种情况:

  • VALID先于READY:发送方先准备好,等待接收方
  • READY先于VALID:接收方先准备好,等待发送方
  • 同时有效:一拍完成传输,效率最高

个人经验:设计AXI Slave时,我习惯让READY信号在复位后默认拉高。这样Master发数据时,只要一拍就能传走,延迟最小。当然,如果内部FIFO满了,再拉低READY进行反压。

1.6 地址映射与数据对齐

AXI使用字节地址。每个字节都有一个唯一的地址。数据总线宽度决定了每次传输能传多少字节。

举个例子:32位总线(4字节),地址0x00传字节0~3,地址0x04传字节4~7。地址必须4字节对齐。

64位总线(8字节),地址0x00传字节0~7,地址0x08传字节8~15。地址必须8字节对齐。

注意:如果你用64位总线但只传32位数据,这叫窄传输(Narrow Transfer)。WSTRB信号用来指示哪些字节有效。我见过不少新手在这里翻车——WSTRB没配好,导致数据写错位置。

1.7 小结

今天我们把AXI的三种协议和核心概念过了一遍。说白了,AXI4是重武器,AXI4-Lite是轻武器,AXI4-Stream是流水线。选哪个,看你的场景。

下一章我们会深入AXI4的读写事务时序,到时候我会带大家看具体的波形图。嗯,那个才是真正考验功底的地方。

可可精品资料库