AXI通道详解:五条通道的信号定义与时序
大家好,我是老李。做芯片设计这些年,AXI协议算是我打交道最多的接口之一了。今天咱们聊聊AXI的五个独立通道——说白了,就是数据在总线上怎么走的五条专用道。
你想想看,一个完整的读写事务,需要地址、数据、响应这些信息来回传递。AXI干脆把它们拆成五个独立的通道,各走各的,互不干扰。这样做的好处很明显——可以流水线操作,效率高得多。
一、读地址通道(AR通道)
读地址通道,我习惯叫它AR通道。主设备想从从设备读数据,得先告诉人家读哪里、读多少。
关键信号:
- ARADDR:读地址,32位或64位,看你的地址总线宽度
- ARLEN:突发长度,表示一次读操作传几个数据。注意,实际传的数据个数是ARLEN+1
- ARSIZE:每次传输的字节数,3位编码。比如3'b011表示8字节
- ARBURST:突发类型,固定地址、增量地址还是回绕地址
- ARVALID 和 ARREADY:握手信号,一个发一个收
重点提醒:ARLEN的值是0到15,对应1到16次传输。我见过不少新手把ARLEN=0当成不传输,其实它表示传1个数据。
二、读数据通道(R通道)
从设备收到读地址后,就开始往回传数据了。R通道就是干这个的。
关键信号:
- RDATA:读回来的数据,宽度和ARSIZE匹配
- RRESP:读响应,2位。00表示OKAY,01表示EXOKAY,10表示SLVERR,11表示DECERR
- RLAST:最后一个数据指示。这个信号很重要,主设备靠它知道这次突发读结束了
- RVALID 和 RREADY:握手信号
这里有个细节——读数据通道的时序和读地址通道是独立的。主设备可以连续发多个读地址,从设备慢慢往回传数据。这叫乱序返回,AXI的一大特色。
我的经验:做DMA控制器的时候,我习惯把RLAST信号直接连到状态机的结束判断上。这样代码写起来清爽,也不容易漏掉最后一个数据。
三、写地址通道(AW通道)
写地址通道和读地址通道长得几乎一样,就是前缀从AR变成了AW。
关键信号:
- AWADDR:写地址
- AWLEN:写突发长度
- AWSIZE:每次写的字节数
- AWBURST:突发类型
- AWVALID 和 AWREADY:握手信号
嗯,这里要注意一点:写地址通道和写数据通道是独立的,但两者之间有依赖关系。从设备必须同时收到地址和数据,才能开始写操作。所以设计时得考虑好同步问题。
四、写数据通道(W通道)
写数据通道负责把要写的数据从主设备传到从设备。它比读数据通道多了一个信号——WSTRB。
关键信号:
- WDATA:写数据
- WSTRB:字节选通信号。比如32位数据总线,WSTRB就是4位,每一位对应一个字节。想写哪个字节,就把对应的位置1
- WLAST:最后一个数据指示
- WVALID 和 WREADY:握手信号
避坑指南:我曾经在一个项目里,WSTRB没处理好,导致写数据时把相邻字节也覆盖了。查了两天才发现是WSTRB的位宽算错了。记住,WSTRB的位宽 = 数据总线宽度 / 8。
五、写响应通道(B通道)
写响应通道是五个通道里最简单的一个。从设备写完数据后,通过B通道告诉主设备:写完了,结果如何。
关键信号:
- BRESP:写响应,2位。编码和RRESP一样
- BVALID 和 BREADY:握手信号
注意,写响应是一次突发写操作完成后才返回的,不是每个数据都返回一个响应。也就是说,一次突发写16个数据,只返回一个写响应。
六、握手时序与依赖关系
五个通道之间不是完全独立的,它们有明确的依赖关系。我画了一张图,帮你理清思路:
从图上可以清楚看到:
- 读操作:先走AR通道发地址,再从R通道收数据
- 写操作:AW通道发地址,W通道发数据,这两个可以同时进行。最后从B通道收写响应
七、握手协议详解
每个通道都用VALID和READY信号做握手。说白了就是:
- 发送方把数据准备好,拉高VALID
- 接收方准备好接收,拉高READY
- 当VALID和READY同时为高时,数据就传过去了
这里有三种握手情况:
- VALID先来,READY后来:发送方等接收方
- READY先来,VALID后来:接收方等发送方
- 同时来:一拍搞定,效率最高
设计建议:我一般建议把READY信号设计成组合逻辑,这样接收方可以提前准备好。但要注意组合逻辑的时序,别搞出毛刺来。
八、信号汇总表
| 通道 | 方向 | 关键信号 | 说明 |
|---|---|---|---|
| AR | 主→从 | ARADDR, ARLEN, ARSIZE, ARBURST | 读地址与控制信息 |
| R | 从→主 | RDATA, RRESP, RLAST | 读数据与响应 |
| AW | 主→从 | AWADDR, AWLEN, AWSIZE, AWBURST | 写地址与控制信息 |
| W | 主→从 | WDATA, WSTRB, WLAST | 写数据与字节选通 |
| B | 从→主 | BRESP | 写响应 |
好了,五个通道的基本内容就这些。说白了,AXI的设计思路就是把读写操作拆成独立的流水线,每个通道各司其职。理解了这个,后面看复杂的总线互联就轻松多了。