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.

[参考译文] MSP430FR4133:AM 功耗取决于存储器中的代码位置

Guru**** 2589245 points
Other Parts Discussed in Thread: MSP430FR4133

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/759085/msp430fr4133-am-power-consumption-depends-on-code-location-in-memory

器件型号:MSP430FR4133

为了实现针对 PMM32勘误表的权变措施、我想知道
在中旋转时、我的 MSP430FR4133在 AM 中消耗的电流为16MHz
不带任何中断或其他"干扰"的无限循环。

因此、我删除了初始化部分和之后通常出现的"eint"
并检查电流。 它看起来是1.15mA
对于 AM 下16MHz 的 FR4133来说、完全可以从高速缓存运行。 然后是 I
更改了我的初始化代码中一些没有的小东西
对电流消耗的影响。 但电源电流突然跳跃
1.35mA。

经过一些搜索后、结果表明电流消耗取决于位置
主循环正在运行(在添加或时、它实际上已移动了一个位
删除初始化部分中的代码)。 主循环就是简单的

永久: JMP 永远

如果它位于模8地址(0x??6 oder 0x???E)之前的2个字节、则它
消耗1.35mA。 在其他每个地址上、我们将具有1.15mA 的电流。 这意味着、如果
我们假设使用以下(gas)代码

平衡-非平衡变压器 8、0x4303
NOP
NOP
NOP 永久
: JMP 永远

它将消耗1.35mA 的电流。 当移除任何数量的 nops 时、我们得到1.15mA。

首先要想到的是、JMP 位于 A 的最后一个字上
缓存行和预取器从 FRAM 取接下来的4个字。 但是、正如我们所做的那样
具有一个2路设置关联缓存、每个缓存具有4行、每行64位、应该是
可缓存两个连续的8字节对齐的存储器块、具有8字节
大小。

让事情变得更有趣:代码

平衡-非平衡变压器 8、0x4303
NOP
NOP
NOP 永久
: JMP 永远
.word 0x0000

消耗1.36mA。 但这个

平衡-非平衡变压器 8、0x4303
NOP
NOP
NOP 永久
: JMP 永远
.word 0xFFFF

仅为1.28。 最后但同样重要的是:

平衡-非平衡变压器 8、0x4303
NOP
NOP
NOP 永久
: JMP Forever1
forever1: JMP 永远

使用1.24mA (与后面的情况无关)。

有什么解释吗?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我猜以下字是预取的(甚至是解码的)、但由于它实际上未使用、因此也不会缓存。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    这也是我的想法。 但这并不能解释的较高电流

    我的最后一个示例。 forever1肯定会将其放入下一个高速缓存行中。

    因此、在这种情况下、代码应再次完全缓存运行(即使使用)

    缓存的下一个字)、并且只在两个缓存行之间切换无法

    就是这么贵...

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Andre、
    请记住、有多个元件会影响 MCU/CPU 的工作电流。 基本要点是 CPU 电流的性质。 它是时钟数字逻辑的电流、这意味着它由该逻辑中的电容充电和放电产生的电流脉冲组成、如 CPU、地址总线等 因此、虽然假设从缓存执行代码的速度低于对缓存缺失的存储器的直接访问速度、这是正确的、但包括数据在内的已执行指令也会影响实际电流或更好地说所需的电荷。 这就是为什么很难指定实际有效电流的原因。 它通常是一个"平均"值。 当然、其中一个可能更具体、但您必须为所有数百万个可能选项指定所需的费用。
    因此,我建议从不同的角度来对待它。 您是否有一个特定的问题、从不达到最佳电流的角度而言、或者您是否怀疑器件出现故障?

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

    是的、我知道原则。

    >您是否有一个特定的问题、从不能达到最佳电流的角度而言、或者您是否怀疑器件出现故障?

    我没有发现任何故障。 我只是想了解这种行为、并想了解这种行为。 整个缓存和特别是。"智能逻辑"(用于选择缓存行)没有很好的记录、因此我很好奇。 至少我们的功耗增加了近20%、这仅仅是因为一段代码的位置应该完全适合缓存...

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Andre、
    明白。 20%的变化是由于我在可能的变化范围中很好地提到了几点。 大多数用户不会非常详细地了解电流消耗。 如果用 C 语言编写代码、这是基于所选优化设置的 C 编译器的任务、以尽可能低的电流消耗生成代码。 结果是 C 编译器的质量因素之一。 在汇编器中、当然由工程师来创建最佳代码。
    您是否在实现特定的功率预算目标方面遇到困难?

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

    不、我只想了解有关 gonig 的内容。 除此之外,我怀疑任何编译器都会考虑将"JMP"一词除以优化功耗;-)。

    正如我写的:最初、我只是想看看当 SMCLK 从8 MHz 切换到16 MHz 以在 PMM32周围工作时、功率会上升多少。 当然、任何关心功率的人都不会让 CPU 在 AM 中运行、什么也不做。 但是、如果有一个执行有用操作的小循环、则取决于它位于缓存行中的位置以及要跟踪的数据。

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

    所有、

    存在和应用程序节点、用于描述所有这些效果、并为注重功耗的用户提供一些有关如何优化 Acitve 模式功耗的想法:

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

    经过 TI 的调查(谢谢!) 结果是:

    1. JMP 后面的字被(预)提取,甚至被缓存(但如果它位于模8地址,则位于不同的缓存行上!)

    2.如果它位于模8地址上(因此位于不同的缓存行中),即使它是缓存的,电流消耗也取决于位切换。 这是由于预取跨越高速缓存行边界。 因此、即使所有位都在高速缓存中、切换高速缓存行的成本也可能高于单个位的成本。