4. AXI协议基础:通道架构、握手机制与事务处理
AXI协议,说白了就是ARM公司搞出来的一套高性能总线协议。我做了这么多年SoC,接触过的总线协议不下十种,但AXI绝对是最让我又爱又恨的一个。爱的是它性能确实强悍,恨的是细节太多,稍不注意就踩坑。
今天咱们就聊聊AXI的核心内容。嗯,我尽量用大白话讲清楚,毕竟这东西光看协议文档,能把人看睡着。
4.1 AXI通道架构:五通道分离设计
AXI最显著的特点,就是采用了五通道分离的架构。你想想看,传统的总线读写共用一套通道,就像一条单车道,读写事务互相堵着。AXI倒好,直接修了五条高速公路。
哪五个通道?我列出来:
- 读地址通道(AR):主机发起的读请求地址
- 读数据通道(R):从机返回的读数据
- 写地址通道(AW):主机发起的写请求地址
- 写数据通道(W):主机发送的写数据
- 写响应通道(B):从机返回的写完成状态
这里有个关键点:读和写是独立的。读事务走AR和R通道,写事务走AW、W和B通道。互不干扰,各跑各的。
我在项目中遇到过一种情况:某个IP核同时处理读写请求,如果总线是单通道的,读请求得等写事务完成才能发出去。换成AXI后,读写可以并行,性能直接翻倍。这就是五通道分离的好处。
核心要点:AXI的五个通道各自独立,每个通道都有自己的握手信号。这种设计让读写事务可以完全并行,互不阻塞。
4.2 AXI握手机制:VALID与READY的舞蹈
AXI的握手,说白了就是两个信号在跳舞:VALID和READY。
- VALID:发送方说「我准备好了,数据在路上了」
- READY:接收方说「我准备好了,你可以发过来了」
只有两个信号同时有效,数据才算真正传输完成。这个机制很灵活,双方可以各自控制节奏。
握手有三种情况:
| 场景 | VALID | READY | 说明 |
|---|---|---|---|
| 发送方先准备好 | 1 | 0→1 | 发送方等待接收方 |
| 接收方先准备好 | 0→1 | 1 | 接收方等待发送方 |
| 同时准备好 | 1 | 1 | 一拍完成传输 |
我个人习惯把VALID和READY比作两个人握手。一个人伸手(VALID),另一个人也伸手(READY),这才握上。如果只有一个人伸手,那就悬在半空,尴尬得很。
设计技巧:从机可以默认将READY拉高,这样只要主机VALID有效,一拍就能完成握手。但要注意,如果从机来不及处理,READY必须拉低,否则数据会丢失。
4.3 AXI读写事务:从发起到完成
咱们先看读事务的完整流程:
- 主机在AR通道上发送读地址,同时拉高ARVALID
- 从机接收地址,拉高ARREADY完成握手
- 从机在R通道上返回读数据,同时拉高RVALID
- 主机接收数据,拉高RREADY完成握手
- 如果是最后一个数据,从机将RLAST拉高
写事务稍微复杂一点,因为多了个写响应通道:
- 主机在AW通道上发送写地址
- 主机在W通道上发送写数据
- 从机接收地址和数据后,在B通道返回写响应
- 主机接收响应,完成整个写事务
这里有个容易忽略的点:写地址和写数据可以同时发送,也可以先后发送。AXI协议没有规定顺序。我曾经调试一个bug,发现从机收到了写数据但没收到写地址,结果数据被丢弃了。嗯,从那以后我写代码都会检查地址和数据是否都到达了。
避坑指南:我曾经遇到一个从机IP,它要求写地址必须在写数据之前到达。如果先发数据后发地址,从机直接罢工。所以设计时一定要确认从机的时序要求,别想当然。
4.4 AXI突发传输:批量数据搬运
突发传输是AXI的拿手好戏。说白了,就是一次地址握手,后面跟着连续的数据传输。不用每个数据都发一次地址,效率高得多。
突发传输有三个关键参数:
- AxLEN:突发长度,表示一次突发传输多少个数据。注意,AxLEN=0表示传输1个数据,AxLEN=7表示传输8个数据。
- AxSIZE:数据宽度,以字节为单位。比如AxSIZE=2表示4字节(32位)。
- AxBURST:突发类型,有FIXED、INCR、WRAP三种。
三种突发类型的区别:
| 类型 | 地址变化 | 适用场景 |
|---|---|---|
| FIXED | 地址不变 | 重复访问同一个地址(如FIFO) |
| INCR | 地址递增 | 顺序访问内存(最常见) |
| WRAP | 地址递增,到边界回绕 | Cache line填充 |
举个例子,假设AxLEN=3(传输4个数据),AxSIZE=2(4字节),AxBURST=INCR,起始地址0x1000:
数据0:地址0x1000
数据1:地址0x1004
数据2:地址0x1008
数据3:地址0x100C
如果是WRAP类型,地址到了边界(比如0x100F)会回绕到起始地址。这个在Cache设计中很常用,我做过一个项目,CPU的Cache line填充就用WRAP突发,效率比INCR高了30%。
性能关键:突发传输能大幅减少地址握手的开销。一次突发传输,地址通道只握手一次,数据通道连续传输。对于大数据块搬运,性能提升非常明显。
4.5 核心知识体系
下面这张图是我自己画的,把AXI协议的核心逻辑串起来了。你看一眼,基本就能理解AXI的全貌。
这张图把AXI的核心要素都串起来了。主机和从机之间,五个通道各司其职。握手机制保证数据可靠传输,突发传输提升效率。三者缺一不可。
我个人觉得,理解AXI的关键不在于背协议细节,而在于理解它的设计思想:分离、并行、流水线。你想想看,为什么AXI性能好?就是因为读和写不打架,地址和数据不排队,一次握手能传一堆数据。
好了,AXI协议的基础就聊到这儿。下一节咱们会深入AXI的乱序传输和原子操作,那才是真正考验设计能力的地方。
公众号:蓝海资料掘金营,微信deep3321