PPU (power policy unit)

news2024/11/23 18:54:09
写在前边
        最近在做低功耗验证,项目中涉及到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 的接口:

  1. 首先,要有系统控制器的配置通路,也就是要有一个寄存器访问接口,这个接口可能是 APB 或者其它的总线接口;
  2. 其次,PPU 要具备发送中断的能力,处理完一次电源管理事件后要能够通知给系统控制器,没有中断途径的话,系统控制器只能不断的去查询 PPU 状态,无疑会降低效率;
  3. PPU 与被管理的设备间需要一个通信接口,就是上图中的 LPI(Low Power Interface),要么是 Q-channel, 要么是 P-channel,取决于需要实现的具体功能是什么。如果 PPU 与设备间的接口是 Q-channel,那么这个 PPU 也可以被称作 Q-channel PPU;如果 PPU 与设备间的接口是 P-channel,那么这个 PPU 也可以被称作 Q-channel PPU。之所以要加以区分,是因为这两种 PPU 的配置是不一样的,且支持的模式也不一样,后面会讲;
  4. PPU 还会提供时钟控制,复位和隔离控制(如果需要实现电源关断)给被管理的设备,如果 PPU 只是辅助完成时钟管理,那么 isolation 是不需要的;
  5. 最后,就是与 PCSM 的接口,PPU 通过 P-channel 来告诉 PCSM 当前的状态,PCSM 根据 PPU 的状态决定何时控制电源关断,retention 控制(如果需要的话);
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 特别一点。

  • OFFlogic RAM 电源关闭,全部状态消失,对应的工作场景就是芯片下电停止工作
  • ONlogic RAM 的电源开启,对应的场景是芯片正常工作状态
  • WARM_RST,电源开启,但是 logic 处于复位状态,对应的场景是芯片某些模块刚刚完成上电启动,等待复位信号被释放,或者芯片工作过程中某些模块需要热复位,恢复到初始状态
  • OFF_EMUlogic RAM 的电源开启,但是电源模式是 OFF 状态,也就是字面意义的模拟 OFF”,可能的场景之一是,在芯片调试时,某些模块需要被置于 OFF 状态,但是又不能断电,否则这些模块不能被访问了
  • FULL_RETlogic RAM 处于 retention 状态
  • LOGIC_RET,logic 处于 retentionRAM 关闭
  • MEM_RETlogic 关闭,RAM 处于 retention
  • 其它的就不一一分析了 
再来看操作模式,以下图为例,纵轴是电源模式,横轴是操作模式。绿色代表电源开启,黄色代表 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 的电源管理工作的。

文章转自: ARM电源管理系列资料汇总(一) - ARM技术论坛 - 电子技术论坛 - 广受欢迎的专业电子论坛!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/714878.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

每周学点数学 2:概率论基础1

泊松分布、正态分布、二项分布 文章目录 1.概率论学习中的重难点2.主要工具介绍1. Python2. MATLAB3. R4. Octave5. Microsoft Excel6. 统计软件 3.理论内容概览(前两点)1. 概率2. 概率分布 注:本文适用于在在数学建模的应用中,回…

牛客网基础语法101~110题

牛客网基础语法101~110题😘😘😘 💫前言:今天是咱们第十期刷牛客网上的题目。 💫目标:对打印图案做到有手就行。 💫鸡汤:与其花时间应付以后不理想的生活,不如…

学习c++ Part02

学习c Part02 前言1.函数注意点:全局函数(默认函数)静态函数 2.预处理2.1 变量 3.头文件4.宏函数5.指针5.1 普通变量与指针变量建立关系:5.2 指针初始化5.3 指针变量的注意事项5.3.1 void 不能定义普通变量,void * 可以定义指针变…

SpringBoot源码解析

1.Spring Boot介绍,源码阅读环境搭建,插件安装 2.spring boot 源码解析2-SpringApplication初始化 3.spring boot 源码解析3-SpringApplication#run 4.spring boot 源码解析4-SpringApplication#run第4步 5.spring boot 源码解析5-SpringApplication#run第5步 6.spring boot 源…

springboot医院挂号小程序

医院挂号系统 springboot医院挂号系统小程序 java医院挂号小程序 技术: 基于springbootvue小程序医院挂号系统的设计与实现 运行环境: JAVA版本:JDK1.8 IDE类型:IDEA、Eclipse都可运行 数据库类型:MySql(…

在线教育场景下客户端实践与优化——RTC服务在线教育

在线教育场景下对提供稳定、高质量的音视频服务提出了非常高的要求。而不断推陈出新的课堂形式以及新技术的应用,使得好未来自研音视频SDK面临更多的挑战。 LiveVideoStackCon 2022北京站邀请到好未来音视频开发高级专家郭晓明介绍好未来自研SDK在工程化上所做出的努…

【编译、链接、装载十五】系统调用与API——printf源码分析

【编译、链接、装载十五】系统调用与API——printf源码分析 一、系统调用介绍1、什么是系统调用2、Linux系统调用3、系统调用的弊端 二、系统调用原理1、中断 三、linux下系统调用实现1、 strace 查看可知,printf调用了系统函数write2、gdb调试查看——printf3、gdb…

实践|随机森林中缺失值的处理方法

动动发财的小手,点个赞吧! 除了在网上找到的一些过度清理的数据集之外,缺失值无处不在。事实上,数据集越复杂、越大,出现缺失值的可能性就越大。缺失值是统计研究的一个令人着迷的领域,但在实践中它们往往很…

并查集的讲解

什么是并查集? --是一个森林;(由多颗树构成的) 并查集原理 在一些应用问题中,需要 将 n 个不同的元素划分成一些不相交的集合 。 开始时,每个元素自成一个 单元素集合,然后按一定的规律将归于…

springboot开启热部署

第一步引入spring-boot-devtools依赖 <!--热部署--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><scope>runtime</scope><!--默认false改依赖是否可以传递&…

【Servlet】如何使用 Servlet 编写第一个 helloword 程序

文章目录 前言一、创建 Maven 项目二、引入依赖三、创建目录四、编写代码五、打包项目六、部署程序七、运行程序总结 前言 各位读者好, 我是小陈, 这是我的个人主页, 希望我的专栏能够帮助到你: &#x1f4d5; JavaSE基础: 基础语法, 类和对象, 封装继承多态, 接口, 综合小练习…

transforms数据增强

在AI领域的模型训练中通常会遇到模型过拟合问题&#xff0c;通常采取的办法就是数据增强处理&#xff0c;例如在图像处理中&#xff0c;数据增强是指对原始图像进行旋转、缩放、剪切、翻转等操作&#xff0c;以扩大训练数据集的规模&#xff0c;提高模型泛化能力&#xff0c;降…

Gradio HTML组件详解

❤️觉得内容不错的话&#xff0c;欢迎点赞收藏加关注&#x1f60a;&#x1f60a;&#x1f60a;&#xff0c;后续会继续输入更多优质内容❤️ &#x1f449;有问题欢迎大家加关注私戳或者评论&#xff08;包括但不限于NLP算法相关&#xff0c;linux学习相关&#xff0c;读研读博…

【23-07-03:HTTP协议的结构学习】

目录 HTTP 请求的结构HTTP 请求的整体架构请求方法&#xff08;Method&#xff09;请求路径&#xff08;URI&#xff09;GET 参数&#xff08;Parameters for GET)协议说明&#xff08;Protocol&#xff09;头部字段&#xff08;Headers&#xff09;请求体&#xff08;Body&…

论文与专利查找和下载

例如我想查找和下载视频理解(video understanding)相关论文 路线大纲如下&#xff1a; 一、最主要方式&#xff1a; 大纲&#xff0c;蓝色都是有超级链接的可以直接打开: 第一步 谷歌搜索(英文) 学校的知网(中文)第二步 下载论文(谷歌学术--英文 学校的知网--中文)下载不了…

CMA

文章目录 前言概念功能启用CMA 内存的创建方式一、使用 cmdline方式二、使用 dts CMA 内存分配和释放实例&#xff08;dts 方式&#xff09; 前言 在嵌入式设备中&#xff0c;很多外设&#xff08;如摄像机、硬件视频解码器等&#xff09;需要较大的内存缓冲区&#xff0c;kma…

clickhouse日志表占用大量磁盘空间

clickhouse日志表占用大量磁盘空间 sql&#xff1a; SELECT sum(rows) AS 总行数, formatReadableSize(sum(data_uncompressed_bytes)) AS 原始大小, formatReadableSize(sum(data_compressed_bytes)) AS 压缩大小, round((sum(data_compressed_bytes) / sum(data_uncompresse…

<DB2> 《IBM DB2 备份恢复实用文档》(第一部分)

[TOC](《IBM DB2 备份恢复实用文档》(第一部分)) 1 理论 1.1 关于备份恢复说明 a、DB2数据库备份和恢复的数据都是已经提交落地在磁盘的数据 。 b、DB2数据库备份和恢复使用的日志都是归档日志。 c、只有开启归档日志&#xff0c;才能进行在线全备、在线增备。否则只能进行离…

基于单片机智能手环心率老人防跌倒心率体温 步数里程

功能介绍 以STM32单片机作为主控系统&#xff1b; OLED液晶显示心率体温步数等信息&#xff1b;通过按键设置心率、体温上限设置&#xff1b;当心率或者体温超过按键设置上限蜂鸣器进行声光报警提醒&#xff1b;通过wifi模块esp8266把数据发送到手机端进行显整个电路以5v供电&a…

Three.js卡通材质实现简明教程

继 Harry Alisavakis 令人惊叹的汤着色器之后&#xff0c;我想使用 Three.js 重新创建类似的卡通着色效果。 我从 Roystan 的卡通着色器教程开始&#xff0c;它是为 Unity 编写的。 在这篇文章中&#xff0c;我将把 Roystan 教程中概述的原则翻译成 Three.js。 下面描述的着色器…