上述中的AXI独占访问机制是实现硬件级原子操作的关键。它解决了多主设备系统中“读-改-写”这一经典难题,而无需在整个操作期间锁定总线、阻塞其他所有通信。
1. 举例说明:多核系统中的自旋锁实现
假设一个双核系统(Core A 和 Core B)需要竞争一个位于共享内存中的自旋锁。这个锁的状态是一个简单的变量:0 表示解锁,1 表示上锁。
传统“读-改-写”的问题:
如果 Core A 想获取锁,它需要执行“读取锁值 → 判断是否为0 → 如果是0则写入1”这一系列操作。如果 Core B 在 Core A 读取之后、写入之前,也完成了读取和写入,两个核心会同时认为自己获得了锁,导致数据竞争。
AXI 独占访问流程:
AXI 独占访问通过 AxLOCK 信号和特殊的响应,将“读”和“写”两个独立的事务链接成一个逻辑上的原子操作。
独占读
目的:声明“我要监视这个地址,准备修改