学霸笔记-PPU (power policy unit)
写在前边
最近在做低功耗验证,项目中涉及到PPU这一块儿,在家查了好久资料,发现能找到的有价值的文章真的好少,机缘巧合之下,让我找到下边总结,分享出来,希望对和我有相同境遇的小伙伴带来帮助。
PPU ( Power Policy Unit ),这是一个用于电源管理的组件(也可以说是一个小 IP )。系统控制器通过这个组件来管理 SoC 中其它设备的电源。
PPU 作为一个电源管理的组件,提供了系统控制与设备间的电源握手协议,真正的底层控制部分放在了外面,需要一个额外的状态机辅助完成。这也好理解,对于不同的设备,可能需要的电源控制场景不尽相同,比如有的模块可能只做时钟关断(clock gating),有的模块需要实现电源关断( power gating ),在关闭设备电源的情况下,又可以区分多种细分需求,比如是不是要做逻辑或者存储的状态保留(retention);逻辑和存储是不是可以分别关断等等。各种条件做一下排列组合,可能会有很多种需求。举个例子,拿 CMN 中的系统缓存(HN-F )来说,逻辑部分, snoop filter ( SF )部分, SLC RAM 部分的电源可以分别控制;SLC RAM 部分支持 ON/OFF/RET 三种电源状态,而且 SLC RAM 在物理上分为两个 bank ,可以选择开一个 bank ,也可以选择两个 bank 全开; SF 部分也支持 MEM_RET 。所有的情况如下图:
上面只是举了一个例子,实际系统中的不同设备的电源控制会更复杂,所以也很难让一个 IP 顾全这么多。 因此需要根据实际需求单独实现底层控制,也就是下图中的 PCSM ( Power Control State Machine )。诸如电源开关,retention 控制(save/restore)这些控制逻辑都是 PCSM 完成的。
从上图我们也能看出 PPU 的接口:
PPU 里面有两个模式:电源模式( power mode )和操作模式(operating mode)。
电源模式是一个电源域里逻辑和 RAM 电源状态的正常组合,以及相关的时钟、复位和隔离控制。而操作模式代表电源模式的配置。这话听起来有点拗口,通俗一点的解释,电源模式就是我们常说的 ON/OFF/ RET (retention)这些。
那为什么还要操作模式呢?对于 OFF 来说没啥可以再细分的了,但是对于 ON 或者 RET 来说,情况也许会复杂,回想一下前面提到的 HN-F 例子。把这些细分的场景也归入电源模式行不行呢?可以是可以,但是会把事情搞的复杂,还不如用操作模式去描述这些细分场景。PPU 里面的电源模式和操作模式是为了理清 PPU 设计,与 UPF 里面的 power state 完全不是一码事,不要混淆(不要问我为什么会混淆 … )。
接下来慢慢扒一扒电源模式和操作模式。 PPU 支持的电源模式见下表,除了 ON/WARM_RST/OFF 是必须支持的,其它都是可选。大部分电源模式都是比较直观的,除了 OFF_EMU 和 MEM_RET_EMU 特别一点。
再来看操作模式,以下图为例,纵轴是电源模式,横轴是操作模式。绿色代表电源开启,黄色代表 retention ,红色代表电源关闭,网格代表复位,其中 RAM 可以分成两个部分,分别以及控制。也就是说 RAM 可以全开,可以全关,也可以开一半关一半,或者开一半而另一半 retention ,等等(是不是有点像前面提到的 CMN 的 SLC 例子)。比如在电源模式是 ON 的时候,如果模块全速工作,也就是全部 RAM 打开,操作模式为OPMODE_02;如果 RAM 开一半关一半(为了省电),操作模式为 OPMODE_01 ; RAM 全部关闭,只保留逻辑部分能正常工作,操作模式是 OPMODE_00 。相信有了这些讲解,大家都能看懂这张图
对于不同的电源模式下,操作模式的编码含义也不一样。有些电源模式没有操作模式,比如 OFF ,都已经关电了,就没必要再细分了。
PPU 的电源模式和操作模式编码如下,PSTATE 的低 4bit 代表电源模式,高 4bit 代表操作模式。
介绍完两种模式,一个自然而然的问题就是,模式间怎么转换?还是分开来说,电源模式的转换分为静态转换和动态转换两种。所谓静态转换,就是通过软件来设置电源策略(power policy ), PPU 按照设置来执行;
动态转换就是通过软件设置一个最小的电源模式,PPU 可以动态变换电源模式。前面说过,不管是Q-channel PPU 还是 P-channel PPU ,都支持电源模式,但是在电源模式转换上还是有一些不同,大家可以想想是为什么
作为输入信号,用于结合软件设置启动和控制电源模式转换。
在静态转换时,对于 Q-channel PPU ,除去ON 和 WARM_RST 之间,其它电源状态转换都要求 DEVACTIVE 为低;对于 P-channel PPU ,需要遵守优先级规则。
动态电源模式转换时,除了更改编程策略外,还可以通过更改电源模式 DEVACTIVE 输入来实现模式转换。在动态电源模式转换时,PPU 还提供一种 “ 锁定 ” 功能。具体的软件操作就不讲了,感兴趣的去看手册。
操作模式的转换只发生在特定的电源模式转换中。有些电源模式没有操作模式。
关于电源模式和操作模式的设定,系统控制器通过前面提到过的配置接口, PPU_PWPR ( Power Policy Register)这个寄存器来完成。有一些模式组合不被 PPU 支持,手册里有具体的描述。
重点再来看看 PPU 的中断, PPU 会在下列事件发生后产生中断,当然这些中断也可以通过事先写 PPU_IMR (Interrupt Mask Register)寄存器来屏蔽掉。
前面也提到过, PPU 与设备间的 LPI 接口类型决定了 PPU 的类型。如果是 Q-channel PPU ,可以配置有1-8 个 Q-channel 来连接多个设备;如果是 P-channel PPU ,那么只能配置 1 个 P-channel ,连接一个设备。说到这,不得不再唠叨一下 PPU 在系统中的用法了。 PPU 与设备间的控制信号有时钟,复位和隔离,关于电源控制部分(power switch 和 retention )则是在 PCSM 。在电源控制角度来说,控制模块的电源开关必然要控制这个模块的时钟和复位,但是反过来就不必须。所以,如果只用 PPU 做时钟管理,不考虑电源开关,在这种情况下,Q-channel 就足够了,而且一个 PPU 最好能够控制多个关联设备;如果是用 PPU做电源管理,且场景复杂的话,就必须用 P-channel 来通信,支持更多的状态,而且一个 PPU 只能控制一个模块,否则多个模块状态混在一起,其状态数量不可控了。PPU 与设备间的控制接口可以通过两种方式设置 delay ,第一种是在配置产生 PPU 的时候设置好,第二种是系统控制器在运行过程中写 PPU_DCDR
( Device Control Delay Configuration Register )寄存器。
对于不太大的 SoC ,全部的 PPU 可以全部直接挂在系统控制器下面; SoC 设计规模比较大的话,也可以 把 PPU 与被控制设备放在一起,必要的时候, PPU 的软件接口可以挂在系统总线上。
综上,PPU 的功能还是挺强大的,尤其是再考虑 PPU 级联方式,是能够胜任大 SoC 的电源管理工作的。
注:优秀验证学员随堂笔记,已经征求到学生的同意,会持续给牛友们分享!
大家看完记得 一键三连!多多支持
#项目##秋招的第一个offer,大家都拿到了吗##学霸笔记##IC验证转行##高频知识点汇总#