描述
当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的第一次写入成功。
- 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完成之前,OCM无法处理此问题。
从上面可以看出,发生了死锁。
解决方法信息 :此问题有几种解决方法:
- 确保AXI_HP0 / AXI_HP1的主对仅访问OCM或DDR的单个目标,并且来自AXI_HP2 / AXI_HP3主对的访问也仅限于OCM或DDR。
- 一次对1个未完成事务的AXI_HP端口设置写入限制。对于写入,可以通过将0x0写入AFI_WRCHAN_ISSUINGCAP来完成。
没有回复内容