功耗管理是APU设计中非常关键的一环。由于APU通常需要在高负载下运行,处理复杂的计算任务,因此它的功耗可能会相对较高。
一、APU的功耗介绍
APU集成了许多功能以提高其动态功耗效率:
1、CPU待机
两个CPU中的任何一个都可以被置于待机模式,并在检测到事件或中断时启动。
2、L2缓存待机
当CPU处于待机模式时,L2缓存也可以被置于待机模式。
3、使用时钟门控
在模块内的所有子块中广泛使用时钟门控。Cortex-A9中的动态时钟门控可以在CP15电源控制寄存器中启用。如果启用,在空闲期间CPU内部块的时钟会被动态禁用。门控块包括整数核心、系统控制块和数据引擎。
4、精确的分支和返回预测
精确的分支和返回预测减少了错误指令获取和解码操作的次数。
5、物理寻址的缓存
物理寻址的缓存减少了缓存刷新和重新填充的次数,从而节省了系统中的能耗。
6、微型TLB
CPU实现了微型的TLB(Translation Lookaside Buffer)用于本地地址翻译,这减少了翻译和保护查找所消耗的功耗。
7、顺序访问标签RAM和数据RAM
顺序访问标签RAM和数据RAM,以消除对不需要的数据RAM的访问,从而最小化不必要的功耗。
8、内存访问的顺序性
为了减少L1缓存的功耗,通过利用内存访问的顺序性来减少全缓存读取的次数。如果缓存读取是顺序的,并且地址位于同一缓存行内,则只访问之前读取过的数据RAM集。
9、四个BTAC
如果一个指令循环适应四个BTAC(Branch Target Address Cache)条目,则关闭指令缓存访问以降低功耗。
10、CPU动态控制引擎时钟
NEON引擎的时钟由CPU动态控制,只有在发出NEON指令时引擎才会获得时钟。
**注意:**当PS处于开启状态时,无法关闭APU或其任何子块的电源。
二、APU的待机模式
在待机模式下,设备仍然通电,但大部分时钟被关闭。这意味着处理器处于静态状态,并且唯一消耗的电能是由于泄漏电流和少量逻辑电路的时钟驱动,这些逻辑电路负责检测唤醒条件。
使用WFI(等待中断)或WFE(等待事件)指令可以进入此模式。建议在WFI或WFE之前使用DSB(数据同步屏障)内存屏障,以确保挂起的内存事务完成。
处理器停止执行,直到检测到唤醒事件。唤醒条件取决于进入指令。对于WFI,中断或外部调试请求会唤醒处理器。对于WFE,存在几个特定的事件,包括MP系统中另一个处理器执行SEV(end Event,发送事件,会导致在多处理器系统中向所有CPU发送一个事件信号)指令。SCU( Snoop control unit,窥探控制单元,负责维护两个处理器之间的L1缓存一致性,以及从PL到ACP接口的缓存一致性)的请求也可以在MP系统中唤醒时钟,以进行缓存一致性操作。这意味着处于待机状态的处理器的缓存继续与其他处理器的缓存保持一致。处理器复位总是会强制处理器退出待机状态。
在SCU中,通过设置mpcore.SCU_CONTROL_REGISTER中的相应位来启用待机模式。当启用此功能时,如果满足以下条件,SCU将停止其内部时钟:
• CPU处于WFI模式
• ACP上没有挂起的请求
• SCU中没有剩余活动
当CPU离开WFI模式或在ACP上发生请求时,SCU将恢复正常操作。
L2缓存控制器的待机模式可以通过设置L2控制器电源控制寄存器(l2cpl310.reg15_power_ctrl)的第0位来启用。该模式与驱动控制器的处理器的等待状态(WFI/WFE)一起使用。在进入等待状态之前,Cortex-A9处理器必须在SCU的CPU电源状态寄存器中设置其状态字段,以指示其进入待机模式。然后,Cortex-A9处理器执行WFI或WFE进入指令。退出低功耗模式的Cortex-A9处理器也可以读取SCU CPU电源状态寄存器位,以确定其状态,然后再执行其复位设置。
如果MP系统处于待机模式,SCU会向L2缓存控制器发出信号,要求关闭其时钟,当L2处于空闲状态时,控制器会响应这一请求。SCU到L2的任何事务都会重新启动时钟,并在延迟2-3个时钟周期后触发响应。
三、L2控制器中的动态时钟门控
L2控制器电源控制寄存器的第1位启用控制器内的动态时钟门控功能。如果启用此功能,当缓存控制器空闲32个时钟周期时,它会停止其时钟。控制器将停止时钟,直到其从SCU的从机接口上有事务发生。如果该接口检测到事务,它会重新启动其时钟,并在延迟2到3个周期后接受新的事务。