2. AXI4总线协议精讲:通道架构、握手信号、突发传输机制详解

大家好,欢迎来到《卷积加速器AXI互连方案实战》的第二讲。今天咱们聊聊AXI4总线协议的核心内容。说实话,很多做加速器设计的工程师,对AXI协议的理解停留在“会用”层面,一旦遇到时序收敛问题或者带宽瓶颈,就抓瞎了。我个人觉得,吃透协议细节,是做好高性能互连设计的前提。

2.1 五通道架构:为什么是五个?

AXI4总线最显著的特征,就是它把读写操作分成了五个独立的通道。你想想看,这就像一条高速公路,把不同方向的车流分开,互不干扰。

  • 读地址通道(AR):发送读请求的地址和控制信息
  • 读数据通道(R):返回读数据,以及读响应信号
  • 写地址通道(AW):发送写请求的地址和控制信息
  • 写数据通道(W):发送要写入的数据
  • 写响应通道(B):返回写操作的完成状态

为什么这么设计?说白了,就是为了并行。读和写可以同时进行,地址和数据也可以分开传输。我在做卷积加速器的时候,经常利用这个特性:计算单元在读数据的同时,上一轮的结果正在通过写通道回传。这样流水线才能跑得满。

关键点:五个通道各自独立握手机制,互不阻塞。这是AXI高性能的基石。

2.2 握手信号:VALID和READY的博弈

每个通道都有一对握手信号:VALID和READY。VALID表示发送方数据有效,READY表示接收方可以接收。数据只有在VALID和READY同时为高的时候才传输。

这里有个常见的坑——依赖关系。我曾经在一个项目中,把VALID等在了READY之后才拉高,结果整个总线卡死了。为什么?因为接收方也在等你的VALID才拉READY,这就形成了死锁。

避坑指南:我曾经见过一个团队,把VALID和READY的时序搞反了,仿真能过,但综合后时序一塌糊涂。记住:VALID不能依赖READY,但READY可以依赖VALID。这是协议的铁律。

握手有三种情况:

  1. VALID先到,READY后到:数据在READY拉高的时钟沿被采样
  2. READY先到,VALID后到:数据在VALID拉高的时钟沿被采样
  3. 同时到达:一拍完成传输

嗯,这里要注意:如果VALID一直保持,READY可以随时拉高。但如果READY一直保持,VALID必须等到数据准备好才能拉高。这个不对称性,是设计控制逻辑时最容易出错的地方。

2.3 突发传输机制:Burst的精髓

AXI4支持三种突发类型:

突发类型 地址变化规律 典型应用
FIXED 地址不变 重复写入同一个寄存器
INCR 地址递增 连续内存访问(最常见)
WRAP 地址递增,到边界回绕 Cache line fill

突发传输的核心参数有三个:AxLEN(突发长度)、AxSIZE(每拍数据字节数)、AxBURST(突发类型)。举个例子,如果你要传输64字节的数据,总线位宽是32位(4字节),那么AxLEN=15,AxSIZE=2(2的2次方=4字节),AxBURST=INCR。

我个人习惯在卷积加速器中,把权重数据的传输配置成INCR突发,长度尽量大。因为权重是连续存储的,一次突发传输可以减少地址握手开销,提升带宽利用率。

经验之谈:突发长度不是越大越好。过长的突发会占用总线太久,导致其他master饿死。我一般控制在16拍以内,既保证效率,又不影响公平性。

2.4 乱序传输与ID标识

AXI4支持乱序传输,靠的是AxID信号。每个事务分配一个ID,从设备在处理完成后,必须用相同的ID返回数据。这样,即使多个事务交错执行,主设备也能正确区分。

为什么会需要乱序?你想想看,如果两个读请求发到不同的从设备,一个慢(比如DDR),一个快(比如SRAM)。如果必须按顺序返回,快的那个就得等慢的,白白浪费带宽。有了ID,快的可以先回来,主设备根据ID识别即可。

我记得有一次调试卷积加速器,发现读数据总是乱序,但我们的处理逻辑假设了顺序返回。结果数据对不上,花了两天时间才定位到问题。从那以后,我设计的所有加速器都支持乱序处理。

2.5 原子访问与锁定传输

AXI4取消了AXI3中的锁定传输(LOCK),但保留了原子访问的支持。原子操作包括:

  • AtomicSwap:原子交换
  • AtomicLoad:原子加载
  • AtomicStore:原子存储

在卷积加速器中,原子操作主要用于同步。比如多个计算核同时更新同一个累加结果,就需要原子加操作来避免数据竞争。不过说实话,大部分加速器用不到这个特性,直接用软件同步更简单。

2.6 低功耗接口:Clock Gating的协议支持

AXI4还定义了低功耗接口信号:

  • CSYSREQ:时钟请求
  • CSYSACK:时钟确认
  • CACTIVE:总线活动指示

当总线空闲时,可以关闭时钟来省电。但要注意,关闭时钟前必须确保所有未完成的事务都已经处理完毕。我在做移动端加速器时,这个特性帮了大忙——卷积计算间隙,总线时钟可以关掉,功耗直接降一半。

总结一下:AXI4的五通道架构、握手协议、突发机制,构成了高性能总线互连的基础。理解这些,你才能设计出既快又稳的卷积加速器。

AXI4总线通道架构与握手流程 主设备 Master 从设备 Slave 读地址通道 (AR) ARVALID → ARREADY 读数据通道 (R) RVALID → RREADY 写地址通道 (AW) AWVALID → AWREADY 写数据通道 (W) WVALID → WREADY 写响应通道 (B) BVALID → BREADY 握手时序示例 CLK | VALID | READY | 数据传输 T0: 0 | 0 | 0 | 无传输 T1: 1 | 1 | 0 | 等待 T2: 1 | 1 | 1 | ✅ 传输完成

这张图展示了AXI4的五个通道以及它们之间的数据流向。注意看,读和写是独立的,地址和数据也是分开的。这就是为什么AXI能实现高吞吐、低延迟的原因。

个人建议:刚开始学AXI协议时,别急着看代码。先把这张图印在脑子里,搞清楚每个通道是干什么的,握手信号怎么配合。等你把通道架构理清楚了,写RTL代码就是水到渠成的事。

好了,这一讲的内容就到这里。AXI4协议虽然看起来复杂,但核心就是五个通道、两对握手信号、三种突发类型。把这些搞明白,后面的实战案例你就能轻松驾驭。

可可精品资料库