第2章:AXI通道详解——五条通道与握手协议
大家好,我是你们的芯片设计老司机。今天咱们来聊聊AXI总线最核心的部分——那五条通道和它们的握手方式。说实话,我刚接触AXI时也被这五条通道搞得有点晕,但搞懂了它们,你就掌握了AXI的精髓。
2.1 五条通道概览
AXI协议把一次传输拆成了五个独立的通道。为什么要这么设计?说白了就是为了并行。你想想看,读和写可以同时进行,地址和数据也能分开处理,这效率不就上来了吗?
这五条通道分别是:
- 读地址通道(AR):主机告诉从机,我要读哪个地址的数据
- 读数据通道(R):从机把读到的数据返回给主机
- 写地址通道(AW):主机告诉从机,我要往哪个地址写数据
- 写数据通道(W):主机把要写的数据发送给从机
- 写响应通道(B):从机告诉主机,写操作完成了,有没有出错
我在项目中遇到过不少新人,一上来就问:为什么写操作需要三个通道,而读操作只需要两个?嗯,这个问题问得好。因为写操作需要从机给个反馈,告诉主机数据写进去了没。读操作呢?数据本身就已经包含了反馈信息。
2.2 读地址通道(AR)详解
读地址通道,就是主机告诉从机「我要读数据」的通道。它携带的信息包括:
| 信号 | 位宽 | 说明 |
|---|---|---|
| ARADDR | 32/64位 | 读操作的起始地址 |
| ARLEN | 8位 | 突发传输长度,实际传输次数 = ARLEN + 1 |
| ARSIZE | 3位 | 每次传输的字节数,2^ARSIZE |
| ARBURST | 2位 | 突发类型:00=FIXED, 01=INCR, 10=WRAP |
| ARID | 取决于配置 | 读事务ID,用于乱序传输 |
我个人习惯把AR通道想象成「下单」的过程。主机下了一个订单,告诉从机我要什么地址的数据,要多少,怎么要。从机收到这个订单后,就开始准备数据。
2.3 读数据通道(R)详解
读数据通道是从机返回数据的通道。它包含:
- RDATA:读到的数据,位宽通常是32、64或128位
- RRESP:读响应状态,2位宽,00=OKAY, 01=EXOKAY, 10=SLVERR, 11=DECERR
- RLAST:最后一次传输的标志,1位宽
- RID:读事务ID,与ARID对应
这里要注意的是,读数据通道的最后一个数据会拉高RLAST信号。从机可以一次返回所有数据,也可以分多次返回。我曾经调试过一个bug,就是RLAST信号没处理好,导致主机一直在等数据,整个总线都卡死了。
2.4 写地址通道(AW)详解
写地址通道和读地址通道非常相似,只是方向不同。它包含:
| 信号 | 说明 |
|---|---|
| AWADDR | 写操作的起始地址 |
| AWLEN | 突发传输长度 |
| AWSIZE | 每次传输的字节数 |
| AWBURST | 突发类型 |
| AWID | 写事务ID |
说白了,AW通道和AR通道就是一对双胞胎,只是一个是读,一个是写。很多设计里,这两个通道的地址生成逻辑可以复用。
2.5 写数据通道(W)详解
写数据通道是主机把数据发送给从机的通道。它包含:
- WDATA:要写入的数据
- WSTRB:字节选通信号,每1位对应1个字节,高电平表示该字节有效
- WLAST:最后一次传输的标志
- WID:写数据ID(在AXI3中使用,AXI4已取消)
WSTRB这个信号很有意思。它允许你只写数据中的某些字节。比如你只想写一个32位数据的低8位,WSTRB就设成4'b0001。我在项目中遇到过有人忘了处理WSTRB,结果把不该写的数据也写进去了,整个系统的数据都乱了套。
2.6 写响应通道(B)详解
写响应通道是从机给主机的反馈。它包含:
- BRESP:写响应状态,2位宽,含义和RRESP一样
- BID:写事务ID,与AWID对应
写响应通道只有一笔数据,不像读数据通道那样可以有多笔。为什么?因为写操作是一次性的,从机收到所有数据后,给个反馈就行了。
2.7 握手协议:VALID/READY
好了,通道讲完了,现在来说说它们之间怎么通信。AXI使用VALID/READY握手协议。这个协议很简单,就两个信号:
- VALID:发送方表示数据有效
- READY:接收方表示可以接收数据
数据只有在VALID和READY同时为高时才传输。这就像两个人握手,一个人伸出手(VALID),另一个人也伸出手(READY),两只手握在一起才算握手成功。
握手有三种情况:
- VALID先来,READY后来:发送方先准备好数据,等待接收方
- READY先来,VALID后来:接收方先准备好,等待发送方
- VALID和READY同时来:一拍完成传输,效率最高
2.8 通道间的依赖关系
五条通道之间不是完全独立的,它们有依赖关系:
- 读数据通道必须等读地址通道握手成功后才能开始传输
- 写数据通道和写地址通道可以同时进行,没有先后顺序
- 写响应通道必须等写数据通道的WLAST传输完成后才能发出
我建议你在设计时,把地址通道的优先级设高一些。因为地址通道的数据量小,传输快,先传地址可以让从机提前准备。这个经验是我在调试一个高性能系统时总结出来的。
2.9 知识体系图
下面这张图展示了AXI五条通道和握手协议的关系:
2.10 实战经验总结
最后,分享几个我在项目中积累的经验:
- 地址对齐很重要:突发传输的地址必须和ARSIZE/AWSIZE对齐,否则从机可能无法正确处理
- ID要配对:ARID和RID要一致,AWID和BID要一致,否则乱序传输时会乱套
- 不要忽略响应:每次写操作都要检查BRESP,每次读操作都要检查RRESP。我曾经忽略了一次SLVERR,结果整个系统都在用错误的数据运行
- WLAST不能丢:写数据通道的WLAST信号必须准确,从机靠它来判断写操作是否结束
好了,这一章的内容就到这里。五条通道和握手协议是AXI的基础,搞懂了这些,后面的内容就会轻松很多。记住,多动手写代码,多仿真调试,才能真正掌握这些知识。