ddd

本章介绍了AXI4 协议规范中关于原子访问(Atomic Accesses)的相关内容,核心是多主控系统下的数据一致性机制,具体涵盖了单副本原子性大小、独占访问(Exclusive)、锁定访问(Locked)以及相关的硬件信号实现逻辑。
A7.1 Single-copy atomicity size
一、 单副本原子性大小的核心概念
- 基本定义:
- 单副本原子性大小(Single-copy atomicity size) 定义了一个事务(Transaction)在更新内存时,能够以原子方式(不可分割、不可中断)更新的最小字节数。
- 核心要求:
- 协议不规定数据更新的具体瞬时时刻,但它必须保证:没有任何主控(Master)能够观察到该原子数据被"部分更新"的中间状态。
- 举例说明:在 32 位原子系统中(如链表节点),对一个 32 位元素的原子更新必须一次性完成。绝不允许一个主控先看到高 16 位被更新,而在稍后的时间才看到低 16 位被更新。
- 如果一个事务的数据传输量大于系统的单副本原子性大小,AXI 协议要求该事务必须以不小于单副本原子性大小的数据块(Blocks)来分批更新内存。
二、 单副本原子组(Single-copy atomic group)
AXI4 协议并不强求全系统统一采用某一个固定的原子性大小,**系统内可以设计支持不同的单副本原子性大小。**因此引入了"原子组"的概念:一组能够以特定原子性进行相互通信的组件集合。
图片中的 Figure A7-1(示例系统架构图) 展示了这种分层的原子组设计:

- 64位单副本原子组(内层虚线框):
- 包含组件:Processor(处理器)、DSP(数字信号处理器)、DRAM Controller(DRAM控制器)以及它们之间的内部互连结构。
- 作用:更复杂的系统需要支持更大的原子元素(如 64 位),这使得处理器和 DSP 能够基于 64 位数据结构进行安全的高效通信。
- 32位单副本原子组(外层大虚线框):
- 包含组件:上述 64 位原子组的所有成员,再加上 DMA Controller(DMA控制器)、SRAM 以及通过 Bridge(桥接器)连接的外设(UART、Timer、GPIO)。
- 相互兼容性:在一个给定的通信链路中,所有参与的组件(主控、互连结构、从控)都必须支持所需的原子性大小。例如,如果处理器要和 SRAM 或 DMA 通信,它们必须共同确保事务以至少 32 位的原子性被处理。
三、 原子性保证的重要限制条件
AXI4 协议对原子性保证的两个非常关键的硬件约束:
- 地址对齐限制(Address Alignment Constraint):
- 规则:一个事务永远无法获得大于其起始地址对齐边界的原子性保证。
- 举例说明:即使整个总线和组件都处于一个 64位(8字节) 的单副本原子组中,如果该事务的起始地址没有对齐到 8 字节边界(例如是一个错位地址),那么该突发传输(Burst)将失去任何 64 位的单副本原子性保证。
- 字节选通不影响原子性(Byte Strobes Independence):
- 规则:事务中携带的字节选通信号(Byte Strobes,即 WSTRB 信号,用于指定哪些字节有效)不会影响单副本原子性的大小。即使选通信号只开启了部分字节,系统整体承诺的原子边界大小依旧不随之改变。
A7.2 Exclusive accesses
Exclusive accesses(独占访问)是 AXI 协议中极其重要的一个机制,它允许在多主控(Multi-master)系统中实现信号量(Semaphore)等锁操作,且不会阻塞总线,从而保证了总线访问延迟和带宽不受影响。
一、 独占访问的核心优势与信号控制
- 非阻塞锁: 传统的硬件锁(如 Locked Accesses)会直接锁死总线或从控,而"独占访问"提供了信号量类型的操作,不需要在操作期间让总线由某个特定主控独占。因此,它不会影响总线的访问延迟,也不会降低系统的最大可实现带宽。
- 信号量控制:
- 主控通过 AxLOCK 信号来声明这是一个独占读或独占写事务。
- 从控通过读通道响应 RRESP 和写通道响应 BRESP 来反馈这次独占操作是成功还是失败。
- 硬件支持: 从控(Slave)需要额外的硬件逻辑(通常是独占监视器 Exclusive Monitor)来支持此功能。如果主控向一个不支持独占访问的从控发起独占读,从控会返回 OKAY 而不是 EXOKAY,主控应将其视为错误,并推荐放弃后续的写操作。
A7.2.1 Exclusive access process独占访问的基本流程
独占访问遵循典型的 LL/SC(Load-Link / Store-Conditional) 逻辑,包含以下三个核心步骤:
- 独占读(Exclusive Read): 主控向某个内存地址发起一个独占读事务。
- 中间等待: 在稍后的某个时间,主控尝试向同一个地址发起独占写事务以结束该操作。注意:写事务的 AWID 必须与读事务的 ARID 完全匹配。
- 独占写(Exclusive Write)的结果判定:
- 成功: 如果自该主控发起"独占读"以来,没有任何其他主控写入过该地址。此时独占写成功,更新内存。
- 失败: 如果在此期间,有其他主控向该地址写入过数据。此时独占写失败,内存内容保持不变。
- 特别注意(硬件监视限制): 独占监视硬件通常对每个事务 ID(Transaction ID)只监控一个地址。如果主控发起独占读后没有进行写,而是用相同的 ID 发起了另一个新地址的独占读,那么监视器会直接覆盖并切换为监控新地址。
A7.2.2 Exclusive access from the perspective of the master从主控视角看独占访问
该部分从主控(Master)接收到的状态码(Response)角度,详细描述了时序和逻辑状态:
1. 读阶段(Read Phase)
- 主控发起独占读:
- 若从控支持并成功记录该地址,返回 EXOKAY(独占成功)。
- 若从控不支持独占访问,返回 OKAY。主控应认为该从控不支持硬件锁,规范推荐主控不要再继续执行后续的写操作。
2. 写阶段(Write Phase)
- 在成功获得 EXOKAY 读响应后,主控在未来的某个时刻发起相同地址的独占写:
- 若数据未被篡改:写操作成功,从控更新内存并返回 EXOKAY。
- 若数据已被其他主控修改:写操作失败,从控不更新内存,并返回 OKAY 响应。主控收到 OKAY 后得知遭遇并发冲突,通常会选择重新开始整个"读-改-写"循环。
3. 异常与规范约束
- 未完成的写操作: 主控可能会因为软件放弃等原因,在独占读之后不执行对应的独占写。在这种情况下,从控的监视器会持续监控该地址,直到该主控发起一个新的独占读序列来覆盖它。
- 严格的时序先后: 主控绝不能在读操作未完全结束(未收到读响应)之前,就擅自启动该独占序列的写操作部分。
A7.2.3 Exclusive access from the perspective of the slave 从控视角的独占访问实现
支持独占访问的从控必须在硬件上配备监视器(Monitor Hardware)。
1. 基本监测原理:
- 当从控接收到独占读操作时,监视器会记录下该操作的目标地址和 ARID(读事务 ID)。
- 此后,监视器会持续紧盯这个地址,直到发生以下两种情况之一才会复位或解除对该地址的监控:
- 该地址发生了写操作(无论来自哪个主控)。
- 相同 ARID 的主控发起了另一个新的独占读,且指向了不同的地址(此时监视器会复位并切换到新地址)。
2. 独占写的结果判定(硬件逻辑):
- 当从控收到带有特定 AWID 的独占写请求时,监视器会检查:当前该 AWID(匹配之前的 ARID)是否仍处于对该地址的监控状态中?
- 成功情况: 如果仍在监控,说明自上次独占读以来,没有任何主控修改过该地址。此时从控允许执行写操作更新内存,并向主控返回 EXOKAY 响应。
- 失败情况: 如果已经不在监控状态,意味着:
- 自独占读后,该地址已被其他主控更新过。
- 监视器已被复位,去监控其他地址了。
- 处理结果: 此时独占写绝对不能更新内存,且从控必须向主控返回 OKAY(而非 EXOKAY)告知失败。
A7.2.4 Exclusive access restrictions独占访问的严格限制条件
为了保证独占操作在硬件层面的准确性,主控发起的独占事务必须严格满足以下限制,否则会导致不可预测(UNPREDICTABLE)的系统后果:
- 完全对称的突发参数: 独占写的突发尺寸(Burst size)和突发长度(Burst length),必须与此前具有相同 ID 的独占读完全一致。
- 严格的地址对齐: 独占访问的起始地址必须对齐到该事务的总传输字节边界(即:突发尺寸 x 突发长度)。
- 地址与信号完全相同: 独占读与独占写的目标地址必须完全相同;
- 控制信号(如传输类型、保护信号等)也必须完全相同。
- ID 匹配: 独占读的 ARID 必须与独占写的 AWID 完全一致。
- 数据量与突发长度限制:
- 一个独占突发传输中所传输的总字节数必须是 2 的幂次方(可选 1, 2, 4, 8, 16, 32, 64 或 128 字节)。
- 单个独占突发传输的最大总字节数为 128 字节。
- 在 AXI4 中,独占突发的传输次数(Burst length)不能超过 16 次(即 AxLEN <= 15)。
- 缓存信号限制: AxCACHE 信号的值必须能够确保负责监控的从控可以"看到"这个事务。例如,独占访问事务绝不能使用将导致该事务直接在非从控处被拦截/缓存的 AxCACHE 值(如完全被分配在不可见的 Cache 中)。
- 监视颗粒度提示: 硬件监视的最小字节数由事务的突发尺寸和长度决定。从控可以监控更大的区域(最大至 128 字节),但如果监控区域过大,可能会因为邻近不相关的数据字节被更新,从而导致原本应该成功的独占访问被误判为失败。
A7.2.5 Slaves that do not support exclusive access不支持独占访问的从控行为
当系统硬件中存在一些简单的、没有配备硬件监视器的老旧或简单外设从控时,协议作出了如下兜底规范:
- 响应逻辑: 这种从控会直接忽略主控输入的 AxLOCK 独占声明信号。无论是普通访问还是独占访问,它们一律只返回 OKAY 响应。通过返回 OKAY(而不是 EXOKAY),从控实际上就在向主控传递一个信号:"我这里发生了一次独占失败(因为我不支持)"。
- 【重要防错机制差异】:
- 不支持独占的从控: 如果主控向它发起"独占写",即使没有匹配的读或数据冲突,从控由于没有拦截逻辑,总是会直接更新内存位置。
- 支持独占的从控: 只有当"独占写"被硬件监视器判定为成功(Successful)时,才会真正更新内存;如果判定为失败,它会直接拦截该写操作,不更新内存。