1、常见的低功耗实现方法
- 时钟门控
- 门级功耗优化
- 多电压域方法
- 电源门控
- 多电压域+功耗控制+寄存器retention技术
- 低电压standby
- 动态电压频率调节
2、低功耗技术介绍
2.1时钟门控
通过增加时钟信号使能开关,来控制不需要使用模块的时钟关断,从而达到降低功耗的目的。使能开关直接和时钟信号相与,会产生毛刺,所以,使能开关和时钟需要一个标准单元来做运算,防止毛刺的产生,比如使用CRG来生成时钟。
2.2门级功耗优化
1、路径平衡:不同路径信号传输延时带来不必要翻转,产生大量动态功耗,通过增加缓冲器的方式,让不同路径信号延迟修正到一致,让同时到达下一级器件,减少毛刺带来的功耗。
2、逻辑级优化:逻辑门尺寸优化、引脚重分配、重排序和重映射
2.3多电压域设计
降低动态功耗:使资源需求不同的模块按需使用不同的电压域,从而降低功耗。
2.4电源门控
通过电源管理单元来自动对一些不适用的芯片模块进行电源关断处理,从而达到降低功耗的目的
2.5寄存器retention技术
通过电源管理单元来自动对一些不适用的芯片模块进行电源关断处理,从而达到降低功耗的目的,同时引入retention寄存器,使用retention寄存器保存掉电前的状态,掉电模块再次上电时,经过几个周期,掉电模块可以恢复到掉电前的状态
2.6低电压standby
某个模块进入sleep状态时,为了保证芯片可以工作,会使用一个低电压给小cpu控制单元来供电,当需要该模块全速工作时,便可以使用这个低电压控制的cpu单元来唤醒模块工作
2.7动态电压频率调节
使用一种自适应电压调频技术,降低系统功耗。
功耗公式:P = P动态 + P静态 = C*V^2*F + I *V
DVFS:
动态电压频率调节,通过调整工作电压和时钟频率,降低功耗。(升频先升压,降频后降压)
电压调节:芯片电源管理模块会集成电源选择和多级电压输出,通过控制电源选择开关来完成电压调节。
时钟频率调节:主要时同时时钟生成器件,对时钟进行分频或者升频的方式来实现
DVFS挑战:时序收敛设计复杂度增加和工作负载预测难
DVS:固定电压-频率 对应点来调节电压
AVS:一定范围内自由调节电压数值
AVFS:原理和DVFS一致,差异点就是芯片集成一个自动算法来实现调频调压
3、低功耗系统
3.1clock gating
3.2power gating
3.2.1power gating组成
典型power gating设计架构
- PGC:控制芯片中模块电源何时关断并控制给特殊的cell(如retention 寄存器)输出必要的使能信号
- PSF:实现电源关闭的逻辑单元,后端实现并按照一定规则摆放。
- Always-on module:电源需要保持常开的module
- Isolation cells:隔离单元,需要加在关断电源的模块到always-on 模块方向的信号上,主要是防止产生不定态信号传输。
- Retention DFFs:特殊的寄存器,保证电源关断情况下,数据不丢失
3.2.2电源关断方式
关断VDD或者关断VSS,通常以关断VDD为主。
3.2.2 power switch cell功能
类似开关,并不是通过接触来实现开关,而是一个cmos电路,通过控制栅极的方式来控制电流是否通过,来实现开关
3.2.2 isolation cell功能
信号从一个模块输入到另一个模块,输入模块电源关断,输出信号可能会出现不定态,对其他模块造成影响,隔离单元功能是让输入信号在电源关断以后,稳定输出高点位或者低电位
3.2.2 retention寄存器
电源关闭,但是电源关闭前的数据不想丢失,就需要使用retention寄存器来保存数据。Retention寄存器有两个不同的电源域,分别给master和slave锁存器供电,当master电源需要断电保存数据时,会发送一个save或者retain信号给retention register,将master的数据锁存到slave,slave通过always-on电源来供电,保证slave电源常在,需要唤醒电源关断模块时,需要从slave中恢复断电前数据。
3.2.2 retention寄存器
3.3 power gating设计/验证实现
3.3.1 设计对电路进行低功耗约束
Power gating主要是使用vcs自带的UPF工具,通过写TCL脚本的方式,来实现电压域的指定,隔离单元的插入,以及端口的链接等。
UPF工具,主要实现以下几个步骤:
- 设定实施约束的层次:指定top层级,约定命令生效范围
- 设置电压域:主要是为不同模块指定电压域,划分电压域
- 描述电压域的电源网络:描述输入电压以及输入电压的链接关系
- 创建power switch:主要是指定哪个电压域是输出电压域,哪个电压域是输入电压域,个人认为,个人单元是要插入关断时钟的输出端和下一电压域的输入端,所以指定输入输出,是方便后续找到插入隔离单元的位置。
- 指定电压值:指定电源的开关状态,以及常开状态的电压值。
- 电源状态表描述:
- 设置retention快速恢复被关断时钟域的状态:
- 使用隔离单元隔离开/关时钟域。
- Level shift cell处理不同电压域之间的信号传递。
针对上述几个UPF工具做power gating的脚本实现,有一个很好的网上实例,参考链接如下:
1、UPF设置电压域,设置隔离单元和retention参考
https://zhuanlan.zhihu.com/p/397526396
3.3.2验证进行低功耗验证
网上找了下低功耗该如何验证的资料,以及找公司搞过低功耗验证的同时请教了下,低功耗的验证相对来说比较程式化,做一遍基本就知道怎么做了,我觉得验证主要是要能看懂设计或者后端给验证提供的UPF文件,因为低功耗的debug,主要是对着波形和UPF文件对约束(是否有其他调试方式,还要再找找资料),看是否时钟域在该关断的时候,正确关断,隔离单元是否按照预期固定输出特定输出给未断电模块。
3.3.2.1 VCS自带低功耗仿真实例
VCS自带低功耗仿真的示例demo,主要参考下面这个链接看下,没必要抄过来
VCS自带的UPF低功耗仿真demo介绍_vcs自带的upf低功耗真demo-CSDN博客
3.3.2.2低功耗仿真
低功耗仿真分为动态功耗仿真和静态功耗仿真。
动态功耗仿真主要是使用VCS自带的native low power(NLP)支持待UPF的PA仿真。
静态功耗仿真主要是使用VCLP工具来进行。
动态功耗仿真:
- 使用VCS和VERDI的UPF低功耗仿真,首先需要设计/后端提供UFP文件,描述功耗意图。
- Vcs编译选项中指定upf文件,吃进upf文件
- 在tb中进行电源开关
- 还需要按照电源关断恢复的常见,进行电源恢复的模拟
完成上述验证环境继承,可以按照demo实例,进行仿真编译dump波形
通过verdi打开波形,可以加载power domain、net、隔离单元等信号到波形中进行分析
使用VCS和Verdi的UPF低功耗仿真链接如下:
链接1:
使用VCS和Verdi的UPF低功耗仿真流程_upf仿真-CSDN博客
链接2:
VCS带UPF的RTL低功耗仿真介绍_upf仿真-CSDN博客
- 静态功耗仿真:
参考链接:
Synopsys推出一款低功耗静态规则检查工具—VCLP-电子发烧友网
总结:低功耗仿真,主要是要关注时钟关断与恢复情况、隔离单元的隔离场景是否有不定态输出,retention寄存器处理状态恢复场景,按照动态功耗公式,降低功耗可以通过降压和降频实现,所以也要关注动态切频(低且高、高且低)是否切换正确。动态切压是否ok。
3.3.2.3低功耗仿真
上面说的低功耗仿真,都是使用仿真工具得到的一个仿真预期值,实际的功耗仿真,是需要通过上板测试才能拿到实际值。
请教做过的同事,上版测试还需要使用万用表等工具,测试芯片中相关引脚,是否按照预期,引脚的电压被关断,针对切频切压的常见,还需要测试电压是否按照预期切换,通过实际上版,还需要计算实际耗能情况。
浅析芯片功耗的控制方法与验证方式 - EDA/IC设计 - 电子发烧友网
3.4 项目实战
在实际工作中,低功耗方案有简有繁,在V2项目中,支持clk_gating和power gating,使用场景都比较简单。
3.4.1 clk_gating场景
V2项目中,转发流程中,需要bypass的模块,均通过clk_gating来关断对应模块的时钟来控制模块不工作,对报文直接bypass处理。还有不需要功能支持的模块,就会直接power gating处理,比如安全模块和rdma功能模块。
何时进行时钟关断:
主要是以中断方式触发,上行端口收到LPI序列时,将会进入低功耗模式,上报中断给EMP,同时将low_power信号拉高,模块在low_power信号拉高期间,等待端口无数据输入,便会进入芯片整体低功耗,topC会将部分module进行时钟关断处理。
下行端口空闲等待事件内无下行或者换回报文到达,自动进入低功耗模式,同时发送一个LPI序列给对端,让对端也进入低功耗模式
本端需要进入低功耗状态时,pcie状态会协商到L2,链路状态置为D3,同时报中断给EMP,EMP来决定是否进行pcie的时钟关断,进行相关子系统的整体时钟关断,或者电源关断,同时配置寄存器让eth进入WOL检测状态,等待远端唤醒。
低功耗模式下,eth子系统处于WOL检测状态,一直等待magic包到来,进行系统唤醒。
系统唤醒时,EMP会配置相关寄存器,打开时钟,同时退出WOL检测状态