3、AXI通道详解:读地址通道(AR)、读数据通道(R)、写地址通道(AW)、写数据通道(W)、写响应通道(B)
AXI总线有五个独立的通道,这是它最核心的设计。我刚开始接触AXI时,觉得五个通道有点多,但用久了你会发现——这恰恰是它高性能的秘诀。
说白了,这五个通道就像五条并行的流水线。它们各自干各自的活,互不干扰。读操作走读通道,写操作走写通道,地址和数据还能分开走。你想想看,这效率能不高吗?
下面我一个一个给你拆开讲。
3.1 读地址通道(AR)
读地址通道,简称AR通道。它的任务很简单——告诉从设备,你要读哪个地址的数据。
我个人习惯把AR通道看作“快递单”。你寄快递时,得先填个单子,写上地址。AR通道干的就是这个活。
AR通道的关键信号:
- ARADDR:读地址。你要读的起始地址。
- ARLEN:突发长度。一次读几个数据?比如ARLEN=3,表示读4个数据(0-based)。
- ARSIZE:数据宽度。每个数据多少字节?2表示4字节,3表示8字节。
- ARBURST:突发类型。固定地址?递增地址?还是包裹地址?
- ARVALID / ARREADY:握手信号。主设备说“地址有效”,从设备说“我收到了”。
我在项目中遇到过一个问题:ARLEN设置错了,导致读回来的数据顺序全乱了。嗯,这里要注意——ARLEN是0-based的,ARLEN=0表示只读1个数据,ARLEN=7表示读8个数据。千万别搞反了。
3.2 读数据通道(R)
读数据通道,简称R通道。从设备把数据通过这个通道返回给主设备。
R通道和AR通道是配对的。你发了地址,从设备就返回数据。但有个关键点——R通道可以比AR通道慢一拍,甚至慢很多拍。这就是AXI的“流水线”特性。
我的经验: 读数据通道的延迟取决于从设备的响应速度。比如DDR控制器,它可能几十个时钟周期后才返回数据。设计时一定要考虑这个延迟,别让主设备傻等。
R通道有个特殊信号——RLAST。它表示“这是最后一个数据”。当RLAST拉高时,说明这次突发读结束了。我刚开始做验证时,经常忘记检查RLAST,结果读数据读多了也不知道。
避坑指南: 我曾经在一个项目中,R通道的RRESP返回了SLVERR(从设备错误)。查了半天,原来是地址越界了。所以,读地址一定要确保在从设备的地址范围内。
3.3 写地址通道(AW)
写地址通道,简称AW通道。它和AR通道很像,只不过这次是写操作。
AW通道传递的是写地址、突发长度、数据宽度等信息。从设备收到这些信息后,就知道“哦,主设备要往这个地址写数据了”。
| 信号 | 描述 | 我的备注 |
|---|---|---|
| AWADDR | 写地址 | 注意对齐要求 |
| AWLEN | 突发长度 | 0-based,和ARLEN一样 |
| AWSIZE | 数据宽度 | 不能超过总线宽度 |
| AWBURST | 突发类型 | INCR最常用 |
我个人习惯把AW通道和W通道分开设计。地址先发,数据后发,这样从设备可以提前准备。你想想看,如果地址和数据一起发,从设备就得同时处理两件事,容易出乱子。
3.4 写数据通道(W)
写数据通道,简称W通道。它负责把要写的数据发送给从设备。
W通道有个独特的地方——它带了一个WSTRB信号(写选通)。这个信号用来控制哪些字节是有效的。比如你只想写一个32位数据的最低字节,WSTRB就设为4'b0001。
我在项目中遇到过一个问题:WSTRB设置错了,导致数据写到了错误的位置。那次调试花了我整整两天。所以,我建议你在设计时,一定要仔细检查WSTRB的逻辑。
W通道的关键点:
- WLAST信号:表示最后一个数据。和RLAST类似。
- WVALID / WREADY:握手信号。数据是否有效?从设备是否准备好接收?
- WSTRB:字节选通。每个bit对应一个字节。
写数据通道可以比写地址通道晚发数据。AXI协议允许AW和W通道独立握手,只要保证数据在地址之后到达就行。这个灵活性在实际设计中非常有用。
3.5 写响应通道(B)
写响应通道,简称B通道。它用来返回写操作的结果。
B通道只有一个信号——BRESP。它告诉主设备:写操作成功了?还是出错了?
BRESP的值有四种:
- OKAY:正常完成。写操作成功了。
- EXOKAY:独占访问成功。用于原子操作。
- SLVERR:从设备错误。比如地址越界、不支持的操作。
- DECERR:解码错误。地址没有对应的从设备。
嗯,这里要注意——B通道只在写操作完成后才返回。也就是说,你发了地址和数据后,要等从设备处理完,才会收到B通道的响应。这个延迟可能很长,设计时要有心理准备。
我的建议: 在验证写操作时,一定要检查B通道的BRESP。我曾经见过一个案例,BRESP返回了SLVERR,但主设备没检查,结果数据没写进去也不知道。这种bug最难查。
3.6 五个通道的协同工作
五个通道不是孤立的。它们通过握手信号(VALID/READY)协同工作。我画了一张图,帮你理解它们的关系:
从这张图你能看到:读操作需要AR和R两个通道配合,写操作需要AW、W、B三个通道配合。读和写可以同时进行,互不干扰。
我个人觉得,理解这五个通道的关键在于“独立”二字。每个通道都有自己的握手信号,都有自己的数据流。你设计时,可以把它们当作五个独立的状态机来处理。
总结一下:
- AR通道:发读地址,从设备收到后开始准备数据。
- R通道:从设备返回数据,带RLAST表示结束。
- AW通道:发写地址,告诉从设备“我要写数据了”。
- W通道:发写数据,带WSTRB控制字节有效位。
- B通道:返回写结果,必须检查BRESP。
这五个通道是AXI的基础。你把它搞懂了,后面的DMA传输、多路互联什么的,学起来就轻松多了。
我的小技巧: 刚开始学AXI时,可以先把读通道(AR+R)和写通道(AW+W+B)分开验证。等读和写都跑通了,再把它们合在一起。这样调试起来思路清晰,不容易乱。
可可精品资料库