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。数据在总线上交替出现。

交织传输的好处很明显:

  • 提高总线利用率
  • 降低延迟
  • 支持多通道并行

但交织传输对从设备要求高,必须能处理数据乱序到达。我建议在验证时重点测试:

  1. 多个事务同时交织
  2. 交织过程中某个事务提前结束
  3. 交织与乱序同时发生

核心要点:交织传输只在数据通道上发生。地址通道和控制通道仍然是顺序的。这一点很多初学者会搞混。

3.5 四种机制的关系与对比

这四种机制不是孤立的,它们共同构成了AXI的传输体系。我画了一张图来展示它们的关系:

AXI传输机制关系图 握手协议 VALID/READY 突发传输 Burst 乱序传输 Out-of-Order 交织传输 Interleaving 握手是基础 → 突发提升效率 → 乱序和交织优化性能

从图中可以看出:

  • 握手协议是基础,所有传输都依赖它
  • 突发传输建立在握手之上,一次请求多次传输
  • 乱序传输和交织传输是性能优化手段,它们可以同时使用

我的建议:验证时先保证握手协议正确,再测突发,最后测乱序和交织。一步一个脚印,别想一口吃成胖子。

3.6 验证要点总结

最后,我总结一下验证这四种机制时需要注意的地方:

机制 验证重点 常见问题
握手协议 VALID/READY所有组合、背压场景 VALID提前撤销、死锁
突发传输 边界地址、最大长度、WRAP回绕 地址计算错误、长度溢出
乱序传输 ID匹配、同一ID顺序性 ID被修改、响应乱序
交织传输 数据交叉、事务完整性 数据错位、事务丢失

嗯,这部分内容就到这里。记住一句话:握手是基础,突发是效率,乱序和交织是性能。把这四种机制吃透了,AXI验证就成功了一半。

可可精品资料库