深入浅出AXI协议(4)——猝发传输

一、前言

         在之前的文章中,我们着重介绍了关于AXI4的握手协议它可以使得传输的双方都可以自如地控制传输的速率,我们主要介绍了握手协议出现的3种可能情况。然后对于AXI4交易通信的握手信号的关系做出了介绍:(1)在AXI4互联中 ,VALID信号不依赖交易中其他元件的READY信号(2)READY信号能够等待确认VALID信号;之后介绍了读交易和写交易种握手信号的依赖关系。在本文中,我们将介绍AXI4的猝发传输相关内容。

        AXI协议是基于猝发的,主机通过将控制信息和传输中第一个字节的地址驱动到从机,开始每一次猝发传输。随着猝发的进行,从机必须计算突发中后续传输的地址。一次猝发不能跨越4KB的地址边界。

二、AXI猝发长度与大小

1、AXI猝发长度(Burst length)

        猝发的长度被指定为:ARLEN[7:0](对于读传输来说)和WRLEN[7:0](对于写传输来说)。

        AXI3支持1到16个突发长度,用于所有猝发类型。AXI4将对INCR突发类型的猝发长度支持扩展到1到256次传输。AXI4中所有其他猝发类型的支持仍然保持在1到16次传输。

        任何元件都不能提前终止猝发。但是,为了减少写猝发中的数据传输数量,主机可以通过失效所有的写掩码来禁用进一步的写操作。在这种情况下,主机必须完成猝发中的剩余传输。在读猝发事件中,主机可以丢弃读取数据,但它必须完成猝发事件中的所有传输。

2、AXI猝发大小(Burst size)

        在每个数据传输中传输的最大字节数由ARSIZE[2:0](对于读传输来说)和WRSIZE[2:0](对于写传输来说)指定。其具体的编码方式如下:

57f87b29201f412fbbe4ca90919bea24.jpeg

        如果AXI总线宽度大于猝发大小,则AXI接口必须通过传输地址确定每次传输使用数据总线的哪个字节道。任何传输的大小不得超过事务中任何一个代理的数据总线宽度。

三、AXI猝发类型(Burst type)

        AXI4协议定义了3种猝发类型:

        (1)固定猝发(FIXED)

        (2)递增猝发(INCR)

        (3)回卷猝发(WRAP)

        AXI的猝发类型通过ARBURST信号(表示读猝发操作类型,属于读地址通道)和AWBURST(表示写猝发操作类型,属于写地址通道)信号进行体现,具体的表示形式和含义如下:

ARBURST[1:0]

AWBURST[1:0]

猝发类型描述访问
00固定固定地址猝发FIFO类型
01递增递增地址猝发普通顺序存储器
10回卷递增地址猝发,但在边界处,返回到低地址高速缓存行
11保留------------

        对于回卷式的猝发方式,有2个限制:

        (1)起始地址必须对齐传输大小。

        (2)猝发的长度必须是2,4,8,16。大于16拍的猝发传输只支持递增类型。回卷和固定类型只限于小于16拍的猝发传输。

四、AXI猝发地址(Burst address)

        为了说明猝发交易中地址的计算方法,首先给出计算过程中需要用到的术语:

(1)Start_Address :主机给出的开始地址

(2)Number_Bytes : 每个数据传输过程中的最大的字节个数

(3)Data_Bus_Bytes :数据总线上字节通道的个数

(4)Aligned_Address : 起始地址的对齐版本

(5)Burst_Length : 在一个猝发中数据传输的总个数

(6)Address_N :在一个猝发中传输N个的地址

(7)Wrap_Boundary :在一个回卷猝发方式的低地址

(8)Lower_Byte_Lane : 一个传输中最低寻址字节的字节通道

(9)Upper_Byte_Lane : 一个传输中最高寻址字节的字节通道

(10)INT(x):x取整操作

下面是计算公式:

对下列的术语进行赋值操作:

  • Start_Address = ADDR
  • Number_Bytes = eq?2%5E%7BSIZE%7D
  • Burst_Length = LEN + 1
  • Aligned_Address = (INT(Start_Address / Number_Bytes) ) x Number_Bytes
在一个猝发中,第一个传输的地址表示为:
  • Address_1 = Start_Address
在一个传输中,传输N个数据后的地址表示为:
  • Address_N = Aligned_Address + (N – 1) x Number_Bytes
对于WARP的猝发方式,其边界由下式确定
  • Wrap_Boundary = (INT(Start_Address / (Number_Bytes x Burst_Length))) x (Number_Bytes x Burst_Length)
如果有
  • Address_N = Wrap_Boundary + (Number_Bytes x Burst_Length)

则使用这个公式

  • Address_N = Wrap_Boundary。

在边界后,使用这个公式

  • Address_N = Start_Address + ((N – 1) × Number_Bytes) – (Number_Bytes × Burst_Length).
使用下面的等式确定第一个传输中使用哪个字节通道:
  • Lower_Byte_Lane = Start_Address - (INT(Start_Address / Data_Bus_Bytes)) x Data_Bus_Bytes
  • Upper_Byte_Lane = Aligned_Address + (Number_Bytes - 1) - (INT(Start_Address / Data_Bus_Bytes)) x Data_Bus_Bytes
使用下面的等式确定一个猝发中第一个传输后用于所有传输中哪个字节通道:
  • Lower_Byte_Lane = Address_N – (INT(Address_N / Data_Bus_Bytes)) x Data_Bus_Bytes
  • Upper_Byte_Lane = Lower_Byte_Lane + Number_Bytes – 1
传输数据的范围在:
  • DATA[(8 x Upper_Byte_Lane) + 7 : (8 x Lower_Byte_Lane)]

五、总结

        AXI协议是基于猝发的,主机通过将控制信息和传输中第一个字节的地址驱动到从机,开始每一次猝发传输。随着猝发的进行,从机必须计算突发中后续传输的地址。本文介绍了猝发的长度,大小和猝发类型,最后介绍了AXI猝发地址的计算过程。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/120447.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【webrtc】接收/发送的rtp包、编解码的VCM包、CopyOnWriteBuffer

收到的rtp包RtpPacketReceived 经过RtpDepacketizer 解析后变为ParsedPayloadRtpPacketReceived 分配内存,执行memcpy拷贝:然后把 RtpPacketReceived 给到OnRtpPacket 传递:uint8_t* media_payload = media_packet.AllocatePayload(rtx_payload.size());RTC

ExpressLRS开源代码之框架结构

ExpressLRS开源代码之框架结构 1. 源由2. Arduino应用框架3. ExpressLRS应用框架4. 硬件设计框架4.1 单天线4.2 双天线单PA4.3 双天线双PA 5. 应用软件设计6. 参考资料 1. 源由 最近为了理解《ExpressLRS开源之基本调试数据含义》,做了一些源代码的研读。 概念、文…

二进制搭建kubernetes(K8S)

二进制搭建kubernetes(K8S) 一、常见的K8S部署方式1.Minikube2.Kubeadmin3.二进制安装部署 二、二进制搭建K8S(单台master)1.部署架构规划2.系统初始化配置3.部署 docker引擎4.部署 etcd 集群4.部署 Master 组件5.部署 Worker Node 组件6.部署网络组件 三…

数据可视化工具中的显眼包:奥威BI自带方案上阵

根据经验来看,BI数据可视化分析项目是由BI数据可视化工具和数据分析方案两大部分共同组成,且大多数时候方案都需从零开始,反复调整,会耗费大量时间精力成本。而奥威BI数据可视化工具别具匠心,将17年经验凝聚成标准化、…

【juc】ReentrantReadWriteLock之缓存(仅当学习)

目录 一、说明二、代码示例2.1 pom依赖2.2 示例代码2.3 实体类 三、示例截图 一、说明 1.针对于读多写少的情况 2.先查缓存&#xff0c;没有再去查库 二、代码示例 2.1 pom依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"h…

文心一言api接入如何在你的项目里使用文心一言

文心一言api接入在项目里接入文心一言 一、百度文心一言API二、使用步骤1、接口2、请求参数3、请求参数示例4、接口 返回示例 三、 如何获取appKey和uid1、申请appKey:2、获取appKey和uid 四、重要说明 一、百度文心一言API 基于百度文心一言语言大模型的智能文本对话AI机器人…

Linux代码初试__进度条

前言 在我们的日常生活中&#xff0c;进度条是十分常见的&#xff0c;比如在软件下载中&#xff0c;应用加载中等等~~~那么进度条有什么特点&#xff1f;他又如何实现。 下面我们将结合下面的图展开讲解 一、前置理论知识 1.1回车和换行的区别 在我们的日常生活中&#x…

Android Studio新版本New UI及相关设置丨遥遥领先版

1、前言 俗话说工欲善其事必先利其器嘛&#xff0c;工具用不好怎么行呢&#xff0c;借着Android Studio的更新&#xff0c;介绍一下新版本中的更新内容&#xff0c;以及日常开发中那些好用的设置。 2、关于新版本 2.1、最新正式版本 Android Studio Giraffe | 2022.3.1 Pat…

FreeRTOS中断与任务之间同步(Error:..\..\FreeRTOS\portable\RVDS\ARM_CM4F\port.c,422 )

前言&#xff1a; FreeRTOS中&#xff0c;中断需要注意几点&#xff1a; 何时使用中断&#xff1b;中断服务函数&#xff08;ISR&#xff09;要处理的数据量有多大&#xff0c;通常我们希望中断的切换越快越好&#xff0c;也就是说&#xff0c;ISR尽量采用耗时较少的处理方式…

YOLO目标检测——赛马数据集下载分享

目标检测赛马数据集在马匹竞赛、马匹健康监测、马匹行为研究、马匹安全监控和马匹图像检索等应用场景中具有广泛的应用潜力&#xff0c;可以为马匹产业的发展和管理提供有力支持 数据集点击下载&#xff1a;YOLO赛马数据集640图片标框.rar 更多数据集下载和效果展示&#x…

论文研读|生成式跨模态隐写发展综述

前言&#xff1a;本文介绍近5年来生成式跨模态隐写领域的相关工作。 相关阅读&#xff1a;生成式文本隐写发展综述 不同于文本隐写&#xff0c;跨模态隐写需要考虑不同模态间的相关性&#xff0c;常见的跨模态场景有&#xff1a;Image-to-Text&#xff08;如图像描述&#xff…

安全编程:初始化那些你忽略掉的东西

对于黑客来说&#xff0c;特权提升漏洞是令他感到非常兴奋的事情&#xff0c;而有时候这种漏洞的来源仅仅是因为开发者忘记将内存缓冲区中的垃圾数据进行初始化。此话怎讲&#xff1f; 我想&#xff0c;现在每个人都应该熟悉 SecureZeroMemory 函数的使用&#xff0c;它用来擦…

【TypeScript】一直提示 :无法重新声明块范围变量

【TypeScript】一直提示 &#xff1a;无法重新声明块范围变量 问题描述&#xff1a;在VSCode中编写ts代码时&#xff0c;编写保存完之后&#xff0c;通过tsc 文件名.ts编译就会看到变量名下面出现了红色的波浪线&#xff0c;提示的内容是无法重新声明块范围变量。 解决方法&am…

基于RabbitMQ的模拟消息队列之五——虚拟主机设计

文章目录 一、创建VirtualHost类二、初始化三、API1.创建交换机2.删除交换机3.创建队列4.删除队列5.创建绑定6.删除绑定7.发送消息转发规则 8.订阅消息1.消费者管理2.推送消息给消费者 3.添加一个消费者管理ConsumerManager9.确认消息 创建VirtualHost类。 1.串起内存和硬盘的数…

安全基础 --- js的闭包和this属性

js闭包 简介 一个函数和对其周围状态&#xff08;lexical exviroment&#xff0c;词法环境&#xff09;的引用捆绑在一起&#xff08;或者说函数被引用包围&#xff09;&#xff0c;这样的组合就是闭包&#xff08;closure&#xff09; 在js中&#xff0c;通俗来讲&#xff0c…

uni-app 之 安装uView,安装scss/sass编译

uni-app 之 安装uView&#xff0c;安装scss/sass编译 image.png image.png image.png 点击HBuilder X 顶部&#xff0c;工具&#xff0c;插件安装&#xff0c;安装新插件 image.png image.png 安装成功&#xff01; 注意&#xff0c;一定要先登录才可以安装 image.png 1. 引…

【数据分析】用Python秒懂概率分布!(附完整Python代码实现)

本文涉及的概念分布包括&#xff1a; 随机变量(Random Variable) 密度函数(Density Functions) 伯努利分布(Bernoulli Distribution) 二项式分布(Binomial Distribution) 均匀分布(Uniform Distribution) 泊松分布(Poisson Distribution) 正态分布(Normal Distribution) …

ChatGPT AIGC 完成动态堆积面积图实例

先使用ChatGPT AIGC描述一下堆积面积图的功能与作用。 接下来一起看一下ChatGPT做出的动态可视化效果图: 这样的动态图案例代码使用ChatGPT AIGC完成。 将完整代码复制如下: <!DOCTYPE html> <html> <head><meta charset="utf-8"><tit…

阿里云大数据实战记录9:MaxCompute RAM 用户与授权

文章目录 问题来源&#xff1a;maxcompute 管理员无法访问敏感列&#xff1f;主线问题&#xff1a;如何提高用户等级衍生问题1&#xff1a;怎么知道自己的等级和表单的等级衍生问题2&#xff1a;为什么 dataworks 空间管理员也没有设置等级的权限&#xff1f;衍生问题3&#xf…

模板和STL简介

模板和STL简介 一、泛型编程1、通用交换函数的实现&#xff08;1&#xff09;代码&#xff08;2&#xff09;总结 2、泛型编程的概念3、模板的概念 二、函数模板1、概念2、格式3、代码4、原理 三、函数模板实例化1、概念2、隐式实例化&#xff08;1&#xff09;概念&#xff08…