【总线】AXI4第六课时:寻址选项深入解析

大家好,欢迎来到今天的总线学习时间!如果你对电子设计、特别是FPGA和SoC设计感兴趣,那你绝对不能错过我们今天的主角------AXI4总线。作为ARM公司AMBA总线家族中的佼佼者,AXI4以其高性能和高度可扩展性,成为了现代电子系统中不可或缺的通信桥梁。

上几课时我们了解了AMBA和AXI的历史,也知道AXI4有5个独立的管道,并且有独立的握手机制,本章节更细致的讲一下AXI的寻址选项深入解析

这里会有一系列的课程,和大家分享AMBA总线家族,欢迎大家一起学习,收藏点赞。

系列文章

【总线】AMBA总线架构的发展历程-CSDN博客

【总线】设计fpga系统时,为什么要使用总线?-CSDN博客

【总线】AXI总线:FPGA设计中的通信骨干-CSDN博客

【总线】AMBA总线家族的明星成员:AXI协议简介-CSDN博客

【总线】AXI4第一课时:揭秘AXI4总线的五大独立通道-CSDN博客

【总线】AXI4第二课时:深入AXI4总线的基础事务-CSDN博客

【总线】AXI4第三课时:握手机制-CSDN博客

【总线】AXI4第五课时:信号描述-CSDN博客

【总线】AXI4第六课时:寻址选项深入解析-CSDN博客


目录

概念

关于寻址选项

突发长度

突发大小

突发类型

突发地址

升华!

寻址选项的重要性

突发长度的实际应用

突发大小对性能的影响

突发类型的选择

突发地址的计算方法

结论


在深入理解AMBA AXI协议的寻址选项之前,我们需要明确几个基本概念:突发传输、地址计算、以及如何利用这些选项来优化数据访问。

第一章节直接翻译的官方文档。第二章对官方文档进行说明解释,帮助大家理解。

概念

关于寻址选项

AXI协议是基于突发的,主设备通过驱动传输控制信息和突发传输的第一个字节的地址来开始每个突发。随着突发事务的进展,计算突发内连续传输地址的责任在于从设备。突发不得跨越4KB边界,以防止它们跨越不同从设备之间的边界,并限制从设备内部所需的地址增量器的大小。

突发长度

AWLEN或ARLEN信号指定了每个突发中发生的数据传输的数量。如表4-1所示,每个突发可以包含1到16个传输。对于包装突发,突发长度必须为2、4、8或16个传输。每个事务必须完成ARLEN或AWLEN指定的传输数量。任何组件都不能提前终止突发以减少数据传输的数量。在写入突发期间,如果主设备通过取消所有写入使能信号来禁用进一步的写入,它必须完成突发中的剩余传输。在读取突发期间,主设备可以丢弃不需要的进一步读取数据,但它必须完成突发中的剩余传输。

注意: 丢弃不需要的读取数据可能导致在访问诸如FIFO之类的读取敏感设备时丢失数据。主设备在使用比需要的更长的突发长度访问此类设备时,绝不能这样做。

表 突发长度编码

|--------------|--------------|--------|
| ARLEN3:0 | AWLEN3:0 | 数据传输数量 |
| b0000 | | 1 |
| b0001 | | 2 |
| ... | ... | ... |
| b1101 | | 14 |
| b1110 | | 15 |
| b1111 | | 16 |

突发大小

表4-2展示了ARSIZE或AWSIZE信号如何指定突发传输中每个节拍传输的最大数据字节数。AXI根据传输地址确定数据总线上使用的字节道。

对于增量或包装突发,如果传输大小小于数据总线宽度,则每个节拍的数据传输在不同的字节道上进行。固定突发的地址保持不变,每个传输使用相同的字节道。任何传输的大小都不能超过事务中组件的数据总线宽度。

表 突发大小编码

|---------------|---------------|---------|
| ARSIZE2:0 | AWSIZE2:0 | 传输中的字节数 |
| b000 | | 1 |
| b001 | | 2 |
| b010 | | 4 |
| b011 | | 8 |
| b100 | | 16 |
| b101 | | 32 |
| b110 | | 64 |
| b111 | | 128 |

突发类型

AXI协议定义了三种突发类型:

  1. 固定突发(Fixed Burst):在固定突发中,突发内每个传输的地址都保持不变。这种突发类型适用于对同一位置的重复访问,例如加载或清空外围FIFO。
  2. 增量突发(Incrementing Burst):在增量突发中,突发内每个传输的地址是前一个传输地址的增量。增量值取决于传输的大小。例如,在大小为四个字节的突发中,每个传输的地址是前一个地址加四。
  3. 包装突发(Wrapping Burst):包装突发类似于增量突发,但是当达到包装边界时,地址会回绕到较低的地址。包装边界是突发中每个传输的大小乘以突发的总传输数量。

表 突发类型编码

|----------------|----------------|----------|--------|
| ARBURST1:0 | AWBURST1:0 | 突发类型 | 访问类型 |
| b00 | b00 | FIXED | 固定地址突发 |
| b01 | b01 | INCR | 增量地址突发 |
| b10 | b10 | WRAP | 包装地址突发 |
| b11 | b11 | Reserved | 保留 |

突发地址

本节提供了一些简单的公式,用于确定突发传输中的地址和字节道。这些公式使用了以下变量:

  • Start_Address:主设备发出的起始地址。
  • Number_Bytes:每个数据传输的最大字节数。
  • Data_Bus_Bytes:数据总线的字节道数。
  • Aligned_Address:起始地址的对齐版本。
  • Burst_Length:突发内总的数据传输数量。
  • Address_N:突发内第N个传输的地址。N是2到16之间的整数。
  • Wrap_Boundary:包装突发内的最低地址。
  • Lower_Byte_Lane:传输中的最低地址字节的字节道。
  • Upper_Byte_Lane:传输中的最高地址字节的字节道。
  • INT(x):x的向下取整整数值。

使用这些方程来确定突发内传输的地址:

  • 起始地址:Start_Address = ADDR
  • 每个数据传输的字节数:Number_Bytes = 2^SIZE
  • 突发长度:Burst_Length = LEN + 1
  • 对齐的起始地址:Aligned_Address = INT(Start_Address / Number_Bytes) * Number_Bytes

使用这些方程来确定突发内第一个传输的地址:

  • 第一个传输的地址:Address_1 = Start_Address

使用这些方程来确定突发内第一个传输后的任何传输的地址:

  • Address_N = Aligned_Address + (N -- 1) * Number_Bytes

对于包装突发,使用以下方程来确定包装边界:

  • Wrap_Boundary = INT(Start_Address / (Number_Bytes * Burst_Length)) * (Number_Bytes * Burst_Length)

如果Address_N等于Wrap_Boundary加上Number_Bytes乘以Burst_Length,则使用以下方程:

  • Address_N = Wrap_Boundary

使用这些方程来确定突发内第一个传输使用的字节道:

  • Lower_Byte_Lane = Start_Address - INT(Start_Address / Data_Bus_Bytes) * Data_Bus_Bytes
  • Upper_Byte_Lane = Aligned_Address + (Number_Bytes - 1) * INT(Start_Address / Data_Bus_Bytes) * Data_Bus_Bytes

使用这些方程来确定突发内第一个传输后所有传输使用的字节道:

  • Lower_Byte_Lane = Address_N -- INT(Address_N / Data_Bus_Bytes) * Data_Bus_Bytes
  • Upper_Byte_Lane = Lower_Byte_Lane + Number_Bytes -- 1

数据在以下位置传输:

  • DATA(8 \* Upper_Byte_Lane) + 7 : (8 \* Lower_Byte_Lane)

升华!

寻址选项的重要性

寻址选项在AXI协议中扮演着至关重要的角色。它们不仅决定了数据如何被传输,还影响着系统的性能和效率。通过合理配置寻址选项,可以确保数据传输的准确性,并最大化利用系统资源。

突发长度的实际应用

突发长度是指在一个突发传输中包含的数据传输次数。这个参数直接影响到数据传输的总量。例如,在内存密集型应用中,较长的突发长度可以减少访问次数,从而提高效率。

示例说明: 假设一个系统使用32位宽的数据总线,并且ARLEN设置为b0100,表示突发长度为4。如果每次数据传输是32位,那么整个突发将传输128位(16字节)的数据。

突发大小对性能的影响

突发大小定义了每次数据传输中包含的字节数。这个参数对于确保数据在总线上正确传输至关重要。较大的突发大小可以减少传输相同数量数据所需的总线周期数。

示例说明: 如果AWSIZE设置为b110,表示每次数据传输包含64字节。在上述相同的4次传输突发中,总共将传输256字节的数据,这比b100(16字节每次)的配置效率更高。

突发类型的选择

突发类型的选择取决于具体的应用场景和数据访问模式。固定突发适用于对同一地址的连续访问,增量突发适用于顺序访问,而包装突发则适用于需要在特定边界回绕的场景。

示例说明: 考虑一个需要连续读取多个缓存行的应用,可以使用包装突发来优化访问模式。如果缓存行大小为64字节,并且数据总线宽度为128字节,则可以使用b111(128字节)的AWSIZEb10(包装)的AWBURST来实现高效的数据传输。

突发地址的计算方法

正确的地址计算对于确保数据被传输到正确的位置至关重要。AXI协议提供了一套公式来计算突发内每个传输的地址和使用的字节道。

示例说明: 如果一个突发操作的起始地址是0x1000,数据总线宽度为128字节,ARSIZEb111(128字节),突发长度为4次传输(ARLENb0100),那么第一个传输的地址是0x1000,第二个是0x1080,第三个是0x1100,第四个是0x1180。

通过这些公式,设计者可以精确控制数据传输的地址,从而实现对系统内存的高效访问。

结论

AXI协议的寻址选项为设计者提供了强大的工具,以实现高效、灵活的数据传输。理解并正确应用这些选项,可以显著提高系统的整体性能。通过上述示例和说明,我们可以看到寻址选项在实际应用中的重要性,以及如何利用它们来满足不同的设计需求。

相关推荐
仲南音17 小时前
Xilinx FPGA——时钟IP核MMCM、PLL
fpga开发
I'm a winner1 天前
基于Xilinx FPGA的LVDS高速串行通信系统(三)--数据训练及握手机制【文末源码】
fpga开发
upper20201 天前
coremark移植坑之-nostartfiles -nostdlib参数
学习·fpga开发·coremark移植·riscv设计
Eloudy2 天前
Vivado 纯命令行构建 FPGA 项目教程
fpga开发
Rambo.xia2 天前
AXI跨时钟域与数据一致性——CDC FIFO深度不够、写后读冒险、多Master仲裁、乱序返回,出了Bug根本查不出来
fpga开发·bug
upper20202 天前
FPGA部署卷积神经网络识别MINST图片
fpga开发·卷积神经网络·minst·minst识别·部署神经网络·神经网络识别图片
你是我的解忧王子2 天前
嵌入式 ADC采样 原始数据分析上层(平均值 波动率 正态分布 线性补偿 系统误差)
fpga开发·数据挖掘·数据分析
9527华安3 天前
FPGA纯verilog代码ISP图像处理培训教程,基于IMX214,提供工程源码+视频教程+FPGA开发板
图像处理·fpga开发·isp·imx214·mipi
千寻xun3 天前
二、实战篇-NVME SSD控制之ZYNQ实现(六)-读写NVME SSD硬盘数据
fpga开发·nvme·nvme ssd
千寻xun3 天前
二、实战篇-NVME SSD控制之ZYNQ实现(三)
fpga开发·nvme ssd·nvme协议