3. AXI传输机制:握手协议、突发传输、乱序传输与交织传输
各位同学,今天我们来聊聊AXI总线最核心的传输机制。说实话,这部分内容我当年刚接触时也觉得有点绕,但后来在实际项目中吃过亏,才真正理解了它的精妙之处。
3.1 握手协议:VALID/READY的默契配合
AXI的传输基础,说白了就是一对信号——VALID和READY。这两个信号就像两个人握手,一个说“我准备好了”,另一个说“我也准备好了”,然后数据就传过去了。
VALID:由源端发出,表示数据或控制信息已经准备好。
READY:由目的端发出,表示可以接收数据。
我个人习惯把握手分成三种情况:
- VALID先有效,READY后有效:源端先准备好,等目的端就绪。这是最常见的场景。
- READY先有效,VALID后有效:目的端提前告知“我随时可以收”,源端准备好后立即传输。
- 同时有效:一拍完成握手,效率最高。
关键点:VALID一旦拉高,必须保持到握手完成。READY可以随时拉高或拉低,但VALID不能中途撤销。这是协议的死规定,违反的话仿真会报错。
我在项目中遇到过一个问题:某个从设备READY信号拉高后,因为内部FIFO满又拉低了,结果VALID已经拉高,导致数据丢失。嗯,这里要注意——READY可以变,但VALID一旦拉高就不能变,直到握手成功。
3.2 突发传输:一次握手,多笔数据
突发传输是AXI的亮点。你想想看,如果每次传一个数据都要握手一次,那效率多低?突发传输允许你一次发起传输请求,然后连续传多个数据。
突发传输有三个关键参数:
| 参数 | 含义 | 我踩过的坑 |
|---|---|---|
| ARLEN/AWLEN | 突发长度,实际传输次数 = 长度 + 1 | 曾经把长度设成0,以为传1笔,结果传了0笔 |
| ARSIZE/AWSIZE | 每笔数据的字节数 | 注意不能超过数据总线宽度 |
| ARBURST/AWBURST | 地址递增方式:FIXED/INCR/WRAP | WRAP模式边界计算容易出错 |
突发类型有三种:
- FIXED:每次地址不变,适合访问FIFO或寄存器
- INCR:地址递增,最常用,适合连续内存访问
- WRAP:地址递增到边界后回绕,适合Cache Line填充
我的经验:验证WRAP突发时,一定要测试地址刚好在边界上的情况。比如4拍WRAP,地址从0xC开始,到0xF后下一笔应该回到0x0。我曾经漏测这个边界,结果芯片回来Cache出问题,排查了两天才找到原因。
3.3 乱序传输:ID标签的妙用
乱序传输,说白了就是允许后面的请求先完成。为什么会这样?因为不同的从设备响应速度不一样。比如一个从设备是SRAM,另一个是DDR,DDR可能先准备好数据。
AXI用ID标签来区分不同的传输事务。每个请求都带一个ID,响应时必须返回相同的ID。这样主设备就能知道哪个响应对应哪个请求。
乱序传输有几个要点:
- 同一ID的事务必须按顺序完成
- 不同ID的事务可以乱序完成
- 读和写通道独立,读可以乱序,写也可以乱序
避坑指南:我曾经设计一个互联模块,把不同ID的事务合并了,结果响应乱序后主设备崩溃。记住:ID是乱序的命根子,不能改!
3.4 交织传输:数据通道的流水线
交织传输比乱序更进一步。乱序是事务级别的,交织是数据节拍级别的。什么意思?就是不同事务的数据可以交叉着传输。
举个例子:事务A要传4笔数据,事务B要传2笔数据。交织传输允许这样传:A0, B0, A1, B1, A2, A3。数据在总线上交替出现。
交织传输的好处很明显:
- 提高总线利用率
- 降低延迟
- 支持多通道并行
但交织传输对从设备要求高,必须能处理数据乱序到达。我建议在验证时重点测试:
- 多个事务同时交织
- 交织过程中某个事务提前结束
- 交织与乱序同时发生
核心要点:交织传输只在数据通道上发生。地址通道和控制通道仍然是顺序的。这一点很多初学者会搞混。
3.5 四种机制的关系与对比
这四种机制不是孤立的,它们共同构成了AXI的传输体系。我画了一张图来展示它们的关系:
从图中可以看出:
- 握手协议是基础,所有传输都依赖它
- 突发传输建立在握手之上,一次请求多次传输
- 乱序传输和交织传输是性能优化手段,它们可以同时使用
我的建议:验证时先保证握手协议正确,再测突发,最后测乱序和交织。一步一个脚印,别想一口吃成胖子。
3.6 验证要点总结
最后,我总结一下验证这四种机制时需要注意的地方:
| 机制 | 验证重点 | 常见问题 |
|---|---|---|
| 握手协议 | VALID/READY所有组合、背压场景 | VALID提前撤销、死锁 |
| 突发传输 | 边界地址、最大长度、WRAP回绕 | 地址计算错误、长度溢出 |
| 乱序传输 | ID匹配、同一ID顺序性 | ID被修改、响应乱序 |
| 交织传输 | 数据交叉、事务完整性 | 数据错位、事务丢失 |
嗯,这部分内容就到这里。记住一句话:握手是基础,突发是效率,乱序和交织是性能。把这四种机制吃透了,AXI验证就成功了一半。
可可精品资料库