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# 47516

Zynq-7000 SoC, DDR - 控制器误处理 STREX 指令

描述

在某些高速缓存禁用的情况下,DDR 控制器不能正确地响应由 CPU 执行的独占存储 (STREX) 指令。

这可通过在启用高速缓存的可缓存内存空间内只执行 STREX 指令来避免。

解决方案

影响:轻微,系统锁定非常罕见。

解决方法:如果需要独占操作的主控器仅限于 ARM 内核,让需要独占操作的区域可以缓存并启用 L1 高速缓存,就可避免该问题。此外,如果其中一个主控器恰好在 PL 中,则可以在 PL 中实现独占监控器,并将从 ARM CPU 和架构主控器的访问路由至该监控器。

受影响的配置:向 DDR 内存控制器发出独占操作的系统。

受到影响的器件修订版:参考 (Xilinx 答复 47916) - Zynq-7000 设计咨询主答复记录。


在某些情况下,DDRC 在执行 STREX 指令时不产生适当的响应。以下独占操作序列展示了一个 STREX 指令处理不当的场景。

  • 主控器 0 通过 AEXOKAY 地址执行 EXCL RD(正确)
  • 主控器 1 通过 BEXOKAY 地址执行 EXCL RD(正确)
  • 主控器 1 通过 BEXOKAY 地址执行 EXCL WR(正确)
  • 主控器 1 通过 AEXOKAY 地址执行 EXCL RD(正确)
  • 主控器 0 通过 AOKAY 地址执行 EXCL WR(错误)
  • 主控器 1 通过 AEXOKAY 地址执行 EXCL WR(错误)
在这个序列中,主控器 0 从地址 A 执行独占读取 (LDREX)。在主控器 0 针对同一地址执行独占写入 (STREX) 以完成独占操作前,主控器 1 发出一个 LDREX/STREX 对并在地址 B 上完成独占操作,随后是从地址 A 完成 LDREX。在这种情况下,主控器 0 仍可通过针对地址 A 执行 STREX 在该地址上完成独占操作。但该操作不会重置主控器 1 的独占访问监控器。因此,来自主控器 1 的后续 STREX 指令将会收到一个错误的 EXOKAY 响应,这表明主控器 1 执行的写入操作是在没有完成的情况下完成的。

影响的详细信息:
这是一个罕见的问题,启用 L1 高速缓存时,在两个 ARM CPU 之间的最常见使用案例中并没有表现出来。但在一个禁用高速缓存的罕见场景下,独占访问可能会处理不当,主要取决于使用情况,它可能会造成锁死。

链接问答记录

主要问答记录

Answer Number 问答标题 问题版本 已解决问题的版本
53051 Zynq-7000 SoC - PS DDR Controller N/A N/A
AR# 47516
日期 06/13/2018
状态 Active
Type 设计咨询
器件
  • Zynq-7000
的页面