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

news/2024/11/15 1:45:52/

目录

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.ppmy.cn/news/60631.html

相关文章

2022 gdcpc题解(10/13)

2022gdcpc 和学弟vp了一下这场,本来抓的数学选手咕咕了,只有2个人,打下来的感觉就是套路题和码量太大了,太久没写码量题导致 I I I调太久了,最后G没写完,K也没冲出来,感觉数学大爹在的话这K应该…

Java注解源码分析,实现自定义注解通过反射获取

Annotation 源码分析 JDK5.0 引入,可以通过反射机制动态获取,大量应用于java框架中 内置注解 Override 重写父类方法时 Target(ElementType.METHOD) //该注解只能作用于方法 Retention(RetentionPolicy.SOURCE) //在编译时起作用,静态检查 public int…

第五十章 管理镜像 - 在报告异步上使用 Dejournal 过滤器

文章目录 第五十章 管理镜像 - 在报告异步上使用 Dejournal 过滤器在报告异步上使用 Dejournal 过滤器一般镜像注意事项Mirror APIs主要故障转移成员的外部备份在镜像成员上升级 IRIS 第五十章 管理镜像 - 在报告异步上使用 Dejournal 过滤器 在报告异步上使用 Dejournal 过滤…

算法:合唱队

描述 N 位同学站成一排&#xff0c;音乐老师要请最少的同学出列&#xff0c;使得剩下的 K 位同学排成合唱队形。 设K位同学从左到右依次编号为 1&#xff0c;2…&#xff0c;K &#xff0c;他们的身高分别为T1​,T2​,…,TK​ &#xff0c;若存在i(1≤i≤K) 使得T1​<T2​&l…

AutoCAD介绍——带你了解最强的CAD软件

AutoCAD介绍——带你了解最强的CAD软件 什么是AutoCAD应用领域功能特点版本发展总结 什么是AutoCAD Autodesk的AutoCAD是一款世界著名的CAD软件&#xff0c;其全称为“Auto Computer-Aided Design”&#xff0c;是一种计算机辅助设计工具&#xff0c;用于帮助用户创建和编辑二…

【Python百日进阶-Web开发-Feffery】Day618- 趣味dash_18:微型系统--后端验证及md5加密

文章目录 一、环境准备1.1 初始化基础`Python + Dash`环境1.2 本项目中需要增加的第三方包二、本项目B站视频讲解三、页面效果四、项目源码4.1 server.py4.2 app.py4.3 login.py4.4 login_c.py4.5 user.py一、环境准备 1.1 初始化基础Python + Dash环境 CSDN文档参见:https:…

27. Service——Ingress

本章讲解知识点 Ingress 7层路由机制我们之前讲了 Service 的类型。除了 clusterIP 以外,另外三种方式都不推荐,因为这相当于将集群给暴露出去了,不安全,也不符合隔离的思想。 所以在 clusterIP 的基础上结合 Ingress 就可以做到安全将服务开放给外部。 这一节我们着重讲…

API接口的对接流程和注意事项

一、对接API数据接口的步骤通常包括以下几个部分&#xff1a; 了解API&#xff1a;首先需要详细了解API的基本信息、请求格式、返回数据格式、错误码等相关信息。可以查看API的官方文档或者使用API探索工具。同时&#xff0c;还需要明确数据请求的频率和使用权限等限制。 ​​测…