4、AXI传输特性:突发传输(Burst)、地址对齐与非对齐传输、窄传输(Narrow Transfer)与数据掩码
各位同学,今天我们来聊聊AXI总线里最核心的几个传输特性。说实话,这些概念刚接触时容易混淆,但搞懂了它们,你基本就掌握了AXI的精髓。
我个人习惯把AXI的传输想象成「搬家」——突发传输就像一次搬多件家具,地址对齐就是家具要放对位置,窄传输则是用小箱子搬大件物品。嗯,这样理解起来会轻松很多。
4.1 突发传输(Burst)——一次握手,多笔数据
突发传输是AXI最亮眼的特性之一。为什么需要它?你想想看,如果每次传输都要重新发起地址和握手,效率得多低。突发传输允许你只发送一次地址,然后连续传输多笔数据。
AXI定义了三种突发类型:
| 突发类型 | 地址增长方式 | 典型应用场景 |
|---|---|---|
| FIXED | 地址不变 | FIFO、状态寄存器 |
| INCR | 地址递增 | 内存连续读写 |
| WRAP | 地址循环递增 | Cache Line填充 |
我在项目中遇到过一个问题:某个DMA控制器配置了INCR突发,但地址边界没处理好,结果跨4KB边界时数据乱了。后来我养成了一个习惯——突发长度 × 数据宽度 ≤ 4KB,这个规则一定要记住。
关键参数:
- ARLEN/AWLEN:突发长度,实际传输笔数 = ARLEN + 1
- ARSIZE/AWSIZE:每笔数据的字节数 = 2^SIZE
- ARBURST/AWBURST:突发类型(00=FIXED, 01=INCR, 10=WRAP)
// 示例:一次INCR突发传输,长度4,每笔4字节
// 起始地址:0x1000
// 传输地址序列:0x1000, 0x1004, 0x1008, 0x100C
// 地址计算规则(INCR):
// Addr[i] = Start_Addr + i × (2^SIZE)
// 其中 i = 0, 1, ..., ARLEN
4.2 地址对齐与非对齐传输——强迫症患者的福音
地址对齐,说白了就是地址能被数据宽度整除。比如32位总线,地址0x1000是对齐的,0x1001就不是。
AXI协议本身支持非对齐传输,但代价是什么?我告诉你——性能损失。非对齐传输会被拆分成两次或多次对齐传输,总线利用率直接打折扣。
避坑指南:
我曾经设计一个视频处理芯片,软件工程师传数据时地址没对齐,结果带宽直接腰斩。后来我们在DMA里加了地址对齐检查,非对齐地址直接报错。虽然有点粗暴,但确实有效。
非对齐传输的处理方式:
- 硬件自动拆分:Master发出非对齐地址,Interconnect或Slave自动拆成多个对齐传输
- 软件保证对齐:驱动层做地址对齐,硬件只处理对齐传输
- 混合策略:小数据量允许非对齐,大数据量强制对齐
4.3 窄传输(Narrow Transfer)与数据掩码——精准控制每一字节
窄传输是什么?就是数据总线宽度大于实际传输的数据宽度。比如64位总线只传8位数据,剩下的56位怎么办?用WSTRB信号来控制。
WSTRB是写数据掩码,每个bit对应一个字节。1表示该字节有效,0表示无效。读操作没有掩码,因为读回来的数据你可以自己选择用哪些。
| 数据总线宽度 | WSTRB位宽 | 每bit对应字节 |
|---|---|---|
| 32位 | 4位 | WSTRB[0]→Byte0, WSTRB[1]→Byte1, ... |
| 64位 | 8位 | WSTRB[0]→Byte0, WSTRB[1]→Byte1, ... |
| 128位 | 16位 | WSTRB[0]→Byte0, WSTRB[1]→Byte1, ... |
实用技巧:
我习惯在验证环境里随机生成WSTRB值,专门测试Slave对窄传输的处理。很多bug就是这么抓出来的——比如某个Slave只检查了WSTRB全1的情况,窄传输时数据就写错了位置。
// 窄传输示例:64位总线,只写低16位
// 地址:0x1000
// WSTRB = 4'b0011 // 只使能Byte0和Byte1
// WDATA = 0xXXXXXXXXXXXXABCD // 只有低16位有效
// 实际写入内存的数据:
// 0x1000: 0xCD
// 0x1001: 0xAB
// 0x1002-0x1007: 保持不变
4.4 知识体系总览
说了这么多,我们来画个图把整个知识体系串起来。下面这张图展示了AXI传输特性的核心逻辑关系:
这张图把三个核心特性串起来了。你看,突发传输关注的是「一次传多少笔」,地址对齐关注的是「地址放得对不对」,窄传输关注的是「数据用不用得完」。三者独立但又相互影响——比如非对齐的突发传输,处理起来就特别麻烦。
总结一下今天的内容:
- 突发传输用一次地址换多笔数据,FIXED/INCR/WRAP各有用途
- 地址对齐是性能的关键,非对齐传输能避免但最好别用
- 窄传输靠WSTRB实现字节级控制,验证时一定要覆盖各种掩码组合
好了,这一章就到这里。记住我强调的那几个坑,设计时多留个心眼,能省不少调试时间。