AR# 47584

Zynq-7000 SoC, APU – PLD 指令可能在禁用数据缓存中分配

描述

无论处理器配置设置情况如何,包括数据缓存启用 (Data Cache Enable) 位是什么值,PLD 指令会预取和分配任何标记为 Write-Back 的数据(Write-Allocate 或 Non-Write-Allocate,Shared 或 Non-Shared)。

这会产生数据一致性问题。如果数据缓存启用后就不会发生这个问题。

解决方法需要软件在无文档记录的控制寄存器中设置一个位。设置该位会让所有 PLD 指令被视为 NOP。

解决方案

影响:

很小。意料之外的存储器可缓存性混叠问题出现,可能导致数据一致性问题,如需了解更多详情,敬请参见影响详情。

解决方法::

如欲了解有关写入无文档记录控制寄存器的详情,敬请参见以下解决方法详情部分。

受影响的配置:

所有系统

受影响的器件修订版本:
全部。无计划修复。参考 (Xilinx Answer 47916) - Zynq-7000 SoC 芯片版本差异。

 

影响详情

此问题预计不会产生任何严重影响。 数据缓存应在启动过程早期启用,较晚阶段也不会禁用。 

所以只会影响启动代码,但这种代码经过了良好控制,预计数据缓存不启用时不会包含任何 PLD 指令。

解决方法详情

如果系统受到此问题的影响,可采用软件解决方法,包括在无文档记录控制寄存器的设置位[20],位于 CP15 c15 0 c0 1。

该位应使用以下 Read-Modify-Write 代码序列进行编写:

  • MRC p15,0,r0,c15,c0,1
  • ORR r0,r0,#0x00100000
  • MCR p15,0,r0,c15,c0,1

设置该位使得所有 PLD 指令都被作为 NOP,从而会让通常使用 PLD 的代码序列,如 memcpy() 程序可能会受到一定性能影响。 

因此,如果采用这种解决方法,Xilinx 强烈建议限制其使用范围仅在数据缓存禁用的时间段内。

链接问答记录

主要问答记录

Answer Number 问答标题 问题版本 已解决问题的版本
47916 Zynq-7000 SoC 器件:芯片修订差异 N/A N/A
AR# 47584
日期 06/13/2018
状态 Active
Type 设计咨询
器件