PowerPC  – 当发生以下情况并启用异常时,PowerPC可能会挂起-Altera-Intel社区-FPGA CPLD-ChipDebug

PowerPC – 当发生以下情况并启用异常时,PowerPC可能会挂起

问题描述

<a>案例A:</a>

当以下三个条件同时发生时,PowerPC可能会挂起:

1.将操作存储到OCM。

2.围绕此OCM存储操作发生中断。

3.存储后立即进行加载操作。

上述情况可能导致存储和装入操作出现故障并最终导致基于PowerPC的系统挂起。

<a>案例B:</a>

此外,以下拐角条件也可能导致系统挂起:

(1)

store reg,DSOCM < – 此处发生异常

商店注册,DSOCM

要么

当异常命中存储多个操作(将多个寄存器保存到DSOCM)或者存储多个跟随加载时,会发生同样的问题:

(2)

存储多个29,DSOCM < – 此处发生异常

要么

(3)

加载reg,DSOCM

存储多个31,DSOCM < – 此处发生异常

如果异常在指示的指令内以某个周期命中,则会发生以下情况。在上述情况A和B-(1)中,第一个商店之后的加载或存储将显示在DPLB而不是DSOCM上。在情况B-(2)和B-(3)中,商店多个的全部或部分将显示在DPLB而不是DSOCM上。所有四种情况都会导致数据损坏,并且依赖于DPLB上总线错误中DSOCM和DPLB外设的映射。

该问题与PPC无关:OCM时钟比率。

解决/修复方法

针对“案例A”的建议解决方法:

1.在任何OCM存储之后立即插入“isync”指令,然后加载指令。

2.还建议您在步骤1中的“isync”之后发出“sync”指令,以便PowerPC完成任何未完成的商店交易。

代码示例(之前):

stw r4,0(r3)

lwz r9,4(r3)

代码示例(后):

stw r4,0(r3)

iSync中

同步

lwz r9,4(r3)

“案例A”也可以通过在商店和后续加载或商店之间添加“nop”指令来解决。

针对“案例B”的建议解决方法:

情况B-(1)可以通过在商店和后续商店之间添加“nop”指令来解决。

情况B-(2)和B-(3)不能通过软件解决。解决方案是指示编译器/汇编器不生成存储多个指令(现有编译器开关)。

如果禁用例外,则不会发生这四种情况。

注意:除非用户明确打开,否则GCC不会生成存储和加载倍数。

请登录后发表评论

    没有回复内容