为什么Exclusive access访问?
Exclusive Access – The Concept
独占访问——概念
AMBA AXI 独占访问(Exclusive Access)乍看起来可能比较简单,但当我们深入研究后,会发现独占访问存在不同的形式。这些不同场景以及组合情况,为验证基于 AMBA 的设计中的这一关键特性带来了巨大的挑战。
本文主要关注 AMBA AXI3 中的独占访问,包括其概念、不同形式,以及如何利用 Synopsys VIP 来克服相应的验证挑战。
简单来说,独占访问是一系列操作序列:首先执行读事务,然后对相同地址范围执行写事务。
成功的独占访问会收到 EXOKAY 响应。
所有其他访问,包括独占访问失败的情况,都会收到 OKAY 响应。
独占访问机制使得系统能够实现类似信号量(semaphore)的操作,而无需在整个操作期间将总线保持锁定在某一个特定 Master 上。
独占访问的优势在于,类似信号量的操作不会影响关键的总线访问延迟,也不会降低系统可实现的最大带宽。
由于独占操作序列中的 Exclusive Read 和 Exclusive Write 之间的延迟时间没有明确规定,并且 Master 可能不会完成独占操作中的写部分,因此 Exclusive Access 操作存在不同的形式。
然而,Exclusive Sequence 必须始终从 Exclusive Read 操作开始,并且在假设该读操作返回成功的 EXOKAY 响应后,Master 才可以通过 Exclusive Write 完成整个独占操作序列。
如果在 Master 的 Exclusive Read 和 Exclusive Write 两次访问之间,没有其他 Master 向该地址位置执行写操作,则该 Master 的 Exclusive Write 会被认为成功。
如果在 Exclusive Read 和 Exclusive Write 之间,有其他 Master 向该地址位置执行了写操作,则该 Exclusive Write 会失败。
在这种情况下,该地址位置的数据不会被更新。
System Level Perspective
系统级视角
当系统中存在多个 Master 尝试访问同一块内存时,Exclusive Access 发挥着关键作用。
在技术术语中,这类内存被称为共享内存(Shared Memory)。
系统设计人员通常需要确保,在任意时刻,一个 Master 不会覆盖另一个 Master 已经写入的数据。
假设一个系统中存在两个 AXI Master,它们共享 AXI Slave(S1)中的同一块内存,而该 Slave 支持 Exclusive Access。
AXI Master 1(M1)针对地址范围16'h1000到16'h100F发起一次 Exclusive Read 事务。
Slave 会根据 M1 提供的 ARID 开始监控这些地址,直到以下情况之一发生:
- 该地址位置发生写操作;
- 或者另一个具有相同 ARID 值的 Exclusive Read 操作,将 Monitor 重置到新的地址位置。
如果 Master 2(M2)在 M1 完成 Exclusive Write 之前向相同地址位置执行写操作,那么 Slave 会在 M1 的 Exclusive Write 事务期间指示独占访问失败,并且不允许 M1 更新该内存位置。
在上述场景中,Slave 根据 M1 发起的 Exclusive Read 请求,实际上为 M1 虚拟地保留了一部分内存资源。
当 M1 尝试向该内存位置执行写操作时,只有在没有其他 Master 使用该内存资源的情况下,Slave 才允许写入。
否则,数据不会被写入该内存资源。
通过这种方式,AXI 中的 Exclusive Access可以避免共享内存中的数据覆盖问题。
Different flavors of Exclusive Access
独占访问的不同形式
独占访问操作可能存在不同的形式,这给基于 AMBA 的设计验证带来了挑战。
下面列出一些复杂场景:
一次 Exclusive Read 后面可以跟随普通 Read 或 Write 操作。
一个 Master 可能不会完成独占操作中的 Write 部分。
一次 Exclusive Read 可以跟随另一次具有相同 ARID 值的 Exclusive Read,并且后一次 Exclusive Read 会将 Monitor 重置到另一个地址位置。
可能存在两个 Exclusive Read 同时监控相同的地址区域。
可以向一个不支持 Exclusive Access 的 Slave 发起 Exclusive Read/Write 操作。
准确创建这些场景非常耗费时间,并且具有很大的挑战性,需要深入理解协议以及验证方法学。
验证这些场景同样是一项挑战,因为 AXI 协议并没有针对这些情况详细说明预期行为。
ARM IHI 0022H.c (ID012621) A7.2 独占访问(Exclusive accesses)翻译
A7.2 独占访问
独占访问机制无需总线长期占用即可实现信号量类操作,不会对总线访问延迟与峰值带宽造成负面影响。通过AxLOCK信号标识独占访问,读 / 写响应信号RRESP/BRESP分别标识独占读、独占写操作的执行结果。从设备需要额外硬件逻辑以支持独占访问;若从设备不支持该机制,协议也规定了对应的交互行为。本节完整说明独占访问机制。
A7.2.1 独占访问流程
独占访问的基础执行流程:
主设备发起一次独占读操作;
后续某一时刻,主设备使用与本次独占读相同的AWID发起独占写操作,完成整个独占序列;
独占写分为两种结果:
成功:自本次独占读后无其他主设备修改该地址,则从设备返回EXOKAY,并更新对应存储地址;
失败:自本次独占读后有其他主设备改写该地址,则从设备返回OKAY,且不修改存储内容。
主设备可发起独占读,但始终不发起配套独占写。从设备的独占监控硬件仅针对每个事务 ID 记录一个监控地址;若同一 ID 发起新的独占读,监控地址会被更新为新地址。
A7.2.2 主设备视角的独占访问规则
主设备通过独占读开启独占序列;若从设备支持独占机制,将返回EXOKAY,表示已记录该地址用于监控;
若向不支持独占访问的从设备发起独占读,从设备仅返回OKAY而非EXOKAY。规范建议主设备收到该响应后,不再发起配套独占写;
完成独占读之后,主设备可发起独占写:若监控周期内无其他写操作,独占写成功,返回EXOKAY并更新内存;若地址被其他主设备修改,独占写失败,返回OKAY,内存保持不变;
主设备必须等待独占读完整完成后,才能发起配套独占写。
A7.2.3 从设备视角的独占访问规则
不支持独占访问的从设备可忽略AxLOCK信号,对所有普通 / 独占访问统一返回OKAY;向这类从设备发起独占写时,无论成败都会更新内存;
支持独占访问的从设备必须配备独占监控硬件。规范建议为每个可发起独占访问的主设备 ID 配置独立监控单元;单端口从设备可外置监控单元,多端口从设备则需内置;
监控单元会记录独占读的地址与ARID,持续监控该地址,直至:
收到同 ID 的独占写;
或收到同 ID 的新独占读(监控地址被替换);
当收到独占写时,监控单元校验:当前AWID对应的监控地址是否与本次写地址匹配:
匹配:说明无其他主设备改写,独占写成功,返回EXOKAY并更新内存;
不匹配:地址被修改 / 监控地址已更换 / 读写事务属性不一致,独占写失败,返回OKAY,不修改内存。
A7.2.4 独占访问约束条件
若违反以下约束,系统行为将不可预测:
独占访问地址必须对齐至单次突发总字节数(突发长度 × 单次传输字节);
单次独占传输总字节必须是 2 的幂(1/2/4/8/16/32/64/128 字节);
独占突发最大总字节为 128;
独占突发长度不超过 16 次传输;
AxCACHE属性必须保证事务直达独占监控从设备;若路径中存在缓存 / 缓冲会提前响应,则必须设置为不可缓冲、不可缓存;
地址域必须是非共享域(Non-shareable)或系统共享域(System-shareable);
事务类型必须为无窥探读(ReadNoSnoop)/ 无窥探写(WriteNoSnoop)。
同一独占序列的独占读、独占写,以下信号必须完全一致:
AxID、AxADDR、AxREGION、AxLEN、AxSIZE、AxBURST、AxLOCK、AxCACHE、AxPROT、AxDOMAIN、AxSNOOP、AxMMUSECSID、AxMMUSID、AxMMUSSIDV、AxMMUSSID、AxMMUATST
监控单元最小监控字节范围由突发长度与单次传输尺寸决定;从设备可扩大监控范围至最大 128 字节,但可能出现相邻地址修改导致独占访问误判失败。
A7.2.5 独占访问响应规则
读响应RRESP、写响应BRESP定义两类成功标识:
OKAY:普通访问成功,或独占访问失败;
EXOKAY:独占读 / 独占写操作成功。
独占读同一突发内所有数据节拍,响应不能混合EXOKAY与OKAY,但可搭配SLVERR/DECERR错误响应;
独占写仅返回单次统一响应(OKAY/EXOKAY/SLVERR/DECERR);
不支持独占访问的从设备,独占写一定会修改内存;支持独占访问的从设备仅在返回EXOKAY时更新内存。
关键术语注释
Exclusive access:独占访问,多核互斥同步硬件机制,用于实现信号量、原子操作;
Manager:主设备(发起 AXI 事务的模块,CPU/DMA 等);
Subordinate:从设备(接收 AXI 事务的模块,内存 / 外设控制器);
AxLOCK:独占锁信号,AXI4 仅 1bit,高电平代表独占访问;
EXOKAY:独占操作成功响应码;
OKAY:普通访问成功、独占失败响应码;
Burst:AXI 突发传输,一次地址对应多笔数据传输;
Snoop:总线窥探(ACE 一致性协议相关,独占访问需关闭窥探)。