当前位置: 首页 > news >正文

AXI中的burst有几种?都用在什么场景中

AXI中的burst有几种?都用在什么场景中

       摘要:在 AXI (Advanced eXtensible Interface) 协议中,Burst 传输是数据传输的基本方式,用于提高传输效率。AXI 定义了三种 Burst 类型:FIXEDINCRWRAP。每种 Burst 类型适用于不同的场景,其行为和地址计算方式也不同。以下详细解释三种 Burst 类型的应用场景,以及 WRAP Burst 的上下边界计算方法。


1. AXI 中的三种 Burst 类型及其应用场景

1.1 FIXED Burst

  • 定义:FIXED Burst 是一种固定地址的 Burst 传输方式。在整个 Burst 期间,地址保持不变,每次数据传输(Beat)都访问相同的地址。
  • 特点
    • 地址不递增,每次传输的地址与起始地址相同。
    • 适用于访问单个寄存器或 FIFO 类型的设备。
  • 应用场景
    • FIFO 访问:当 Master 需要多次读写同一个 FIFO 端口时,使用 FIXED Burst 可以连续访问同一地址。例如,读取或写入音频数据流到 FIFO。
    • 寄存器轮询:当 Master 需要反复读取某个状态寄存器(如等待中断或状态位变化)时,可以使用 FIXED Burst 持续访问同一地址。
    • 简单外设:某些简单外设可能只支持固定地址访问,FIXED Burst 适用于这种场景。

1.2 INCR Burst

  • 定义:INCR Burst 是一种递增地址的 Burst 传输方式。每次数据传输(Beat)后,地址按照传输大小(AxSIZE)递增,地址连续增加。
  • 特点
    • 地址从起始地址开始,每次传输后增加一个步长(步长 = 2^AxSIZE,例如 4 字节传输时步长为 4)。
    • 地址递增可以跨页面边界(但需要注意 AXI 规范中对跨边界传输的限制)。
  • 应用场景
    • 内存访问:最常见的 Burst 类型,用于读取或写入连续的内存块。例如,DMA (Direct Memory Access) 传输大块数据时,使用 INCR Burst 访问连续地址。
    • 数组操作:当 Master 需要访问数组或缓冲区中的连续数据时,INCR Burst 是最自然的选择。
    • 通用数据传输:适用于大多数需要高效传输连续数据的场景,是 AXI 中最常用的 Burst 类型。

1.3 WRAP Burst

  • 定义:WRAP Burst 是一种环绕地址的 Burst 传输方式。地址从起始地址开始递增,但当达到某个边界时,地址会“环绕”回到较低地址,形成一个循环范围。
  • 特点
    • 地址递增类似于 INCR,但会在特定边界(由 Burst 长度和大小决定)处环绕。
    • 适用于需要循环访问固定范围内存的场景。
  • 应用场景
    • 缓存行操作 (Cache Line Access):WRAP Burst 常用于缓存系统,当访问缓存行数据时,地址可能需要从缓存行的末尾环绕到开头。例如,处理器读取缓存行数据时,如果起始地址不是缓存行对齐的,WRAP Burst 可以在达到缓存行边界时环绕。
    • 循环缓冲区 (Circular Buffer):在嵌入式系统中,循环缓冲区用于数据流处理(如音频或视频流),WRAP Burst 可以自然地处理循环缓冲区的地址环绕。
    • 特定硬件加速器:某些硬件加速器(如 DSP 或 GPU)可能需要循环访问固定大小的内存块,WRAP Burst 适用于这种需求。

2. WRAP Burst 的上下边界计算

       WRAP Burst 的地址计算比 INCR 和 FIXED 复杂,因为它涉及到环绕机制。WRAP Burst 的上下边界由 Burst 的长度 (AxLEN)、大小 (AxSIZE) 和起始地址 (AxADDR) 共同决定。以下是详细计算方法:

2.1 基本概念

  • Burst 长度 (AxLEN):表示 Burst 中数据传输的次数(Beat 数量),范围为 1 到 16(在 AXI4 中)。
  • Burst 大小 (AxSIZE):表示每次传输的数据字节数,取值为 2 的幂(例如 1, 2, 4, 8, ...,128 字节)。
  • 总传输字节数 (Total Bytes)Total_Bytes = (AxLEN + 1) * (2^AxSIZE)
  • 环绕边界 (Wrap Boundary):WRAP Burst 的地址环绕范围基于总传输字节数,地址会在达到边界时环绕到范围内较低的地址。
  • 对齐要求:起始地址 (AxADDR) 必须与 AxSIZE 对齐,即 AxADDR % (2^AxSIZE) == 0

2.2 上下边界计算公式

  • 下边界 (Lower Boundary)Lower_Boundary = INT(AxADDR / Total_Bytes) * Total_Bytes
    • 即起始地址向下对齐到总传输字节数的倍数。
  • 上边界 (Upper Boundary)Upper_Boundary = Lower_Boundary + Total_Bytes - 1
    • 即下边界加上总传输字节数减 1,表示范围的最后一个字节地址。

2.3 地址计算规则

  • 每次传输后,地址递增一个步长:Next_Address = Current_Address + (2^AxSIZE)
  • 如果 Next_Address 超出上边界 (Upper_Boundary),则环绕到下边界:Next_Address = Lower_Boundary + (Next_Address - Upper_Boundary - 1)
  • 简单来说,地址环绕后,会从下边界开始,继续递增剩余的偏移量。

2.4 示例计算

假设以下参数:
  • 起始地址 AxADDR = 0x104
  • Burst 长度 AxLEN = 3(表示 4 次传输)
  • Burst 大小 AxSIZE = 2(表示每次传输 4 字节)
步骤 1:计算总传输字节数
  • Total_Bytes = (AxLEN + 1) * (2^AxSIZE) = 4 * 4 = 16 字节
步骤 2:计算下边界和上边界
  • Lower_Boundary = (AxADDR / Total_Bytes) * Total_Bytes = (0x104 / 16) * 16 = (260 / 16) * 16 = 16 * 16 = 0x100
  • Upper_Boundary = Lower_Boundary + Total_Bytes - 1 = 0x100 + 16 - 1 = 0x10F
步骤 3:计算每次传输的地址
  • 第 1 次传输:地址 = 0x104 (起始地址)
  • 第 2 次传输:地址 = 0x104 + 4 = 0x108 (未超出边界)
  • 第 3 次传输:地址 = 0x108 + 4 = 0x10C (未超出边界)
  • 第 4 次传输:地址 = 0x10C + 4 = 0x110 (超出上边界 0x10F),环绕到:
    • 超出量 = 0x110 - 0x10F - 1 = 0 (实际计算中调整为边界差值)
    • 环绕后地址 = Lower_Boundary + (超出量) = 0x100 + 0 = 0x100
最终地址序列
  • Beat 1: 0x104
  • Beat 2: 0x108
  • Beat 3: 0x10C
  • Beat 4: 0x100 (环绕到下边界)
输出结果
WRAP Burst Addresses:
Beat 1: 0x104
Beat 2: 0x108
Beat 3: 0x10C
Beat 4: 0x100
注意事项
  • 对齐检查:起始地址必须与 AxSIZE 对齐,否则传输行为未定义(可能导致协议错误)。
  • 边界限制:WRAP Burst 的总传输字节数必须是 2 的幂(即 AxLEN + 1 必须是 2 的幂),否则行为未定义。AXI4 限制 AxLEN 为 1, 3, 7, 15(对应 2, 4, 8, 16 次传输)。
  • 硬件实现:在实际硬件中,地址环绕计算由 Master 或 Slave 实现,通常 Master 在发起传输时计算地址序列。

3. 总结

  • FIXED Burst:适用于访问固定地址的场景,如 FIFO 或寄存器轮询。
  • INCR Burst:适用于连续内存访问,是最常见的 Burst 类型,用于 DMA 或数组操作。
  • WRAP Burst:适用于循环访问固定范围的场景,如缓存行操作或循环缓冲区。
  • WRAP Burst 上下边界计算
    • 总传输字节数 = (AxLEN + 1) * (2^AxSIZE)
    • 下边界 = (AxADDR / Total_Bytes) * Total_Bytes
    • 上边界 = 下边界 + Total_Bytes - 1
    • 地址超出上边界时环绕到下边界。

       通过理解三种 Burst 类型的特性和应用场景,可以在设计或验证 AXI 系统时选择合适的传输模式。如果有具体的 AXI 设计或验证问题(例如如何在 UVM 中验证 WRAP Burst),可以进一步讨论!

http://www.xdnf.cn/news/258499.html

相关文章:

  • 复刻低成本机械臂 SO-ARM100 舵机配置篇(WSL)
  • HTML5+JavaScript实现连连看游戏之二
  • [预备知识]6. 优化理论(二)
  • Codeforces Round 1022 (Div. 2) A ~ C
  • 【AI面试准备】数据治理与GDPR脱敏机制构建
  • 一键暂停Windows更新工具
  • 数字智慧方案6186丨智慧应急指挥解决方案(43页PPT)(文末有下载方式)
  • VGG网络模型
  • 自监督学习的学习笔记
  • Python 数据智能实战 (7):智能流失预警 - 融合文本反馈
  • git问题记录-如何切换历史提交分支,且保留本地修改
  • 安卓程序打包与发布
  • 不小心误删了文件,找Windows数据恢复工具来帮忙
  • redis持久化-RDB
  • 数字智慧方案5868丨智慧建造总体策划方案(68页PPT)(文末有下载方式)
  • 泰迪杯特等奖案例学习资料:基于多模态特征融合的图像文本检索系统设计
  • 清洗数据集
  • 数字智慧方案5870丨智慧交通顶层设计方案(89页PPT)(文末有下载方式)
  • 树莓派连接教学
  • 【KWDB 创作者计划】_查询优化器源码分析
  • 《缓存策略:移动应用网络请求的“效能密钥” 》
  • 鼎讯信通【专注通信解决方案】
  • 在多socket多核计算机上配置MPI和OpenMP
  • 【算法】动态规划专题一 斐波那契数列模型 1-4
  • 从0到上线,CodeBuddy 如何帮我快速构建旅游 App?
  • LabVIEW实验室测试框架推荐
  • 在文本废墟中打捞月光
  • 基于bert的情感分析程序
  • 51c大模型~合集123
  • 大语言模型能力评定探讨