CMN-700包括几种电源管理能力,要么由外部控制,要么由SoC辅助。CMN-700具有以下电源管理功能:
(1)几个不同的预定义电源状态。这些状态包括SLC Tag和Data ram的all/half/none能否被powered up, powered down, or in retention。
memory retention:数据被保留,但是不能正常读写。
这些power状态降低了静态和动态的功率消耗。
(2)支持HNF中的static retention,其中SoC使SLC和SF ram处于retention状态。这样降低了静态功耗。
(3)支持in-pipeline的低延迟Data RAM retention控制,可用一个可编程的idle计数器来使SLC RAMs进入到retention状态。(也就是动态retention)
CMN-700中的power domains包括:
Logic
除HNF SLC Tag和Data ram和HNF SF ram外的所有逻辑。
System Level Cache RAM0
HN-F中的SLC Tag 和 Data RAMs way[7:0]。每个HN-F分区中的RAM可以独立控制。
System Level Cache RAM1
HN-F中的SLC Tag 和 Data RAMs way[15:8]。每个HN-F分区中的RAM可以独立控制。
Snoop filter only mode
只有SF RAM,没有SLC RAM。每个HN-F分区中的RAM可以独立控制。
下图显示了一个电源域配置示例:
下图显示了另一个电源域配置示例,其中CXSDB组件位于同一个电源域中:
CMN-700逻辑P-Channel控制除RAM和CXS电源域之外的所有电源域。除了控制逻辑域之外,P-Channel还允许HNF软件控制的电源域和逻辑域之间的同步。这个同步是通过一个配置状态来实现的,如下图所示:
有两条路径转换从OFF到ON状态:
Cold reset
逻辑PSTATE OFF到ON转换也启动所有HNF分区的NOSFSLC到FAM转换。
Exit from HN-F Static Retention state
逻辑PSTATE从OFF转换到CONFIG,这表明CMN-700正在退出Memory Retention状态,并且不启动任何HNF分区power转换。下表包含了域内组件的power模式和相关的PSTATE值。
HNF有不同的 power状态。不同状态之间的转换就是使能或禁用HNF的不同部分。HNF有三种功率状态:
在这些电源状态下,HNFs以四种模式运行:
FAM
Full Associativity Mode (FAM), SF、SLC全部使能。
HAM
Half-Associativity Mode (HAM), SF使能,SLC的lower half ways([7:0])使能,way[15:8]禁用且处于断电状态。
SFONLY
Snoop filter only mode (SFONLY), SF使能,SLC处于 powered off。
NOSFSLC
SF和SLC全部处于powered off。
(也就是对HN-F内部RAM(SLC0,SLC1,SF)的不同部分使能/禁用)
还有疑问可以看下表:
状态转换图如下:
当HNF处于NOSFSLC状态时,SF不跟踪RNF的一致性。因此,由于功率状态转换到NOSFSLC,RNF在flush前必须处于静默。在从NOSFSLC转换到SFONLY、HAM或FAM状态之前,必须刷新RNF cache。
这些HNF功率状态使用配置寄存器写入来进行转换,它必须针对SCG区域中的所有HNF。此外,逻辑域的P-Channel可以启动一个nosfslc的FAM转换。
注:CMN-700在SLC初始化完成之前不接受请求。
cmn_hns_ppu_pwpr:power状态配置寄存器
cmn_hns_ppu_pwsr:power状态上报寄存器
cmn_hns_ppu_dyn_threshlod:动态retention转换时idle计数器的阈值寄存器
PS:如何实现power management模块的代码设计呢?
CMN文档描述的很清楚了,可以通过寄存器配置,使其进入不同的power state,然后控制HN-F不同的组件power on/power off/retention。那么核心代码就是设计一个状态机,具体转换条件这里就不详细描述了。
咱们下期见~