4、AXI传输特性:突发传输(Burst)、乱序传输(Out-of-Order)、交织传输(Interleaving)

大家好,我是老李,做芯片设计有些年头了。今天咱们聊聊AXI总线里最核心的三个传输特性——突发、乱序和交织。说实话,这三个概念刚接触时容易搞混,但搞懂了它们,你基本就掌握了AXI的精髓。

4.1 突发传输(Burst)——一次握手,批量干活

突发传输,说白了就是一次地址握手,后面跟着传一堆数据。我刚开始做设计时,总觉得这玩意儿不就是个“批量模式”嘛,后来才发现它背后的门道挺深。

为什么需要突发?你想想看,如果每次传一个数据都要重新走一遍地址握手,那效率得多低。尤其像DMA搬运数据、CPU读取cache line这种场景,地址是连续的,一次握手传多个数据,带宽利用率直接拉满。

AXI突发传输的三个关键参数:

  • ARLEN/AWLEN:突发长度,表示一次突发传输的数据个数。注意,这个值是“长度-1”,比如传8个数据,这里填7。
  • ARSIZE/AWSIZE:数据宽度,用2的幂表示。比如SIZE=3表示8字节(64位)。
  • ARBURST/AWBURST:突发类型,有FIXED、INCR、WRAP三种。

这里我重点说说突发类型。FIXED类型,每次地址不变,适合写同一个寄存器。INCR类型,地址递增,最常用。WRAP类型,地址递增到边界后回绕,专门给cache line用的。

举个例子,一个INCR突发,起始地址0x1000,SIZE=2(4字节),LEN=3(传4个数据),那么地址依次是0x1000、0x1004、0x1008、0x100C。很简单对吧?

我个人习惯:设计时一定要检查地址对齐。如果起始地址没对齐到SIZE边界,有些slave会直接报错。我在一个项目中遇到过,因为地址没对齐,整个系统卡死,查了两天才发现是这个问题。

4.2 乱序传输(Out-of-Order)——谁先准备好谁先走

乱序传输,这是AXI最牛的特性之一。传统的总线协议,比如AHB,事务必须按顺序完成。但AXI允许不同ID的事务乱序完成。

为什么会这样?你想想看,master发了两个读请求,一个去DDR,一个去片上SRAM。DDR延迟大,SRAM延迟小。如果非要等DDR先回来,那SRAM的数据就得干等着,多浪费。

AXI的做法是:每个事务带一个ID标签。slave返回数据时,带上相同的ID。master根据ID把数据重新排序。这样,不同ID的事务可以乱序完成,同一ID的事务必须保序。

我曾经踩过的坑:在设计interconnect时,ID的分配一定要小心。如果两个master用了相同的ID,乱序就会出问题。我建议每个master分配独立的ID高位,低位留给事务编号。这样既保证乱序,又不会冲突。

乱序传输对性能的提升非常明显。我记得有个项目,CPU和GPU共用DDR带宽。CPU的读请求延迟敏感,GPU的写请求带宽敏感。通过乱序传输,CPU的读请求可以插队先完成,用户体验好很多。

4.3 交织传输(Interleaving)——更细粒度的乱序

交织传输,说白了就是乱序的“加强版”。乱序是以事务为单位的,而交织是以数据节拍(beat)为单位的。

什么意思呢?假设master发了两个读事务,每个事务传4个数据。正常情况下,事务1的4个数据全部返回后,事务2才开始返回。但交织允许事务1返回2个数据后,事务2就插进来返回1个数据,然后事务1再继续。

这种特性对延迟敏感的应用特别有用。比如视频处理,数据流是连续的,交织传输可以让数据更均匀地到达,减少缓冲区的压力。

特性 乱序传输 交织传输
粒度 事务级别 数据节拍级别
ID要求 不同ID可乱序 同一ID也可交织
实现复杂度 中等 较高
典型应用 多master共享总线 实时数据流处理

注意:交织传输不是所有slave都支持的。我在一个项目中,slave不支持交织,但master发了交织请求,结果slave直接返回错误数据。嗯,这里一定要检查slave的capability。

4.4 三者关系与实战建议

突发、乱序、交织,这三个特性是层层递进的。突发是基础,乱序是优化,交织是极致。实际设计中,大部分场景用突发+乱序就够了,交织用得少一些。

我画了一张图,帮你理清它们的关系:

AXI传输特性关系图 突发传输(Burst) 一次地址握手,传输多个数据节拍 关键参数:LEN, SIZE, BURST类型 乱序传输(Out-of-Order) 不同ID的事务可以乱序完成 同一ID的事务必须保序 交织传输(Interleaving) 同一ID的不同数据节拍可以交织 更细粒度的乱序,实现复杂度更高

从图中可以看出,突发是基础能力,乱序在突发之上增加了事务级别的灵活性,交织则进一步细化了数据节拍级别的调度。

我的实战建议:

  • 如果系统只有一个master,用突发就够了,乱序和交织反而增加复杂度。
  • 多master系统,一定要用乱序,否则性能会大打折扣。
  • 交织只在实时性要求极高的场景使用,比如视频、音频处理。
  • 设计slave时,至少支持突发和乱序,交织作为可选特性。

好了,关于AXI的这三个传输特性,我就讲到这里。记住,突发是基础,乱序是常态,交织是进阶。实际项目中,根据需求选择合适的特性,不要盲目追求高级功能。

可可精品资料库