3、AXI传输事务:突发传输、乱序传输、交织传输
大家好,我是你们的芯片架构设计讲师。今天我们来聊聊AXI总线里最核心的几个概念——突发传输、乱序传输和交织传输。说实话,这几个概念刚接触时容易搞混,但搞懂了它们,你基本就掌握了AXI的精髓。
我个人习惯把AXI的传输事务想象成一个快递系统。地址是快递单号,数据是包裹本身。地址通道和数据通道是两条独立的流水线,这设计太巧妙了——你想想看,快递单可以提前寄出,包裹可以分批到达,甚至不同订单的包裹可以混在一起运输。
3.1 突发传输(Burst)
突发传输,说白了就是一次地址请求,连续传输多个数据。我在项目中遇到过不少新手,总喜欢把连续地址的读写拆成单次传输,结果带宽利用率惨不忍睹。
AXI的突发传输有三个关键参数:
- AxLEN:突发长度,表示一次突发传输多少个数据节拍(beat)。比如AxLEN=3,就是传4个数据(从0开始计数)。
- AxSIZE:每个数据节拍的字节数。比如AxSIZE=2,就是4字节(2^2=4)。
- AxBURST:突发类型,有FIXED、INCR、WRAP三种。
嗯,这里要注意:AxLEN是实际节拍数减1。我刚开始做设计时,总在这里栽跟头——配置AxLEN=7,以为传7个数据,结果传了8个,把后面的地址空间给踩了。
三种突发类型对比:
| 类型 | 地址变化 | 典型应用 |
|---|---|---|
| FIXED | 地址不变 | FIFO操作、状态寄存器重复读取 |
| INCR | 地址递增 | 内存连续读写、DMA传输 |
| WRAP | 地址递增,到边界回绕 | Cache Line填充、环形缓冲区 |
举个例子,一个INCR突发传输,起始地址0x1000,AxLEN=3,AxSIZE=2(4字节):
地址序列:0x1000 → 0x1004 → 0x1008 → 0x100C
数据通道:D0 → D1 → D2 → D3
我曾经调试过一个DMA控制器,发现传输效率只有理论值的60%。查了半天,原来是软件配置的突发长度太小,每次只传2个节拍,地址通道的开销占比太大。改成16节拍后,效率直接飙到95%以上。
3.2 乱序传输(Out-of-Order)
乱序传输,这是AXI最强大的特性之一。为什么需要乱序?你想想看,如果总线只能按顺序处理事务,那一个慢速设备就会堵住后面所有快速设备的请求。
AXI通过ID标签来实现乱序。每个事务都有一个ID,从设备返回的数据和响应必须携带相同的ID。主设备根据ID来匹配请求和响应。
ID管理小技巧:
我个人建议,每个主设备使用不同的ID高位,低位用于区分不同的事务。比如主设备0用ID[3:2]=00,主设备1用ID[3:2]=01。这样在互联逻辑里,解码和路由会简单很多。
乱序传输的典型场景:
- 主设备发出读请求A(访问慢速外设)和读请求B(访问快速SRAM)
- 请求B先完成,数据先返回
- 请求A后完成,数据后返回
- 主设备根据ID区分,B的数据先被处理
我在一个多核处理器项目中,遇到过乱序导致的死锁问题。两个核同时访问共享内存,ID分配不当,导致互联逻辑无法正确排序。嗯,从那以后我设计了一套严格的ID分配规则,再也没出过问题。
3.3 交织传输(Interleaving)
交织传输和乱序传输经常被混淆。我简单区分一下:
- 乱序:整个事务的完成顺序可以打乱
- 交织:同一个事务内的数据节拍可以和其他事务的数据节拍交错传输
说白了,交织是在更细粒度上的乱序。AXI协议允许不同事务的数据节拍在数据通道上交错传输,只要每个节拍携带正确的ID和LAST信号。
交织传输的注意事项:
我曾经在一个视频处理芯片中,为了追求极致带宽,启用了交织传输。结果发现从设备的缓冲区设计不合理,数据节拍交错后,重组逻辑变得异常复杂。最后不得不限制每个从设备只支持2个未完成事务的交织。
建议:除非带宽压力极大,否则不要轻易启用深度交织。一般设计中,2-4个事务的交织深度就足够了。
3.4 地址与数据通道的独立性
这是AXI架构的基石。地址通道和数据通道完全独立,意味着:
- 地址请求可以连续发出,不需要等待数据返回
- 数据通道可以同时传输多个事务的数据
- 读地址通道和读数据通道是单向的,写地址通道和写数据通道也是单向的
我画了一张图,展示地址和数据通道的流水线关系:
从这张图可以看出,地址通道和数据通道是两条独立的流水线。主设备可以连续发出多个地址请求,然后从设备按顺序或乱序返回数据。这种设计让AXI总线能够达到非常高的吞吐率。
通道独立性的实际收益:
- 地址请求可以背靠背发出,无需等待数据返回
- 数据通道可以同时传输多个事务的数据节拍
- 读和写可以完全并行,互不干扰
- 支持多个未完成事务(outstanding transactions)
我记得在一个网络处理器项目中,利用通道独立性,我们实现了读和写的完全并行。写地址通道连续发出32个写请求,然后写数据通道以全速率传输数据,同时读数据通道还在返回之前读请求的数据。这种并行度,是传统总线无法想象的。
好了,这一章的内容就到这里。突发传输让你高效利用带宽,乱序传输让你避免慢速设备阻塞,交织传输让你在更细粒度上优化传输,而通道独立性则是这一切的基础。把这些概念吃透了,AXI互联设计就成功了一半。
可可精品资料库