为什么要有独占访问?
独占访问:在某个时间段内,处理器对某个内存地址享有独有的访问权限。
AXI独占访问时为了解决多处理器系统或者多个外设设备同时访问共享资源时,可能出现的数据一致性和竞争问题。在这种情况下,如果没有合适的控制机制,可能会导致数据错乱、冲突或者丢失,从而影响系统的稳定性和可靠性。
AXI独占访问通过引入一种控制机制,确保在任何时刻只有一个处理器或外设能够访问共享资源,其他设备需要等待。这样可以避免多个设备同事访问共享资源导致的冲突和数据不一致的问题,从而保证系统的数据完整性和稳定性。
AXI独占访问的存在时为了提高系统的并发能力,确保数据的一致性和可靠性。
独占访问应用场景
AXI独占访问是一种用于处理器和外设之间通信的协议。其应用场景包括但不限于:
1. 多处理器系统中的内存访问:在多处理器系统中,多个处理器可能需要同时访问共享的内存资源。使用AXI独占访问可以确保在任何时刻只有一个处理器能够访问内存,从而避免数据一致性问题。
2. 外设控制:外设设备通常需要与处理器进行数据交换和控制。使用AXI独占访问可以确保外设设备在与处理器通信时能够获得必要的访问权限,从而提高系统的稳定性和可靠性。
3. 数据通路控制:在数字系统中,数据通路可能会涉及多个模块之间的数据传输和处理。使用AXI独占访问可以确保数据通路中的各个模块能够按照规定的顺序和优先级进行数据访问,从而提高系统的性能和可靠性。
独占访问流程
- 主机从一个地址执行独占读操作。
- 稍后,主机尝试通过对同一地址执行独占写操作来完成独占操作,并且使用与用于独占读的ARID匹配的AWID。
- 这种独占的写访问被标记为:
- 如果自独占读访问以来没有其他主服务器写入该位置,则成功。在这种情况下,独占写操作更新内存。
- 如果自独占读访问以来另一个主服务器已写入该位置,则失败。在这种情况下,内存位置没有更新。
主服务器可能无法完成独占操作的写部分。独占访问监控硬件只监控每个事务ID的一个地址。如果主服务器没有完成独占操作的写部分,则该主服务器使用相同的事务ID进行后续的独占读操作,将更改正在监视的独占访问地址。
在独占访问序列的读部分完成之前,主机不能开始写部分。
ARM 独占访问
使用独占访问指令LDREX/STREX完成,这两个指令将更新内存的原子操作分成了两个独立步骤。
独占访问要求
- 指定ID的独占写操作的突发大小和突发长度必须与前面相同ID的独占读操作的突发大小和突发长度相同。
- 独占访问的地址必须与事务中的总字节数对齐,即突发大小和突发长度的乘积。
- 独占读和独占写的地址必须相同。
- 独占读的ARID值必须与独占写的AWID值匹配。
- 独占读和独占写事务的控制信号必须相同。
- 在独占访问突发中传输的字节数必须是2的幂,即1,2,4,8,16、32、64或128字节。
- 在独占突发中可以传输的最大字节数为128。
- 在AXI4中,独占访问的突发长度不能超过16次传输。
- AxCACHE信号的值必须保证监视独占访问的从服务器看到事务。例如,独占访问不能有AxCACHE值,该值表示事务是可缓存的
独占访问与原子访问的关系
独占访问是原子访问的一种实现优化机制。
独占访问与普通访问的区别
对于独占访问,slave端会有Monitor检测当前address的状态,同一个AxID的访问,若被其他master修改过,数据更新失败,返回Okay response,;反之返回exokay response。
对于普通访问,不会检测当前address的状态,可以直接进行读写操作。