AXI-5.4 Protocol errors
5.4.1 Software protocol error
软件协议错误的定义
-
规则:当对同一内存位置的多次访问使用了不匹配的共享性或缓存性属性时,就会发生软件协议错误。
-
举例1:多核系统中的缓存一致性问题
-
场景:一片共享内存区域,用于两个CPU核心(Core A 和 Core B)之间的通信。
-
错误行为:
-
Core A 将这片内存标记为
Write-Back, Inner Shareable(回写,内部可共享),认为数据会在核心集群的缓存之间保持一致。 -
Core B 由于软件bug,将同一片内存标记为
Non-cacheable(不可缓存),直接读写主内存。
-
-
后果:Core A 写入的数据可能长期停留在自己的缓存中,而 Core B 从主内存读到的将是旧数据。Core B 的写入会直接更新主内存,但 Core A 可能仍然从自己的缓存中读取旧值。数据一致性被彻底破坏,两个核心无法正常通信。
-
-
举例2:DMA 与 CPU 的协同工作失败
-
场景:一个 DMA 控制器需要与 CPU 共享数据缓冲区。
-
错误行为:
-
CPU 驱动程序错误地将缓冲区标记为
Write-Back(回写可缓存)。 -
DMA 控制器(通常)以
Non-cacheable属性访问内存。
-
-
后果:CPU 计算的结果可能只停留在缓存中,DMA 从主内存读取的是未更新的旧数据。或者,DMA 写入的新数据到了主内存,但 CPU 仍然从缓存中读取旧数据。数据损坏几乎必然发生。
-
协议对系统的要求:不死锁且隔离
普通内存的特殊规则
-
规则:系统不能因软件协议错误而死锁,且错误必须被限制在 4KB 区域内。
-
举例:
-
不死锁:即使发生了上述的数据损坏,系统仍然能够继续响应其他事务。CPU 不会因为等待一个永远不会到来的响应而挂起,总线不会卡死。
-
4KB 隔离:如果地址
0x1000-0x1FFF的内存因属性不匹配而数据损坏,地址0x2000-0x2FFF的内存必须保持完好。这就像船的防水舱室,一个舱室进水不会导致整艘船沉没。
-
外设访问的特殊规则
