本篇主要是AMBA AXI协议中的Atomic Accesses解释(十三)
在AMBA AXI协议中,原子访问(Atomic Accesses)是一种操作,它允许在总线上执行不可分割的读-修改-写序列,以确保在多主设备共享同一内存资源时数据的一致性。原子操作在多个主设备尝试访问同一内存位置时非常重要,可以防止数据竞争和不一致。
AXI协议支持原子操作通过以下方式:
1. 原子性信号:在AXI通道中,有一些信号用于控制原子访问。具体来说,在读写地址通道中,有ARCACHE和AWCACHE信号,它们控制缓存行为,并且与原子性有关。但是,更直接的是ARLOCK和AWLOCK信号,它们用于指示原子访问。
2. 锁定传输:AXI协议定义了锁定传输(Locked Transfers),允许主设备在执行一系列传输时锁定从设备,以确保原子性。但是,请注意,在AXI3中,支持锁定传输,而在AXI4中,锁定传输被移除,代之以独占访问。
3. 独占访问:AXI4引入了独占访问(Exclusive Accesses),这是一种更高效的实现原子操作的方式。独占访问允许主设备尝试读-修改-写操作,而无需在整个操作期间锁定总线。它通过两个阶段实现:
独占读:主设备执行一个独占读操作,从设备记录该地址的访问状态(通常标记为主设备已读取该地址)。
独占写:主设备随后尝试执行独占写操作。从设备检查该地址自独占读以来是否被其他主设备修改。如果没有,则独占写成功,并返回成功响应;否则,失败并返回错误响应。
独占访问依赖于从设备支持独占访问监视器(Exclusive Access Monitor)来跟踪地址状态。
在AXI协议中,原子访问的具体实现取决于系统设计。以下是一些关键点:
AXI3:支持锁定传输,但锁定传输会降低总线效率,因为在此期间其他主设备可能无法访问被锁定的从设备。
AXI4:不再支持锁定传输,而是推荐使用独占访问来实现原子操作。独占访问不会锁定总线,因此对总线性能的影响较小。
使用场景:
原子操作通常用于实现信号量、互斥锁等同步机制,在多核处理器或多主设备系统中确保数据一致性。
示例:
假设有两个主设备(CPU0和CPU1)共享一个内存位置,该位置用于实现一个信号量。它们可以使用原子操作来安全地获取和释放信号量。
1. CPU0执行独占读,读取信号量的值。
2. 如果信号量可用(例如值为0),则CPU0执行独占写,尝试将其设置为1。如果在此期间没有其他主设备修改该信号量,则独占写成功,CPU0获得信号量。
3.如果CPU1在CPU0的独占读和独占写之间也尝试修改信号量,则CPU0的独占写将失败,CPU0必须重试整个操作。
总结:
在AMBA AXI中,原子访问可以通过锁定传输(AXI3)或独占访问(AXI4)来实现。现代设计多使用AXI4的独占访问,因为它对总线性能更友好。在设计支持原子操作的从设备(如共享内存)时,需要实现相应的机制(如独占访问监视器)来支持独占访问。
AXI3 锁定传输(Locked Transfers)
锁定序列:主设备通过 ARLOCK/AWLOCK 信号锁定总线,确保整个操作期间独占访问从设备。
缺点:降低总线效率,阻塞其他主设备访问。
AXI4 已弃用:因影响系统性能,AXI4 移除了锁定传输。
AXI4 独占访问(Exclusive Accesses)
这是现代 AXI 系统的推荐方式,通过 两阶段操作 实现无锁原子性:
独占操作流程:
阶段1:独占读(Exclusive Read)
阶段2:独占写(Exclusive Write)
本篇内容中有部分资源来源于网络,如有侵权,请联系作者。
如果您觉得本公众号还不错的话,可以推给身边的朋友们,感谢并祝好!
160