AXI原子操作
协议原文
单拷贝原子大小
AXI4协议引入单拷贝原子概念。这个术语定义了事务原子操作更新的最小字节数。AXI4协议要求一个大于单拷贝原子大小的事务,必须更新至少大于单拷贝原子大小的内存块。
原子操作并没有定义数据更新的确切时刻。必须保证的是,任何管理者都不能观察到原子数据的更新过程。例如,在许多操作系统中的链表等数据结构都是由32bit的原子构成。对这些数据进行原子操作时,要求32bit同时更新。任何管理单元都不能观察到先更新16bit,之后再更新另外16bit
更复杂的系统需要支持更大的原子元素,特别是64bit的,以便管理员可以使用基于更大原子元素的数据结构进行通信。
系统中支持的单拷贝原子大小非常重要,因为在通信过程中涉及到的所有组件必须都支持这个size。如果两个主机通过互联和一个从机进行通信,那么所涉及到的组件都必须确保所需大小的事务被原子对待。
AXI4协议不要求特定的单拷贝源自大小,系统可以支持不同的单拷贝原子大小。
对于组内通信,不同的组件组可以拥有不同的单拷贝原子大小,在AXI4中,单拷贝原子组这一术语指的 是一组可以以特定的原子属性进行通信的组件。
事务的原子性只有在地址对齐时才能得到保证,例如,对于64bit的单拷贝原子来说,如果事务地址没有8byte边界对齐,那么该事务就没有任何64bit单拷贝原子保证
字节选通信号对单拷贝原子大小不影响
多拷贝写原子性
指示系统提供多拷贝原子性,则要定义Multi_Copy_Atomicity属性
- True 支持Multi_Copy_Atomicity
- False 不支持Multi_Copy_Atomicity
如果满足以下,可以认为系统被定义为多拷贝原子:
- 对同一位置的写操作,可以被不同agent以相同顺序观察到
- 一个agent可以观察到的写操作,其他的agent也可以观察到
多拷贝原子可以由以下操作保证:
- 使用单点序列化(single Point of Serialization),这样针对相同位置的全部访问操作都可以按序处理 ,必须确保在该位置的新值对任何代理都可见之前,将Cache的一致性拷贝全部无效化。
- 避免在agent的上游使用前向Buffer,这可以避免一个Buffer写操作在对全部代理可见前对某些代理可见
如果一个系统使用了ARM v8架构处理器,则该系统必须拥有Multi_Copy_Atomicity属性。该属性用来支持获取加载和释放存储指令,释放存储指令要求存储操作是多拷贝原子性的。
独占访问exclusive
独占访问机制提供了信号量类型的操作,利用该机制时,不需要在整个访问周期内让总线被一个主设备 所独占,这意味着信号量类型操作不会影响总线访问延迟以及最大可实现带宽。
AxLOCK信号指示独占访问,RRESP和BRESP指示指示独占访问读写操作成功和失败。
从设备要求额外的逻辑实现独占访问,当主设备访问一个不支持独占访问的从设备时,AXI协议提供了一 种机制用来通知该主设备其所访问的从设备不支持独占访问操作。
独占访问过程
独占访问机制如下:
- 主机对某地址发出独占读访问
- 稍后,主机尝试对同一地址发出独占写访问,并使用与上次独占读操作的ARID相同的AWID来完成独占访问。
- 独占写访问指示如下
- 如果从执行独占读事务开始没有其它主设备写相同的位置,独占写事务将会更新存储器,并返回成 功信号。
- 否则会返回失败信号,此时存储器不更新。
主设备或许不会完成独占事务的写部分,独占访问监视硬件对于每一个事务ID只会监视一个地址。如果 一个主设备没有完成独占事务的写部分,接下来这个主设备又以相同的事务ID对另一个地址发起了独占 读事务,则独占访问监视的地址就会被改变。
主机视角的独占访问
主机通过执行独占读操作来发起独占访问。如果事务成功,则从机返回EXOKAY,表示从机监视器记录了独占访问的地址。
如果主机尝试向不支持独占访问的从机发出独占读事务请求,从机会返回OKAY响应而不是 EXOKAY响应。
主机可以将OKAY响应作为独占访问不支持的错误响应看待,规范推荐主机接下来不要执行独占操作的写部分
在独占读操作之后的一段时间后,主设备尝试对相同位置发起独占写事务,如果从独占读事务开始时到 现在对应地址的内容始终没有发生改变,独占写操作就会成功,从设备返回EXOKAY响应,并更新对应 的存储器位置,否则,独占写操作就会失败,从设备返回OKAY响应而不是EXOKAY响应,独占写操作不 会更新对应的存储器位置。
主设备或许不会完成独占操作的写部分,如果发生了这种情况,从设备将会继续监视独占访问的地址直到针对该从设备的另一个独占读事务启动一个新的独占访问序列。
主设备在独占访问序列的读部分完成后才会开始独占访问序列的写部分。
从机视角的独占访问
不支持独占访问的从设备可以忽略AxLOCK信号,这样的从设备对于一般和独占访问都必须提供OKAY响 应信号。
支持独占访问的从设备必须拥有监视硬件,规范推荐对于每一个支持独占的事务ID而言都准备一个监视 单元。ARM规范参考手册,ARMv7-A和ARMv7-R版本定义了一种独占访问监视器,一个单端口的从设备 可以拥有一个外接的独占访问监视器,而一个多端口的从设备则或许需要实现内部监视器
独占访问监视器需要记录任何独占读操作的地址和ARID,然后需要监视指定的位置,直到针对该位置的 写操作发生或者使用相同ARID的另一个独占读操作复位监视器并将地址设置为另一个值。
当从设备接收到一个独占写事务时,监视器就会根据给定的AWID检查指定的地址是否被监视,如果是, 这表示从独占读操作开始以来没有发生写操作,然后就会处理写操作并完成整个独占访问过程,返回 EXOKAY响应,并更新存储器。
如果在进行独占写时,地址不再被相同AWID的监视硬件监视,则表明发生了下列情况之一:
- 在独占读访问事务发起之后,对应的位置的内容被更新。
- 监视器的地址被另一个独占读事务重置修改。
在以上两种情况中,独占写事务都不会更新对应的存储器位置,从设备必须返回OKAY而不是EXOKAY响应。
独占访问限制
独占访问具有以下限制
- 独占访问的地址必须与传输事务中的突发大小和突发长度的乘积对齐。
- 独占访问中要传输的字节数必须是2的幂,如1、2、4、8、16、32、64或128
- 独占传输最大字节数为128
- 独占访问事务中的突发长度不能超过16
- AxCACHE信号的值必须保证事务能够到达正在监视独占访问的从机。如果存在buffer或cache可能会在独占访问事务到达监视器之前返回响应,那么独占访问必须设置成Non-buffereable或Non-cacheable
- 域必须是不可共享的或系统可共享的。
- 传输事务类型必须是ReadNoSnoop或WriteNoSnoop
不遵守这些限制可能会导致不可预测的行为
对于视为属于同一独占访问操作的读操作和写操作,以下信号对于两个操作必须相同
- AxID、AxADDR、AxREGION、AxLEN、AxSIZE、AxBURST、AxLOCK、AxCACHE、AxPROT、AxDOMAIN、AxSNOOP、AxMMUSECSID、AxMMUSID、AxMMUSSIDV、AxMMUSSID、AxMMUATST
在独占操作过程中监视的最小字节数由事务的突发长度和突发大小所定义,而从设备可以选择监视更大 的字节数(最大不超过128字节),但当相邻的字节被更新时,这会导致本应成功的独占访问操作变为 失败状态。
独占访问响应
RRESP与BRESP响应信号在表示一般访问成功时使用OKAY信号,而在表示独占访问成功时使用EXOKAY 信号,这意味着不支持独占访问的从设备会使用OKAY信号表示独占访问操作的失败。
note
- 针对不支持独占访问从设备的独占写操作总会更新存储器。
- 针对支持独占访问从设备的独占写操作只有在独占写操作成功时才会更新存储器。
锁定访问
AXI4不支持锁定事务,然而AXI3必须实现支持锁定事务。
AXI4移除了对于锁定传输的支持,原因如下
- 大多数组件不需要锁定事务
- 锁定交易的实现对以下方面有重大影响
- 互联器的复杂度
- QoS保证能力
当主设备使用AxLOCK信号表示当前事务是一个锁定事务时,互联器就必须确保只有当前主设备可以访 问目标从设备区域,直到该主设备发出解锁事务为止,互联器的仲裁器必须强制执行此限制。
在主设备开始读事务或写事务的锁定序列前,该主设备必须确保没有其它等待完成的事务。 任何携带AxLOCK信号的事务都是锁定事务,这会强制互联器锁定接下来的事务,因此,一个锁定序列 只有当主设备发出无AxLOCK信号事务时才会终止,这个终止事务包含在锁定序列中并实际上移除了 锁。
在即将完成锁定序列时,必须首先确保所有的锁定事务都已经完成,然后才能发出终止解锁事务,并必 须确保在进行接下来的任何事务之前该解锁事务已经执行完成。 主设备必须确保一个锁定序列中的全部事务都拥有相同的AxID值
锁定访问事务需要互联器在锁定序列进行中时避免任何其它的事务发生,这会对互联器的效率产 生影响,因此,该规范推荐锁定访问事务只用于支持早期设备。
该spec推荐下列限制
- 任何锁定序列都要保持在单个4KB地址范围内
- 将任何锁定事务序列限制为两个事务
原子访问信号
AXI3版本如下
AxLOCK[1:0] | Acess type |
---|---|
00 | Normal access |
01 | Exclusive access |
10 | Locked access |
11 | Reserved |
AXI4中略有修改
AxLOCK | access type |
---|---|
0 | normal access |
1 | exclusive access |
遗留问题
- AWLOCK[1:0]=10在新版本中视为0
- ARLOCK[1:0]=10在新版本中视为0
AXI5协议增加部分(原子访问,其余部分略过)
原子事务
AMBA5引入原子事务,其并不只是单次访问,并且具有与事务相关联的操作。原子事务允许将operation发送到data,从而允许operation在data所在位置附近进行执行。原子事务适用于data与要执行operation的agent距离很远的情况。
与使用独占访问相比,这种方式减少了系统中其他agent无法访问待操作数据的时间。
锁定访问事务需要互联器在锁定序列进行中时避免任何其它的事务发生,这会对互联器的效率产 生影响,因此,该规范推荐锁定访问事务只用于支持早期设备。
Atomic_Transactions用来指示组件是否支持Atomic事务
Atomic_Transactions在一下接口中支持
- AXI5
- ACE5-Lite
- ACE5-LiteDVM
如果从机和互联支持原子事务,那么它必须支持所有operation类型、size和endianness
此版本spec不支持ACE5使用原子事务
overview
在原子事务中,主机发送地址、控制信息和outbound(出站)数据。从机发送inbound(入站)数据(AtomicStore除外)和response。本spec支持四种形式的原子事务
AtomicStore
- 发送包含地址的单个数据和待执行的原子操作
- 目标使用发送的数据作为操作数在指定的地址处执行operation
- 结果存放在该地址
- 给出不带数据的单个response
- outbound数据size为1、2、4、8bytes
AtomicLoad
- 发送包含地址的单个数据和待执行的原子操作
- 返回寻址位置的原始数据值
- 在寻址位置处将发送的数据作为操作数进行执行
- 结果存储在该地址
- outbound数据size为1、2、4、8bytes
- inbound数据size和outbound数据size大小一致
AtomicSwap
- 发送包含地址的单个数据
- 目的地址将寻址位置的数据与事务中的数据进行交换
- 返回寻址位置原始的数据
- outbound数据size为1、2、4、8bytes
- inbound数据一致与outbound数据size一致
AtomicCompare
- 向目的地址发送两个数据,包括compare value和swap value,两个数据size大小相等。
- 寻址位置处的数据与caompre value进行匹配
- 如果匹配成功,将swap value写入目的地址
- 如果匹配失败,不写入新数据
- 返回寻址位置处的原始数据
- outbound 数据size大小为2、4、8、16、32bytes
- 由于outbound数据包含compare balue和swap value,因此inbound数据size为outbound数据size的一半。
atomic事务操作
operator | 描述 |
---|---|
ADD | 将发送过去的数据和源数据相加,结果存储在目的地址 |
CLR | 根据发送的数据按bit清除源数据对应位置 |
EOR | 发送数据和源数据的逐位异或 |
SET | 根据发送的数据按bit对源数据对应位置进行置位 |
SMAX | 将源数据与发送数据的最大值存放在目的地址。这个操作是有符号数比较 |
SMIN | 将源数据与发送数据的最小值存放在目的地址。这个操作是有符号数比较 |
UMAX | 将源数据与发送数据的最大值存放在目的地址。这个操作是无符号数比较 |
UMIN | 将源数据与发送数据的最小值存放在目的地址。这个操作是无符号数比较 |
atomic事务属性
原子事务原则
- AWLEN和AWSIZE规定了事务中写数据的字节数量。对于AtomicCompare操作,字节数量必须是compare value和swap value的总和。
- 如果AWLEN指定的长度大于1,则AWSIZE指定的是所有数据位宽。
- 根据AWADDR和AWSIZE的规定,不在位宽范围内的写选通信号要拉低。
- 位宽范围内的写选通信号按需拉高。
对于AtomicStore、AtomicLoad和AtomicSwap
- 期望写数据为1、2、4、8bytes,读数据为1、2、4、8bytes
- AWADDR必须与数据size对齐
- AWBURST必须为INCR类型
对于AtomicCompare
-
写数据为2、4、8、16或32bytes,读数据为1、2、4、8或16bytes
-
AWADDR必须与单独写数据对齐,是整体写数据size的一半
-
如果AWADDR指向事务传输低半部分
- 先发送compare value。compre value为事务中每一拍的较低字节,或为多拍事务中的第一拍。
- AWBURST必须为INCE
-
如果AWADDR指向事务传输高半部分
-
先发送swap value。swap value为事务中每一拍的较低字节,或是多拍事务中的第一拍。
-
AWBURST必须为WRAP
对于AtomicCompare事务,以下是对于WRAP类型事务常用规则的放宽
- 允许burst长度为1,AWLEN为0
- AWADDR不需要跟transfer size对齐
下边是64位总线的一些属性组合和swap value与compare value的放置
atomic事务中的ID使用
原子事务使用一个单独AXI ID。对于请求、写响应和读数据,要求AXI ID一致。这一要求意味着主机只能使用AWID和ARID均能表示的ID值。
原子事务的ID不能使用正在同时进行outstanding且未完成的非原子事务ID。这条规则适用于AR或AW通道上的事务。此规则确保原子事务和非原子事务之间没有order约束
如果在非原子事务在原子事务发出前已经完成了,则原子事务和非原子事务允许使用相同AXI ID。
多个处于outstanding的原子事务不能使用相同AXI ID。
原子事务的请求属性
对于原子事务,下列限制适用于请求属性
- AWCACHE和AWDOMAIN允许为对接口类型有效的任何组合
- AWSNOOP必须设为全0
- AWLOCK必须设置为0,nomal访问
原子事务信号
一个额外信号被添加到接口去支持原子事务
AWATOP[5:0] | 描述 |
---|---|
0b000000 | 非原子操作 |
0b01exxx | AtomicStore |
0b10exxx | AtomicLoad |
0b110000 | AtomicSwap |
0b110001 | AtomicCompare |
对于AtomicStore和AtomicLoad事务,AWATOP[3]表示原子操作的endianness
- 拉低时,表示小端
- 置位时,表示大端
AWATOP[3]的值仅适用于算术运算,对于按位逻辑运算可以忽略。
对于AtomicStore和AtomicLoad事务,AWATOP[2:0]规定操作具体类型
AWATOP[2:0] | 操作类型 | 描述 |
---|---|---|
000 | ADD | |
001 | CLR | |
010 | EOR | |
011 | SET | |
100 | SMAX | |
101 | SMIN | |
110 | UMAX | |
111 | UMIN |
事务结构
对于AtomicLoad,AtomicSwap和AtomicCompare事务,事务结构如下
- request在AW通道发布
- 相关事务数据在W通道发送
- AWLEN决定要发送的写数据的数量
- 未指定原子事务请求和原子事务数据之间的相对时间
- 从机使用R通道返回源数据
- 要读的数据数量由AWLEN和AWATOP信号决定
对于AtomicCompare操作,如果AWLEN指示的burst长度大于1,那么读数据的数量时burst长度的一半
- 允许从机在发送读数据前等待所有写入数据。主机必须能够允许发送所有写入数据的同时未接收任何读取数据。
- 允许从机在接受任何写数据之前发送读数据。主机必须能够允许未发送写数据时,接受所有读数据。
- 写响应通过B通道返回。只有在从机收到所有写数据和原子事务结果可观察后,从机才能给出写响应。
大于AtomicStore事务,事务结构如下
- request由AW通道发布
- 事务相关数据由W通道传输
- AWLEN决定W通道上要传输的事务数据数量
- 原子请求和原子数据之间的相对时间不做规定
- 写响应通过B通道返回。只有在从机收到所有写数据和原子事务结果可观察后,从机才能给出写响应。
响应信号
原子事务需要写响应。写响应表示该事务完成,并且对有所需的观察者可见。
从接收到第一拍读数据开始,所有需要的观察者都可以看到包含读取响应的原子事务。
读响应和写响应都表示事务对所有所需的观察者可见,允许主机使用任一响应。
不存在任何操作错误的概念,例如溢出。操作有所有输入信息组合起来指定。
对于事务,如AtomicCompare,如果存在多个结果,则不提供关于事务结果的指示。要确定Compare和Swap指令是否已经更新内存,需要检查作为事务一部分返回的源数据。
当事务到达不支持原子事务的组件时,允许返回错误相应。对于AtomicLoad,AtomicSwap和AtomicCompare事务:
- 即使写响应为DECERR或SLVERR,从机也必须发送正确数量的读数据拍数。
- 主机可能会忽略写响应,而只使用伴随读数据的响应。
原子事务依赖关系
与基本事务死锁关系基本一致。
标签:翻译,独占,事务,原子,访问,操作,AXI5,数据 From: https://www.cnblogs.com/icwangpu/p/17025445.html