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 读写事务流程
咱们先看读事务。流程其实很简单:
- master通过AR通道发送读地址
- slave收到地址后,开始准备数据
- slave通过R通道返回数据,同时带上响应信号
- 最后一笔数据返回时,RLAST信号拉高
写事务稍微复杂一点,因为多了个写响应通道:
- master通过AW通道发送写地址
- master通过W通道发送写数据
- 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的五个通道和握手流程串起来了。我建议你多看几遍,理解数据是怎么流动的。
1.6 小结
这一章咱们把AXI协议的基础过了一遍。五个独立通道、VALID/READY握手、读写事务流程、突发传输和地址对齐,这些都是后续章节的基石。
我个人觉得,理解AXI最好的方法就是动手。找个简单的master和slave,连起来跑一下波形,看看握手信号是怎么跳变的。比看十遍书都管用。
实战建议:在原型验证环境中,先用AXI VIP生成一些简单的读写序列,观察波形。重点关注VALID和READY的时序关系,以及地址对齐对传输的影响。