AXI总线:Outstanding、Out-of-Order、Interleaving

很多人学AXI协议,看了一堆握手信号、通道分离,总觉得"好像懂了,但又说不出它比AHB强在哪"。其实差距就三个词:Outstanding、Out-of-Order、Interleaving。这三个特性把总线从"串行排队"变成了"并行调度",是AXI高性能的核心底牌。


一、Outstanding:不等回包,先把地址撒出去

Outstanding直译是"未完成的事务",业内更形象的说法叫"在路上"。

没有Outstanding能力的总线(比如AHB),Master发完地址必须干等数据回来,才能发下一笔。读操作就是:发地址→等数据→发地址→等数据,整个总线周期大量时间在空转。

AXI把地址通道和数据通道彻底拆开,Master可以在Slave还没返回数据的时候,连续把地址发出去。假设Slave的Outstanding深度是4,Master一口气连发4个读地址,然后等着Slave慢慢回数据。这期间只要Slave消化掉一个,Master立刻补上一个新的地址,总线始终保持满载。

实际做设计的时候,Outstanding深度是衡量Master和Slave性能的关键指标。CPU的AXI接口通常配8~16的Outstanding,DMA可能更高。但也不是越大越好,深度上去了,Slave内部的Buffer和Reorder Buffer都要跟着扩容,面积和功耗都是代价。


二、Out-of-Order:快的不用等慢的

有了Outstanding,新的问题来了:先发出去的那笔地址,对应的Slave可能正好在忙,或者访问的是慢速外设(比如Flash),数据半天回不来。后面先发出去的那笔要是也干等着,总线又被拖住了。

Out-of-Order解决的就是这个"队头阻塞"。

AXI给每个事务打上一个ID标签(ARID/AWID)。协议规定:同一个ID的事务必须按顺序完成,不同ID的事务随便乱序。Master给访问Cache的读请求挂ID=0,给访问外设的读请求挂ID=1,Slave回数据的时候,Cache那笔先好了就先把ID=0的数据丢回来,外设那笔慢就慢慢等着,互不耽误。

这里有个工程上常见的坑:有些IP号称支持AXI,但只支持Outstanding不支持Out-of-Order。这种Master如果收到乱序返回的读数据,要么直接丢数据,要么卡死。所以做系统集成的时候,如果中间接了Interconnect,一定要确认Master的Out-of-Order能力,不然就得在总线里加Reorder逻辑,复杂度直接翻倍。


三、Interleaving:数据拆碎了穿插传

Out-of-Order是"事务级别"的乱序,Interleaving则是"数据级别"的乱序,粒度更细。

举个例子:Master发了两笔读请求,每笔都是4个Beat的数据。Out-of-Order允许Slave先完整回完第二笔的4个Beat,再回第一笔。Interleaving则更激进,允许Slave把两笔数据拆成单个Beat穿插着回:第一笔的Beat0、第二笔的Beat0、第一笔的Beat1、第二笔的Beat1......

写交织在AXI3里支持,靠WID来区分不同事务的数据。但说实话,写交织用起来太折腾了,Master设计复杂,Slave设计更复杂,实际收益却有限。所以AXI4直接把WID砍了,写数据必须跟写地址的顺序严格对应,写交织不再支持。读交织理论上还在,但大部分Slave的实现策略也是"攒够一个Burst再连续发",真搞Interleaving的并不多。


四、三者的关系与设计取舍

这三个特性不是孤立的,而是层层递进:

Outstanding是基础,没有它后面两个都无从谈起。Out-of-Order是Outstanding的必然产物,既然多笔事务同时在飞,自然会有先有后。Interleaving是更细粒度的优化,但性价比偏低,AXI4已经基本把它边缘化了。

做实际项目的时候,有个朴素的经验:

  • Master读:必须支持Out-of-Order和Interleaving,因为Slave的行为你控制不了。

  • Master写:没必要主动搞Out-of-Order和Interleaving,写数据按顺序发最简单可靠。

  • Slave写:必须支持Out-of-Order和Interleaving,因为你不知道Master会怎么发。

  • Slave读:尽量按顺序回数据,乱序和交织会增加Master的接收复杂度,容易出问题。

最后提一句,很多高性能场景下(比如GPU访存、AI加速器),Interconnect里的ID宽度、Reorder Buffer深度、Outstanding计数器,都是调性能的关键参数。理解这三个特性,再看总线的瓶颈分析,思路会清晰很多。