This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] RM46L852:什么原因导致 Cortex-R4上没有指令高速缓存的指令缓冲区停止?

Guru**** 655270 points
Other Parts Discussed in Thread: RM46L852
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1061918/rm46l852-what-causes-instruction-buffer-stalls-without-an-instruction-cache-on-a-cortex-r4

器件型号:RM46L852

我已经实现了一个基数2和基数4解码算法、该算法在具有 ARM Cortex-R4F 的 TI RM46L852芯片上运行裸机。 我还实施了和的优化版本、对于基数4、我得到的加速几乎与我预测的完全相同、但对于基数2、我实际上有一个性能回归。

然后、我在汇编语言中实现了基数2和优化基数2设计、并使用 PMU 性能计数器来查找回归的原因。 我的优化主要是在输入值为0时跳过30条指令。 分支预测器可以很好地完成工作、正确预测所有分支中约96%的分支、其余4%不会考虑性能回归。 除了在优化设计中指令缓冲器停转高25倍之外、每个其他 PMU 计数器值大致相同。

查看文档、它只说这可能是由于指令缓存缺失所致、但该芯片没有任何 I$或 D$、并且具有单周期片上 RAM。 我找不到任何其他说明指令缓冲器到底是什么以及可能是什么原因的文档。 有人有解释吗?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Arvid:

    你是对的。 RM46没有指令缓存和数据缓存。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    感谢您的回复。 正如我们两位都说过的、这个芯片没有任何 I$和 D$、但是我如何解释"指令缓冲器停止"? 您对此有什么解释吗?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="507542" URL"~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1061918/rm46l852-what-causes-instruction-buffer-stalls-without-an-instruction-cache-on-a-cortex-r4/3930502 #3930502"]我们都说过,此芯片没有任何 I$和 D$,但我如何解释“指令缓冲器停止”?[/quot]

    代码是从闪存还是 RAM 运行?

     RM46L852产品说明书显示 RAM 为零等待状态、但是闪存访问可能需要等待状态、具体取决于 CPU 时钟速度:

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="91588" URL"~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1061918/rm46l852-what-causes-instruction-buffer-stalls-without-an-instruction-cache-on-a-cortex-r4/3935183 #3935183"]代码是从闪存还是 RAM 运行?

    代码从闪存运行、而数据在 RAM 中。 我知道以220MHz 运行 MCU 时所需的等待状态。 但是、即使我将 MCU 降低到44MHz (闪存为0等待状态)、在优化的设计中、指令缓冲区延迟仍然是前者的25倍。

    因此、降低 PLL 频率并将等待状态设置为0、指令缓冲区停止的问题仍然存在。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    未对齐的 LDR 指令与已对齐的负载相比具有额外的周期损失。 一般而言、与负载相比、存储器不太可能使系统失速。 STRB 和 STRH 具有与 STR 相似的性能、因为它是合并写缓冲区的。 由于加载/存储单元中有四个时隙、四个以上的连续挂起加载将始终导致管道停滞。