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

news/2024/11/29 2:40:50/

一、前言

         在之前的文章中,我们着重介绍了关于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.ppmy.cn/news/1086690.html

相关文章

k8s使用ECK(2.4)形式部署elasticsearch+kibana-http协议

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、准备elasticsearch-cluster.yaml二、部署并测试总结 前言 之前写了eck2.4部署eskibana,默认的话是https协议的,这里写一个使用http…

TIA博途从V15.1版本升级到V16后,下载配方时出错,动作异常终止

TIA博途从V15.1版本升级到V16后,下载配方时出错,动作异常终止 1. 读取配方的时候没有问题,完全正常,没有任何错误提示。 2. 但是在下载的时候,就提示了“出错。动作异常终止” 根据以往的经验分析,有可能是配方变量里面没有相对应的地址时候下载会出错,但是配方画面相对…

综合实训-------成绩管理系统 V1.1

综合实训-------成绩管理系统 V1.1 1、一维数组数据double 2、我们用元素的位置来当学号。 1、录入数据 【5个数据】或【通过文件的方式取数据】 2、显示数据 3、添加一条记录 4、修改一条记录 5、删除一条记录 6、查找一条记录。【输入学号,显示成绩】 7、统计。【…

接口文档模版(Markdown版)

场景 最近又又又得给第三方系统写接口文档,需要一个Restful接口模版参考参考。 接口文档模版 # ERP 服务## 监控### 数据POST /system/xxx/getData请求参数:| 字段名 | 类型 | 位置 | 描述 | | ---------- | ------ | ---- | --…

2023年MySQL-8.0.34保姆级安装教程

重点放前面:演示环境为windows环境。 MySQL社区版本安装教程如下: 一、MySQL安装包下载二、安装配置设置三、配置环境变量 大体分为3个步骤:①安装包的下载;②安装配置设置;③配置环境变量 一、MySQL安装包下载 下载官…

点击按钮时触发防抖

当在React中点击按钮时触发防抖,并传递一个ID作为参数,你可以使用useRef和useCallback钩子来实现。 import React, { useState, useRef, useCallback } from react;const ButtonComponent () > {const [clickCount, setClickCount] useState(0);co…

Linux之基于HTTPS的静态网站

目录 Linux之基于HTTPS的静态网站 定义 SSL协议 使用Apachemod_ssl组件的加密认证网站 mod_ssl模组 安装 配置文件 ssl配置文件的主要参数 案例 案例1 --- 搭建HTTPSSL的加密认证的web服务器 案例2 --- 组建多个子目录的网站www.joker.com,该网站下有2个子…

npm install依赖冲突解决办法

今天npm的时候发现报错,原来是依赖冲突了 npm后面加上这个指令就可以顺利的安装依赖了。问题主因就是不同开发用了不同版本node导致依赖版本不同,出现了成功冲突,这是段指令;它告诉npm忽略项目中引入的各个依赖模块之间依赖相同但…