如何禁用PowerPC处理器上的处理器缓存?

时间:2008-09-16 15:02:23

标签: embedded processor powerpc

在我们的嵌入式系统(使用PowerPC处理器)中,我们想要禁用处理器缓存。我们需要采取哪些措施?

为了澄清一下,有问题的应用程序必须具有尽可能恒定的执行速度。 执行相同代码路径的可变性是不可接受的。这是关闭缓存的原因。

5 个答案:

答案 0 :(得分:4)

我对这个问题迟到了,而且我已经有一段时间了,因为我在PPC上完成了所有低级处理器初始化代码,但我似乎记得缓存& MMU紧密耦合(一个必须启用另一个)并且我认为在MMU页表中,您可以定义可缓存的属性。

所以我的观点是这样的:如果某个代码子集必须在确定的时间运行,也许你在该页面中定义为不可缓存的内存区域中找到该代码(通过链接器命令文件)表?这样,所有可以/应该从缓存中受益的代码都可以,并且(希望)代码的子集不应该,但

无论如何我都会以这种方式处理它,所以稍后,如果你想为部分系统启用缓存,你只需要在MMU页表中翻转几个位,而不是(重新)写入init代码设置所有页面表&缓存。

答案 1 :(得分:2)

从E600参考手册:
HID0专用寄存器包含几个位,用于使指令和数据高速缓存无效,禁用和锁定。

您应该使用HID0 [DCE] = 0来禁用数据缓存 您应该使用HID0 [ICE] = 0来禁用指令缓存。

请注意,启动时,两个缓存都被禁用。 您需要在汇编代码中编写它。

答案 2 :(得分:1)

也许你不想全局禁用缓存,你只想为特定的地址范围禁用它?

在某些处理器上,您可以为地址范围配置TLB(转换后备缓冲区)条目,以便每个范围都可以启用或禁用缓存。这样,您可以禁用内存映射I / O的缓存,并且仍然为主RAM块保留缓存。

我做过的唯一的PowerPC是PowerPC 440EP(来自IBM,然后是AMCC),所以我不知道所有的PowerPC是否都以相同的方式工作。

答案 3 :(得分:1)

它是什么样的PPC核心?不同供应商的不同内核之间的缓存控制非常不同......而且,禁用缓存通常被认为是对机器非常不好的事情。性能变得非常慢,以至于您可以使用旧的8位处理器(夸大一点)。一些ARM变体具有TCM,紧耦合存储器,而不是缓存,但我不知道任何具有该设施的PPC变体。

也许更好的解决方案是保持Level 1缓存处于活动状态,并使用片上L2缓存作为静态映射RAM而不是?这至少在现代PowerQUICC设备上很常见。

答案 4 :(得分:1)

关闭缓存对你没有任何好处。您的执行速度将下降一个数量级。你永远不会发布这样的系统,所以它在这些条件下的表现是没有意义的。

要实现稳定的执行速度,请考虑以下方法之一:

1)锁定部分或全部缓存。来自飞思卡尔,IBM和AMCC的所有当前PowerPC芯片都提供此功能。

2)如果它是具有L2缓存的飞思卡尔芯片,请考虑将该缓存的一部分映射为片上存储器。

相关问题