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传输特性的核心逻辑关系:

AXI传输特性 突发传输 (Burst) 地址对齐/非对齐 窄传输与掩码 FIXED INCR WRAP 对齐传输 非对齐传输 WSTRB掩码 字节使能 核心原则:突发长度×数据宽度 ≤ 4KB 非对齐传输会拆分,窄传输靠WSTRB控制

这张图把三个核心特性串起来了。你看,突发传输关注的是「一次传多少笔」,地址对齐关注的是「地址放得对不对」,窄传输关注的是「数据用不用得完」。三者独立但又相互影响——比如非对齐的突发传输,处理起来就特别麻烦。

总结一下今天的内容:

  • 突发传输用一次地址换多笔数据,FIXED/INCR/WRAP各有用途
  • 地址对齐是性能的关键,非对齐传输能避免但最好别用
  • 窄传输靠WSTRB实现字节级控制,验证时一定要覆盖各种掩码组合

好了,这一章就到这里。记住我强调的那几个坑,设计时多留个心眼,能省不少调试时间。

可可精品资料库