AR# 47484

Zynq-7000 SoC、AXI — AXI_HP 访问 OCM 和 DDR 时,就会出现锁死

描述

在一个 AXI_HP 源和另一个源(如 DMAC)采用相互依赖的方式生成对 OCM 和 DDR 的访问时,就有可能出现 PS AXI 互连锁死状况。 

让一个源只向一个目的地(OCM 或 DDR)发出请求或将一个 AXI_HP 接口的出色编写次数限制在一次写入的情况下,可避免锁死。 

有问题的源包括 AXI_HP 接口对和中心互连(DMAC 和 IOP 主控器等)等。APU 内存请求(CPU 和 ACP)不存在问题。

解决方案

影响:主要影响。系统可能会挂起。
规避措施:请参阅“文章详情”部分。
受影响的配置: 使用 AXI_HP 接口的设计
受影响的器件修订版本:请参考(Xilinx 答复 47916) - Zynq-7000 设计咨询主答复记录

 

当两个源以特定的顺序访问 OCM 和 DDR 时,就会出现锁死状态。可影响锁死状态的源有三种。这些源不包括 APU(CPU 和 ACP 接口)的内存请求。

这两种源的任何组合都可以访问 OCM 和 DDR,这可能会导致锁死状况:

 

  • AXI_HP{1,0} 为一个对
  • AXI_HP{3,2} 为一个对

中心互联(包括 DMAC 和 IOP 主控器等)

AXI_HP{1:0} 包括(例如)访问 OCM 的 AXI_HP0 以及访问 DDR 的 AXI_HP1(两个主控器都在相同的 HP 对中)。

不会出现锁死状况的实例:

  • AXI_HP 对不访问 OCM 和 DDR
  • 中心互连不访问 OCM 和 DDR
  • AXI_HP0 正在访问 OCM,而 AXI_HP3 正在访问 DDR(不同的 AXI_HP 对)

因此,对于会发生的锁死情况,两个源必须同时访问 OCM 和 DDR。 

其中的一个源必须是 AXI_HP 的一个对。其它源可以是其它的 AXI_HP 对,也可以是与中央互连相连接的主控器。


除了访问 OCM 和 DDR 的两个数据源之外,它们还需要采用一个特定的序列顺序来执行访问。

下面是显示该序列的具体实例:

AXI_HP 主控器DMA 控制器主控器
AXI_HP_DDR1_1(至 DDR 端口 1)DMA_OCM(至 OCM)
AXI_HP_DDR1_2(至 DDR 端口 1)DMA_ DDR2(至 DDR 端口 2)
AXI_HP_OCM(至 OCM) 


在单独的通道上独立执行地址写入和数据写入;但在从设备中,写入数据的顺序必须遵循从设备接受的写入地址序列,也就是说不允许重新排序。 

以下是 DDR 上可能出现的一种事务处理排序:

  • AXI_HP_DDR1_1:AXI_HP 的第 1 个写入成功了。
  • DMA_DDR2:DDRC 接受该事务处理,但不能完成,因为在 DMA_OCM 完成之前不提供写入数据
  • AXI_HP_DDR1_2:在 DMA_DDR2 完成之前,DDR 无法处理该任务
 以下是 OCM 上可能出现的事务处理排序:
  • AXI_HP_OCM:OCM 接受该事务处理,但不能完成,因为在 AXI_HP_DDR1_2 完成之前不提供写入数据。
  • DMA_OCM:在 AXI_HP_OCM 完成之前,DDR 无法处理该任务。

从上面可以看出,出现了锁死情况。

解决方法信息:有几个解决该问题的方法:

  • 确保 AXI_HP0/AXI_HP1 的主对只访问 OCM 或 DDR 的单个目标,而 AXI_HP2/AXI_HP3 的主对也仅限于访问 OCM 或 DDR。
  • 对 1 个未完成事务的 AXI_HP 端口进行写入问题限制。对于写入,这可通过将 0x0 写入 AFI_WRCHAN_ISSUINGCAP 来实现。

链接问答记录

主要问答记录

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