电源管理入门-芯片设计中的电源管理介绍

电子说

1.2w人已加入

描述

1. 关于PCSA和SCP

芯片设计

SCP直接控制SoC的电源时钟,而AP通过硬件和软件接口协同管理。

芯片设计,要完成整个芯片的电源管理,需要软硬件结合。一般上层软件部分交给操作系统(Linux和Android等);下层软件SCP固件(Firmware)实现,其由MHU,PPU这些模块构成,当然Core也需要有相关的硬件支持。这也就是所谓的分层管理机制。

在PCSA里面,主要规范的是逻辑实现,物理实现部分并没有在文档中过多的体现。换句话说,PCSA是给芯片架构师前端设计师看的。至于物理实现,遵循S家和C家的流程。

在SCP中完成SoC的功耗管理(当然,SCP不仅仅完成这个工作)。为此,ARM又定义了一大堆的接口,组件和协议来配合,统称为“功耗控制框架(power control framework,以下简称PCF)”。

芯片设计

上层的应用处理器(application processor,简称AP)可以通过软件来给SCP发起服务(service)请求,左边Agent我们可以理解为其它子系统或者IP。作为中间层的SCP是由一个M系列的处理器构成的子系统,负责运行固件软件(firmware),向上可与AP通过设定好的接口/协议通信,接收服务请求,向下控制硬件单元,监控传感器,控制时钟和复位,管理电源等等。有了SCP,就能把一些任务从OSPM中抽离出来,更好的把软件和硬件隔离,增加了灵活性和安全性。

芯片设计

上图中的电源管理软件协议栈主要分为两部分,AP的功耗管理设备的功耗管理。其中AP的功耗管理又分为idle管理DVFS两部分。首先看idle管理,当AP处于idle状态时,OSPM可以根据需要关断时钟,下电且retention,或完全断电等多种操作。

此时要保证断电的内核仍然可由操作系统进行调度,并且可以被中断唤醒。还有另外一种技术hot-plug。在这种情况下,AP核心将从操作系统可用于调度的池中移除。通过这种技术,内核被关闭,所有中断和软件线程被迁移到其它内核。这种技术既可以按需求比例使用,也可以在计算能力因功耗或散热受到限制的情况下使用。

芯片设计

根据ARM的定义,功耗控制框架(PCF)是标准基础设施组件、接口和相关方法的集合,可用于构建SoC功耗管理所需的基础设施。标准的基础设施组件包括电源、时钟和接口组件。上图中的LPI(low power interface)主要是指ARM的Q-channel和P-channelPPU(power policy unit)是一个硬件组件,支持SCP通过软件接口编程。

对于不同的设备,可能需要的电源控制场景不尽相同,比如有的模块可能只做时钟关断(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。

芯片设计

从上图可以看出,SCP是一个完整的小系统,该有的组件一个都不少。首先,SCP里面要有一个处理器,并且要具备足够的处理能力。比如要能够管理AP在idle状态下的功耗;要能支持中断,以及中断优先级排序;要支持调试功能;要能够可信操作,等等。既然有了处理器,那就要有ROM,用于安全启动,还要有RAM,运行固件时需要。

如果要支持DVS,就要有图中的Voltage Regulator Control单元。为了配合DFS,还要有时钟控制单元,用于管理PLL以及输出时钟信号。Messaging interface适用于OSPM和SCP之间通信的接口,常用的有mailbox和doorbell两种方式。关于AP与SCP通信,有一套完整的协议来支持

芯片设计

PPU是为了控制SoC电源域用的,具体的数量和位置可以根据实际需要来定,比如可以做成分级式的或者分布式的。首先,PPU要提供一个配置接口给SCP,用于功耗策略控制和配置,目前用的是APB。其次,PPU与设备之间的控制接口,包括低功耗接口(low power interface,简称LPI),若干组Q-channel和一组P-channel,还有时钟/复位控制。最后,还有一个与功耗状态机之间的接口,P-channel。

PPU支持的power mode如下,其中ON/OFF/Warm Reset是必须支持的,其它备选。各种mode之间的切换,PPU配置,寄存器说明等细节请参考PPU的文档。

芯片设计

芯片设计

电源控制部分和时钟部分类似,就是多了一个上面提到的PPU。多提一句,PPU可以与被控制部分放在一起,也就是分布式设计

芯片设计

Cluster的上电过程如下上图,图中的delay取决于具体设计需要:

SCP发出唤醒;

SCP拉低ACINACTM或SINACT;

SCP对PPU操作:

1)     PPU打开cluster的电源开关

2)     PPU拉高ISOLATEn,无效isolation cell

3)     PPU拉高CLKEN,使能clock gating

4)     PPU拉低RESETn,使cluster进入复位

5)     PPU发出Q-channel静止退出的请求

6)     PPU拉高RESETn

7)     PPU等待Q-channel握手返回

8)     PPU发中断给SCP9)     SCP拉低AINACTS

关于SCP的系统启动:

芯片设计芯片设计

2. 关于PSCI和SCMI

芯片设计

PSCI(Power State Coordination Interface),翻译一下就是“电源状态协作接口”。从名字就能直观看出来,PSCI是一套电源管理的标准接口,可用于操作系统在ARM设备上以不同权限级别监控管理电源。

PSCI提供一套API来协调电源管理,如下:

PSCI_VERSION:可以调用此API得到当前PSCI的版本信息;

CPU_SUSPEND:OSPM调用此API使处理器核进入低功耗模式;

CPU_OFF:此API用于hotplug,从系统中动态移除某个处理器核。被CPU_OFF移除的处理器核只能通过CPU_ON再次加载。与CPU_SUSPEND不同的是,这个接口函数不需要返回值;

CPU_ON:此API用于动态加载处理器核;

AFFINITY_INFO:此API允许调度方查询亲和实体(affinity instance)的状态;

MIGRATE:用于将受信任的操作系统(trusted OS)迁移到另一个处理器核,从而原处理器核可以调用CPU_OFF关闭电源;

MIGRATE_INFO_TYPE:允许调用方识别受信任操作系统中存在的多核支持级别,通过返回值可以判定受信任操作系统是否必须运行在单一处理器上,是否支持迁移;

MIGRATE_INFO_UP_CPU:指示受信任的操作系统当前的位置;

SYSTEM_OFF:系统关闭;

SYSTEM_RESET:系统冷复位;

SYSTEM_RESET2:此API是对SYSTEM_RESET的扩展;

MEM_PROTECT:此API确保内存在交给操作系统加载程序之前被重写,从而提供防止冷重启攻击的保护;

MEM_PROTECT_CHECK_RANGE:此API用于检查某段内存范围是否受MEM_PROTECT保护;

PSCI_FEATURES:此API允许调用方检测已实现的PSCI函数及其属性;

CPU_FREEZE:此API将处理器核设置于低功耗状态(依赖具体设计实现)。与CPU_SUSPEND和CPU_DEFAULT_SUSPEND不同,中断不能唤醒该处理器;与CPU_OFF也不同,不需要迁移;

CPU_DEFAULT_SUSPEND:此API将处理器核设置于低功耗状态(依赖具体设计实现),与CPU_FREEZE的调用参数不同;

NODE_HW_STATE:此API允许直接从电源控制器或电源控制逻辑确定节点的电源状态。与AFFINITY_INFO不同,此API返回电源状态的物理视图;

SYSTEM_SUSPEND:此API相当于CPU_SUSPEND到最深的低功耗状态,但实际系统中有可能实现比CPU_SUSPEND更深的低功耗状态,比如支持RAM挂起;

PSCI_SET_ SUSPEND_MODE:此API允许设置CPU_SUSPEND用于协调电源状态的模式;

PSCI_STAT_RESIDENCY:此API返回自冷启动后平台处于某个电源状态的时间;

PSCI_STAT_COUNT:此API返回自冷启动后平台使用某个电源状态的次数;

芯片设计

SCP和AP之间有一个通信接口。这个通信接口在硬件上可以通过共享存储和MHU(Message Handling Unit)实现;在软件上,通过定义一组通信协议来实现。关于MHU需要查硬件寄存器手册。

芯片设计

SCMI(System Control and Management Interface)。SCMI是用于系统管理的一组独立于操作系统的软件接口,包括以下几个方面:

电源域管理

性能管理

时钟管理

传感器管理

复位管理

电压域管理

芯片设计

关于传输,可以用共享存储方式来保存AP与SCP之间的消息。通信的流程可以采用中断doorbell的方式,也可以采用轮询的方式去主动查询消息通道的状态。采用中断方式的通信流程如下图:

芯片设计image.png

3. 关于芯片SoC设计中的一些要点

SCP子系统一般是在Always-on区域,也就是休眠的时候不下电,除非整机关机才下电。

SCP有独立的M核硬件,所以需要设计中断RAM内存映射区域的使用

SCP会通过I2C连接PMIC硬件对系统中其他硬件模块上电,一般按照电源域为单位,按一定顺序上电

SCP通过Mailbox跟AP或者其他异构核子系统通信,软件上使用SCMI+SMT协议,硬件上使用MHU或者PL320,主要就是为了触发中断+共享内存

设计SCP的硬件接口,例如I2C四根线,占四个接口

低功耗主要就是休眠和省电模式的设计,需要分析出来耗电多的子系统进行关闭,一般通过PMIC电源开关,clock的开关,硬件模块自己支持的低功耗模式设置等

对于A核的休眠需要注意DDR中的数据,可以有DDR PHY硬件控制进入retention mode,一些开机DDR训练参数输出保存到Always-on的RAM中去。







审核编辑:刘清

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分