UPGRADE YOUR BROWSER

We have detected your current browser version is not the latest one. Xilinx.com uses the latest web technologies to bring you the best online experience possible. Please upgrade to a Xilinx.com supported browser:Chrome, Firefox, Internet Explorer 11, Safari. Thank you!

AR# 52034

Zynq-7000 AP SoC, APU — 针对不可高速缓存、可共享常规存储器区域的写请求可能会执行两次,导致软件同步问题

描述

在 Cortex-A9 微架构的某个时序环境下,指向不可高速缓存、可共享常规存储器区域的写请求可能会被执行两次,导致写请求通过 AXI 总线发送两次。

解决方案

当写请求之后又有一个进入相同自然对齐双字存储器区域的写请求,而且它们之间没有 DMB 时,这有可能发生。绝不能在第一个写请求存储的相同字节区执行第二个写请求。通常只有在重复写入用于同步目的时,这种写入的重复才会对系统的整体表现有影响。

在下列情况下,常规存储器区域的写请求按不可高速缓存处理:

  • 在数据高速缓存禁用时,才会发生写请求。
  • 写请求将指向标记为“常规存储器非高速缓存或可高速缓存的连续写入”的存储器区域。
  • 写请求将指向标记为“常规存储器可高速缓存回写与可共享”的存储器区域,CPU 则处于 AMP 模式下。

这种表现可能会对多主机系统产生影响,因为在该系统中控制信息可使用信号标等通信变量在存储器中的几个处理元件间传递。在这类系统中,通常采用 Load-Exclusive/Store-Exclusive 来要求通信变量,而通信变量的清零则通过 non-Exclusive 存储完成。 通信变量的清零可能会因该故障而发生两次。这可能会导致两个主机明确要求一个通信变量,因此会对共享数据造成数据损坏。

以下是可能会发生这种情况的情形之一:

MOV       r1,#0x40    ;地址为双字对齐和映射
; 在常规非高速缓存共享存储器
环路中:LDREX      r5, [r1,#0x0];读取通信变量 CMP       r5, #0      ;检查是否为 0 STREXEQ   r5, r0, [r1];尝试存储新值 CMPEQ     r5, #0      ;测试是否成功存储 BNE       Loop        ; 如果不是 DMB                   ,重试;确保所有后续访问                      ;在获得                       时可观察到;已经观察到通信变量;重要区域的负载和存储现在可被执行 MOV       r2,#0 MOV       r0, #0 DMB                   ;确保所有之前的访问都可观察到                       ;在通信变量清空前 STR       r0, [r1]     前;通过常规存储 STR      r2, [r1,#0x4] 清空通信变量;之前的 STR 可能会合并,被再次发送, 其可能会;造成通信变量的意外发出。

当通信变量是字节、半字或全字时,这种情况都有效。

解决方法详情:

有几个解决方法:

  1. 在清空通信变量后添加一个 DMB:
    STR    r0, [r1]    ;清空通信变量 
    DMB                ;确保前一个 STR 是完整的

    此外,任何 IRQ 或 FIQ 处理程序都必须在开始时执行 DMB ,以确保通信变量清空都已彻底完成。

  2. 确保没有其它数据使用与通信变量相同的自然对齐 64 位存储器区域:
    ALIGN 64 communication_variable DCD    0 unused_data            DCD    0
                           LDR    r1,= communication_variable
  3. 使用 Store-Exclusive 清空通信变量,而非 non-Exclusive 存储。

 

影响: 很小。
解决方法:: 有几个可供参考的具体解决方法。
受影响的配置: 使用 CPU 的系统。
受影响的器件修订版本: 全部,无计划修复。参见(Xilinx 答复 47916)——Zynq-7000 AP SoC 芯片修订差异。


修订历史记录
05/16/2013——初始版本

链接问答记录

主要问答记录

Answer Number 问答标题 问题版本 已解决问题的版本
47916 Zynq-7000 AP SoC 器件:芯片修订差异 N/A N/A
AR# 52034
日期 08/14/2013
状态 Active
Type 设计咨询
器件
  • XA Zynq-7000
  • Zynq-7000
的页面