1. AXI协议基础回顾:AXI通道与握手信号、读写事务流程、突发传输与地址对齐

各位同学,咱们今天聊聊AXI协议。说实话,做原型验证这么多年,我见过太多人在AXI上栽跟头了。我自己刚入行那会儿,也踩过不少坑。所以这一章,咱们把基础打牢。

AXI是ARM公司推出的高性能总线协议。现在不管是FPGA原型验证,还是芯片互联,几乎都离不开它。你想想看,一个SoC里动辄几十个master和slave,全靠AXI来协调。

1.1 AXI的五个独立通道

AXI协议最核心的设计,就是用了五个独立的通道。读写分离,地址和数据也分离。这样做的好处很明显——并行度高,效率自然就上来了。

通道方向 通道名称 传输内容
读地址通道 AR通道 读地址、读控制信息
读数据通道 R通道 读数据、读响应
写地址通道 AW通道 写地址、写控制信息
写数据通道 W通道 写数据、写 strobe
写响应通道 B通道 写完成响应

我个人习惯把AXI想象成一条双向四车道的高速公路。读和写各走各的道,地址和数据也分开走,互不干扰。这样设计,带宽利用率非常高。

关键点:五个通道各自独立,每个通道都有自己的握手信号。这意味着读操作和写操作可以完全重叠执行。

1.2 握手信号与VALID/READY机制

AXI每个通道都用VALID和READY这一对信号来完成握手。说白了,就是发送方说"我有数据要发",接收方说"我准备好了,你发吧"。

握手有三种情况:

  • VALID先有效,READY后有效:发送方先准备好,等接收方就绪。这是最常见的情况。
  • READY先有效,VALID后有效:接收方提前声明"我随时可以收",发送方准备好后直接发送。
  • VALID和READY同时有效:一拍完成握手,效率最高。

我在项目中遇到过一个问题:某个master的VALID信号一直拉高,但slave的READY迟迟不来。结果整个通道被卡死,其他事务也进不来。嗯,这里要注意——VALID不能依赖READY,但READY可以等待VALID。这是协议的铁律。

小技巧:调试时如果发现总线卡住,先查VALID和READY的时序。八成是握手出了问题。

1.3 读写事务流程

咱们先看读事务。流程其实很简单:

  1. master通过AR通道发送读地址
  2. slave收到地址后,开始准备数据
  3. slave通过R通道返回数据,同时带上响应信号
  4. 最后一笔数据返回时,RLAST信号拉高

写事务稍微复杂一点,因为多了个写响应通道:

  1. master通过AW通道发送写地址
  2. master通过W通道发送写数据
  3. slave完成写入后,通过B通道返回写响应

你可能会问:地址和数据能不能同时发?当然可以。AXI允许地址和数据的传输完全重叠。这也是它高性能的秘诀之一。

注意:写事务中,B通道的响应必须在W通道的最后一笔数据之后才能返回。这是协议规定的顺序要求。

1.4 突发传输与地址对齐

突发传输是AXI的看家本领。一次突发可以传输1到256笔数据,大大减少了地址发送的开销。

突发传输有三个关键参数:

  • AxLEN:突发长度,表示一次突发传输多少笔数据
  • AxSIZE:每笔数据的字节数
  • AxBURST:突发类型,有FIXED、INCR、WRAP三种
突发类型 行为描述 典型应用场景
FIXED 每次访问同一个地址 FIFO操作、状态寄存器轮询
INCR 地址递增,每次加AxSIZE 普通内存读写、DMA传输
WRAP 地址递增到边界后回绕 Cache line fill、环形缓冲区

地址对齐这个问题,我吃过亏。曾经有个项目,master发了一个未对齐的地址,slave直接罢工了。后来查了半天才发现是地址对齐的问题。

地址对齐规则:

  • 起始地址必须对齐到AxSIZE
  • 比如AxSIZE=4(32位),起始地址必须是4的倍数
  • 如果地址不对齐,slave可以返回SLVERR或DECERR

避坑指南:我曾经在原型验证时,发现某个IP的AXI接口总是报错。跟踪了三天,最后发现是地址没有按64位对齐。从那以后,我每次写地址生成逻辑,都会加一个对齐检查的断言。

1.5 AXI通道与握手流程总览

下面这张图,把AXI的五个通道和握手流程串起来了。我建议你多看几遍,理解数据是怎么流动的。

AXI 五通道与握手流程总览 Master Slave AR通道:读地址 + 控制信息 R通道:读数据 + 响应 + RLAST AW通道:写地址 + 控制信息 W通道:写数据 + WSTRB + WLAST B通道:写完成响应 每个通道独立握手(VALID/READY),读写可完全并行。地址与数据分离,支持乱序传输。 箭头方向表示数据流方向,读数据从Slave到Master,写数据从Master到Slave。

1.6 小结

这一章咱们把AXI协议的基础过了一遍。五个独立通道、VALID/READY握手、读写事务流程、突发传输和地址对齐,这些都是后续章节的基石。

我个人觉得,理解AXI最好的方法就是动手。找个简单的master和slave,连起来跑一下波形,看看握手信号是怎么跳变的。比看十遍书都管用。

实战建议:在原型验证环境中,先用AXI VIP生成一些简单的读写序列,观察波形。重点关注VALID和READY的时序关系,以及地址对齐对传输的影响。