为什么Exclusive access访问?

📅 2026/7/31 17:41:25
为什么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 SlaveS1中的同一块内存而该 Slave 支持 Exclusive Access。AXI Master 1M1针对地址范围16h1000到16h100F发起一次 Exclusive Read 事务。Slave 会根据 M1 提供的 ARID 开始监控这些地址直到以下情况之一发生该地址位置发生写操作或者另一个具有相同 ARID 值的 Exclusive Read 操作将 Monitor 重置到新的地址位置。如果 Master 2M2在 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普通访问成功、独占失败响应码BurstAXI 突发传输一次地址对应多笔数据传输Snoop总线窥探ACE 一致性协议相关独占访问需关闭窥探。