问题描述
在由指令获取引起的转换后备缓冲器(TLB)未命中之后,在非常特定的事件组合中,辅助处理器单元(APU)可以锁定或破坏数据。
有关其他勘误表的列表,请参阅(Xilinx答复30529) 。
解决/修复方法
类别 :4
问题描述
在导致“特殊I侧异常”的指令之后,当APU指令进入CPU流水线时,APU很可能通过锁定或导致数据损坏而导致PowerPC 440发生故障。 “特殊I侧异常”的主要原因是与取指令相关联的TLB未命中。虽然所有进入CPU管道的指令(在导致“特殊I侧异常”的指令之后)都被刷新,但在非常特定的情况下,APU指令的刷新可能不会干净地执行。
发生的情景
以下是可能导致此问题的代码序列示例:
bcl 29,31,6e34 / * Instr A:跳转到导致ITLB未命中的页面上的最后一条指令(在这种情况下为Instr B)* /
。
。
nop / * Instr B:页面上的最后一条指令;导致ITLB页面错过* /
sync / * Instr C:新页面;点击TLB * /
nop / * Instr D:在TLB中命中并可以发送到两个I / L管道* /
stfs fr25,-7c7e(r20)/ * Instr E:导致挂起的APU指令* /
在该示例中,指令A是正确预测的条件分支,并且其目标地址在TLB中未命中。分支的目标地址(指令B)处的指令恰好是页面中的最后一条指令,并且后面的指令(指令C)位于恰好在TLB中命中的新页面中。在与指令B相关的异常生效之前,可以获取新页面开头的一些指令,包括FPU存储(指令E),并进入CPU管道。当指令B到达回写阶段并且发出所有指令的全局刷新时,该异常生效。
重要的是要强调,即使代码中存在此序列,也可能不会遇到此问题。换句话说,这种情况非常罕见。
软件解决/修复方法s
要防止出现此问题,请使用以下解决方案之一:
– 在TLB中使用静态条目。对于不使用操作系统的用户来说,这通常是一种解决此问题的有吸引力的方法。
– 使用FPU / APU时,将CCR0 [26]设置为“1”。这种解决方法主要由操作系统实现。性能略有下降取决于应用程序。
没有回复内容