AMBA协议-AXI协议详解(读写时序、Outstanding、乱序传输、原子操作)

news2024/12/23 0:11:40

目录

1. AXI 写通道信号

1.1. 写地址通道信号

1.2. 写数据通道信号

1.3. 写response通道信号

1.5. 握手规则

1.4. AXI 写通道之间关系 

2. AXI 读通道信号

2.1. 读地址通道信号

2.2. 读数据通道信号

2.3. AXI 读通道之间关系 

3. AXI传输

3.1. AXI突发读传输

3.2. Overlapping 突发读传输

3.3. AXI突发写传输

3.4. 非对齐传输

4. AXI outstanding

5. AXI 乱序传输(Out of order)

6. 原子操作(Atomic Access)

6.1. Locked access

6.2. Exclusive access


1. AXI 写通道信号

        AXI总共有五个数据传输channel,其中两个channel用来读,三个channel用来写。每个channel都有流控信号(valid-ready),发送数据端就给valid,接收数据端给ready,读数据和写数据通道都包括一个 LAST 信号,用来指明一个事务传输的最后一个数据AXI 写通道有两个,传输写地址的通道、传输写数据的通道、传输response的通道。

1.1. 写地址通道信号

        所有的信号开头都是AW,代表Write的Address channel,传输地址信息和数据都是在 VALID 和 READY 同时为高时有效

        AWSIZE表示数据传输位宽,AWLEN用来burst写传输的长度,AWBURST表示burst传输类型,AWLOCK信号在最后一章原子操作详细介绍。

        AWCACHE指示Cache是bufferable、cacheable、write-through或者write-back类型的。bit[0] Bufferable (B) bit、bit[1] Cacheable (C) bit、bit[2] Read Allocate (RA) bit、bit[3] Write Allocate (WA) bit。

        bufferable:只针对写操作,可以提升传输效率。即使slave没准备好接收数据,总线也可以返回OKAY给master,把master传给slave的数据存入buffer,待slave准备好了再将buffer的数据传给slave。Write through:CPU写Cache时,若命中,则把数据同时写入Cache和内存中Write Back:CPU写Cache时,若命中, 先把数据写到Cache中,再通过flush方式写入内存。

        AWPROT是一个info类型的信号,用来指示当前传输的属性是一个数据传输还是指令传输、是普通模式还是特权模式。

1.2. 写数据通道信号

        WSTRB信号用于写地址非对齐传输,例如传输地址非32位对齐,可以利用WSTRB信号来对不想修改的byte进行mask操作。

        WID表示burst的编号,总共4位有16个取值,用于AXI的乱序传输(Out Of Order),在AXI4协议中发现写乱序提升性能效果不大,因此去除了WID,即去除了写乱序的操作,但保留了读乱序操作。

        WLAST信号标志着数据传输的结束,在传输一笔burst数据的最后一个数据时,把WLAST拉高,表示该次burst数据传输完毕,譬如一个burst 8,在传输第8个数据的时候,把TLAST拉高代表该笔burst传输结束。

1.3. 写response通道信号

         写response通道信号,BID是和AWID匹配的IDBRESP用来回slave的传输情况,回OKAY就是传输正确,回EXOKAY是Lock transfer传输正确回SLVERR代表slave error传输出错,回DECERR代表decode 出错,发生在传输地址在slave中未定义的情况,即地址译码出错时就会回DECERR。官方文档对BRESP描述如下图所示:

1.5. 握手规则

        AXI 共有 5 个通道,5个通道使用相同的 VALID/READY 握手机制传输数据及控制信息。master 产生 VLAID 信号来指明何时数据或控制信息有效。而 slave 产生 READY 信号来指明已经准备好接受数据或控制信息。传输发生在 VALID 和 READY 信号同时为高的时候。VALID 和 READY 信号的出现有三种关系。

(1) VALID 先变高 READY 后变高。时序图如下:

 (2) READY 先变高 VALID 后变高。时序图如下:

 (3) VALID 和 READY 信号同时变高。时序图如下:

1.4. AXI 写通道之间关系 

        AXI写具有三个通道,三个通道之间虽然独立,但不是完全没关系的,它们的具体关系如下图所示:

        (1)主机必须不能够等待设备先给出 AWREADY 或 WREADY 信号信号后再给出信号 AWVALID 或 WVLAID。

        (2)设备可以等待信号 AWVALID 或 WVALID 信号有效或者两个都有效之后再给出 AWREADY 信号。

        (3)设备可以等待 AWVALID 或 WVALID 信号有效或者两个信号都有效之后再给出 WREADY 信号。       

        (4)设备必须等待 WVALID 和 WREADY 信号同时有效了,才能给出 BVALID 信号有效。


2. AXI 读通道信号

        AXI总共有五个数据传输channel,其中两个channel用来读,三个channel用来写。每个channel都有流控信号(valid-ready),发送数据端就给valid,接收数据端给ready。AXI 读通道有两个,一个用来传输读地址与控制信号,另一个用来传输读的数据和response信号。

2.1. 读地址通道信号

        AXI读地址通道信息和AXI写地址通道信息类似。

2.2. 读数据通道信号

        AXI 读之所以没有像AXI写一样有response channel就是因为读的response信号已经通过Read data channel 传输回read master了。

2.3. AXI 读通道之间关系 

AXI读具有两个通道,两个通道之间也不是完全没关系的,它们的具体关系如下图所示:

        (1)设备可以在 ARVALID 出现的时候在给出 ARREADY 信号,也可以先给出 ARREADY 信号,再等待 ARVALID 信号。

        (2)但是设备必须等待 ARVALID 和 ARREADY 信号都有效才能给出 RVALID 信号,开始数据传输。


3. AXI传输

        AXI 协议定义了三种burst读写类型:FIXED式的突发读写、INCR式的突发读写、WRAP式的突发读写。在AXI接口中,用 ARBURST 或 AWBURST 来选择突发式读写的类型,如下图所示:

        (1)FIXED突发读写是指地址是固定的,每一次传输的地址都不变。这样的突发式读写会重复的对一个相同的位置进行存取。例如 FIFO。

        (2)INCR突发读写是指每一次读写的地址都比上一次的地址增加一个固定的值。

        (3)WRAP突发读写跟INCR突发读写类似。WRAP突发读写的地址是包数据的低地址当到达一个包边界时再进行一个回环,和AHB总线的WRAP传输一致。WRAP传输有两个限制:① 起始地址必须以传输的 size 对齐;②突发式读写的长度必须是 2、4、8 或者 16。

3.1. AXI突发读传输

        AXI数据通道就是通过valid&ready的handshake来控制数据传输。上图为一次读突发传输,当地址出现在地址总线后,传输的数据出现在读数据通道上,一次突发传输只发送一个地址,后面数据的地址在发送地址的基础上进行自增。设备保持 VALID 为低直到读数据有效。为了表明一次突发式读写的完成,设备用 RLAST 信号来表示最后一个被传输的数据。

3.2. Overlapping 突发读传输

        slave在第一次突发读传输完成后处理第二次突发读传输。也就意味着,主机一开始传送了两个地址给设备。设备在完全处理完第一个地址的数据之后,才开始处理第二个地址的数据

3.3. AXI突发写传输

        AXI突发写传输,主机发送地址和控制信息到写地址通道中,然后主机发送每一个写数据到写数据通道中。当主机发送最后一个数据时,WLAST 信号就变为 高。当设备接收完所有数据之后他将一个写响应发送回主机来表明写事务完成。

        对于burst传输,AXI不能跨越4KB的边界,和AHB不能跨越1KB边界是一样的,都是为了防止出现一次burst传输跨越多个slave的情况,协议中关于此定义如上图所示。

3.4. 非对齐传输

        非对齐传输也是AXI总线和AHB总线不同的地方,在AHB总线里面,数据的传输必须是对齐的,譬如将AHB中的HSIZE信号设置为32bit,即4Byte,那么数据传输的地址必须是对齐的,从0,4,8开始传输。

        AXI的传输可以非对齐,假设数据传输位宽为32bit,即4Byte,AXI传输的起始地址可以是1,也可以是3,但是后面的传输必须地址对齐。即AXI传输只允许一个burst的第一笔传输首地址不对齐,如下图所示:

         要使用AXI的非对齐传输,需要配合wstrb来将不需要传输的数据地址位mask掉。


4. AXI outstanding

        outstanding是指主机在没有收到response时可以发起多个读写transaction的能力

简单讲,如果没有outstanding,则总线Master的行为如下(AHB就不支持outstanding):
        1)读操作:读地址命令 -> 等待读数据返回 -> 读地址命令 -> 等待读数据返回 -> ..
        2)写操作:写地址命令->写数据->等待写响应返回->写地址命令->写数据->等待写响应返回..

        如果支持outstanding,那么总线就可以在没等到response时,连续发多个读或写的命令,然后再逐个等待命令的返回

        1)读操作:读地址命令 -> 读地址命令 -> 读地址命令 -> 等待读数据返回 ->等待读数据返回 ->等待读数据返回..
        2)写操作:写地址命令->写地址命令->写地址命令->写数据->写数据->等待写响应返回->写数据->等待写响应返回->等待写响应返回..


5. AXI 乱序传输(Out of order)

        乱序传输实在指令outstanding的基础上进行的,在读乱序的实现中,master可以发多个相同ARID的读cmd,相同ARID的读数据必须按顺序回来,对于不同ARID的读cmd数据可以穿插传回master,如下图所示:

         上图为三个outstanding的cmd配合Out of order的读数据传输,对于同一个ARID的数据,必须按顺序回来,譬如上图data_10、data_11、data_12、data_13按顺序传回来,对于不同ARID的数据可以随意穿插,譬如上图data_11和data_12之间穿插了其他ARID的数据。

        即AXI协议规定:相同 ID tag 的事务必须有序完成,而不同 ID tag 可以乱序完成。

        对于写乱序,AXI4 中已经取消了WID信号的使用,不再支持写乱序。


6. 原子操作(Atomic Access)

        当对同一个地址进行读写操作时,在BUS上会看到在读写通道里面分别有对XX地址的读写操作,但读到和写入的数据是不同的。BUS上有很多master,都有可能对同一个地址进行类似操作,比如 master1 和 master2 都要对地址A数据进行读后写修改,原本计划的顺序是master1读后写,接着master2读后写。结果因为传输问题,master1读了地址A数据没写回,此时master2读了地址A数据后再进行修改写入,然后master1再写,这时候显然出现了读数据错误master2应该读取的是master1修改的数据,但在这里却直接读取了

        ID扩展:一笔数据从master传输到slave再由slave返回的全过程可以如下描述:数据从master在发出的时候会给总线一个ID,当这笔数据传送到总线上后,总线会对ID进行扩展,扩展内容用来标志cmd由哪个master发出,接着再把扩展后的ID回给slave。送到slave之后,slave回response信号给总线时,总线也可以根据扩展的ID,将slave返回的response路由到正确的master上。

        而针对多master访问总线问题,AXI 引入了一个原子操作,希望对地址A进行读后写的操作都是由同一个master操作的,中间不会由别的master介入,这样在多线程的时候就不会出现访存冲突的问题。AXI总线针对原子操作定义了两种Access。

6.1. Locked access

        Locked access:在一对master和slave之间,当它们所有的transaction都得到response之后,master可以发若干lock_r或者lock_w来锁住总线,总线被lock住之后就不会去响应别的master的读写请求。如果要解锁,就必须等所有lock操作都完成之后,再发一次普通的读或写操作就能unlock总线,过程如下图所示:

        这里涉及到的所有several locked_r/w以及one normal_r/w,其对应的AR_ID和AW_ID必须完全一致。locked access虽然解决的访存冲突问题,但带来了数据传输效率低下的问题:比如master1访问的地址是slave1的,此时master2要访问slave3,显然他们俩的访问是不冲突的,但Locked access会使得master1在访问slave1时锁死总线,不允许master2控制总线,导致访存效率低下。对于Lock访问是否成功,AXI使用ARLOCK和AWLOCK来表示访问是否成功,如下图所示:

6.2. Exclusive access

        Exclusive access:为了解决lock锁死总线效率低下的问题,exclusive access把这个避免访存冲突的任务交给slave做,此时所有master访问总线都是灵活的。

         对于Exclusive access访问方式,若访问成功,slave返回master一个EXOKAY。若访问失败,slave回OKAY,正如下图slave信号RESP协议所写:“OKAY can also indicate an exclsive access failure”。

        如果slave支持exclusive 访问,数据收完回复exokay,传输成功;如果不支持,就回okay,传输失败。exlcusive访问进行读后写时,读写的各种控制信号必须完全一致,譬如ARID和AWID,size信号,burst length等必须完全一致。slave回exokay标志exclusive传输成功必须同时满足一下两点要求:①在ex_read和ex_write期间,对ex_read所指示的地址没有别的write操作;②ARID在这段时间,没有发起新的ex_read操作。

        对于第二点要求,发起ex_read时,总线会监测该ex_read操作的地址是否被别的AWID操作修改。这就会带来一个问题:如果连续发起两次ex_read操作,总线只会监测第二次ex_read的地址,而不会去监测第一次ex_read的地址,所以连续两次ex_read操作后,第一次的ex_write时的slave就不确定地址是否中途被修改过。因此总线规定,在ex_read和ex_write期间,ARID没有发起新的ex_read操作,slave才可以回exokay,否则回okay视为exclusive传输失败。

        如果总线需要支持exclusive操作,那么有多少个master,总线就需要有几套监控逻辑对应ARID地址数据是否被修改。

        exclusive access 对起始地址还有一个对齐要求:一次burst传输的起始地址需要跟整个burst的byte数对齐,例如总线位宽为32bit,即4byte;burst 16传输,即一次burst传输64byte数据,那么地址就需要和64byte地址对齐。且整个burst访问必须是2^N byte,最大128Byte。访问还需要能到达实际的终端存储地址,所以不能是cacheable的传输。

        

        

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

EventBus(事件总线)的使用和源码的简单解析

Google Guava EventBus(事件总线)的使用和源码的简单解析 什么是EventBus? 事件总线(EventBus)是一种广泛用于软件架构中的设计模式,用于实现解耦和松散耦合的通信机制。它可以帮助组织和管理应用程序中不同组件之间的通信&…

【SQL篇】面试之高级查询和连接

603 连续空余座位 select distinct c1.seat_id from Cinema c1 join Cinema c2 on abs(c2.seat_id-c1.seat_id) 1 where c1.free1 and c2.free1 order by c1.seat_id;总结 思路:为什么我们这里需要abs和distinct,如果是如下代码,为什么不可…

[架构之路-178]-《软考-系统分析师》-17-嵌入式系统分析与设计- 3- 分区操作系统(Partition Operating System)概述

目录: 本文概述: 1.1 什么是分区操作系统 1.2 分区操作系统出现背景 1. 前后台系统(Foreground/Background System) 2. 实时操作系统(RTOS) 本文概述: 随着嵌入式系统日趋复杂化以及对安全性要求的不断提高,采用空间隔离、时…

[计算机图形学]光场,颜色与感知(前瞻预习/复习回顾)

一、Light Field / Lumigraph—光场 1.我们看到的是什么 我们的眼睛能够把3D世界转换为2D的成像信号被我们感知,如上面第一幅图,这就是我们看到整个世界的过程,那么如果我们把之前记录的光的信息都完美的放在一个幕布上,那么我们…

第15章 信息(文档)和配置管理

文章目录 软件文档的分类(1)开发文档:描述开发过程 本身(2)产品文档:描述开发过程的 产物(3)管理文档:记录项目管理的信息 文档的质量可以分为四级(1&#xf…

第二十五章 刚体Rigidbody

在物理学中,静止和匀速直线运动是物体的平衡状态,如果给该物体施加某一个力的话,物体的平衡状态就会改变,当然这个真理的前提是理想状态。我们知道在现实世界中,由于重力和摩擦力的存在,任何一个物体都不可…

【SQL篇】窗口函数和公共表达式

1077 项目员工 III # Write your MySQL query statement below select project_id, employee_id from (select project_id, e.employee_id, rank() over(partition by project_id order by experience_years desc) as rkfrom Employee ejoin Project pon e.employee_id p.empl…

【Fluent】接着上一次计算的结果继续计算,利用计算过程中得到的物理场(温度、速度、压力等)插值Interpolate文件初始化模型的方法

一、问题背景 因为fluent中支持的初始化无非三种类型。 1、Standard initialization 标准初始化 2、Hybridinitialization 混合初始化 3、FMG initialization FMG初始化 另外,还可以用UDF通过坐标判断的方式予以初始化。 但是这些初始化方法都没办法利用以前计算过…

通关MyBatis(上)

作者:~小明学编程 文章专栏:spring框架 格言:热爱编程的,终将被编程所厚爱。 目录 什么是MyBatis 如何使用Mybatis 添加依赖 创建数据库 配置数据库连接字符串 MyBatis的操作流程 数据持久层 配置mybatis的xml文件 mapp…

Windows自动虚拟机WSL和VMware虚拟机兼容问题(此平台不支持虚拟化的 Intel VT-x/EPT)

问题背景与原因分析 在安装了WSL2之后,忽然发现VMware Workstation无法正常启动了。就是在开启虚拟机时遇到了这种情况: “ 此平台不支持虚拟化的 Intel VT-x/EPT” 问题描述:出现以上问题,发现WSL2和 VMware Workstation 是不兼…

idea使用git遇到的小问题

idea使用git遇到的小问题 前置说明颜色含义中文插件修改提交的用户名 前置说明 idea版本为2022专业版 github需要自己会科学上网 颜色含义 在idea中使用github后,会发现项目中会有各种各样的颜色,如图所示文件全为绿色 这颜色含义分别为:…

函数-函数递归及练习

目录 1、什么是递归? 2、递归的两个必要条件 3、递归的练习 3.1 接受一个整型值(无符号),按照顺序打印它的每一位 3.2 编写函数不允许创建临时变量,求字符串的长度 3.3 求第n个斐波那契数 3.4 字符串逆序&…

UG NX二次开发(C++)-建模-修改NXObject或者Feature的颜色(二)

文章目录 1、前言2、在UG NX中修改Body的颜色操作3、采用NXOpen(C)实现3.1 创建修改对象颜色的方法3.2 在do_it()中添加调用的代码3.3 测试效果 1、前言 在UG NX中,改变NXObject和Feature的操作是不相同的,所以其二次开发的代码也不一样,我们…

企业级信息系统开发讲课笔记4.1 Spring Boot入门程序

文章目录 零、学习目标一、Spring Boot框架概述(一)由Spring到Spring Boot(二)Spring Boot框架的核心功能(三)Spring Boot框架的应用 二、使用Maven方式构建Spring Boot项目(一)创建…

二维字符数组的三种输入方式浅析(scanf()、gets()和fgets())

二维字符数组的输入 目录 二维字符数组的输入1.scanf函数知识点scanf()关于回车的问题: 2.gets函数3.fgets函数参考链接 1.scanf函数 知识点 按照常规输入数组的办法,通过 for 循环实现 将整个字符串输入时,在数组名前不加&&#xff0…

Java 基础进阶篇(二)—— static 静态关键字与单例模式

文章目录 一、static 静态关键字1.1 静态成员变量与实例成员变量1.2 静态成员方法与实例成员方法1.3 static 访问注意事项1.4 内存使用情况 二、工具类三、代码块四、单例模式4.1 饿汉单例4.2 懒汉单例 一、static 静态关键字 static:代表静态的意思,可…

Java 基础进阶篇(六)—— 接口详解

文章目录 一、接口概述二、接口的基本使用三、接口从 JDK 8 开始新增的方法四、接口的注意事项(了解)补充:接口与接口的关系 一、接口概述 规范的基本特征是约束和公开。 接口就是一种规范,其约束别人必须干什么事情。 所以&…

【五一创作】Matlab 绘制风速、风向统计玫瑰花图【优化】

在之前,有个博客专门讲matlab 绘制风速、风向统计玫瑰花图;这里面存在不少细节问题,目前对该部分代码做了优化。以前的博客链接见下: Matlab 绘制风速、风向统计玫瑰花图 最近接了一个任务,需要绘制风速、风向的统计玫…

Java 基础进阶篇(五)—— 抽象类与模板方法设计模式

文章目录 一、抽象类、抽象方法概述二、抽象类的特征三、模板方法设计模式3.1使用场景3.2 实现步骤3.3 写作文案例 补充:final 和 abstract 是什么关系? 一、抽象类、抽象方法概述 在 Java 中 abstract 是抽象的意思,可以修饰类、成员方法。 abstract …

Java 基础进阶篇(七)—— 面向对象三大特征之三:多态

文章目录 一、多态的概述二、多态中成员访问特点 ★三、多态的优势与劣势四、多态下的类型转换4.2 自动类型转换(从子到父)4.2 强制类型转换(从父到子)4.3 instanceof 关键字 一、多态的概述 多态:是指执行同一个行为…