低功耗总结

  • 一、理论基础
  • 二、低功耗设计和检查
  • 2.1 低功耗设计流程
  • 2.2 低功耗设计检查
  • 2.3 低功耗仿真



一、理论基础

  • CMOS电路中的功耗分为:静态功耗和动态功耗。
    静态功耗是由漏电电流引起的;
    动态功耗分为翻转功耗和短路功耗,翻转功耗是由0和1翻转所引起的功耗,而短路功耗则是由于PMOS和NMOS都导通所引起的功耗。
  • UPF(uniform power format)是业界被广泛采用的低功耗设计和验证的描述文件格式,在RTL代码中插入UPF指令,通常需要做的是定义电压域、定义电源的状态、定义对特殊信号的隔离保持以及寄存器的保持等等,在RTL仿真过程中添加UPF进行仿真,保证中电压域,隔离单元、寄存器保持等低功耗设计的准确性。
  • 所谓的低功耗设计是指:多电压域设计,实现过程中在原有功能逻辑基础上插入低功耗单元,如:Isolation cell,Level shifter,Retention register,Power switch等
  • 为了关断电源,需要在电源网络和电路之间建立一个电源控制电路,它们被称为电源开关(power switching cell),在需要关断的时,控制power switching cell将电路的供电关闭,否则打开,提供电源;
  • 由于电源关断之后,其输出信号就没有电路驱动了, 对于其驱动的电路来说,就会出现输入浮空的状态。为了解决这个问题,就需要在关闭电源的电路输出端添加一个额外保持电路,当其电源关闭后保持输出,而电源打开时,保持电路则表现的像一个Buffer,输出等于输入即可。同时,如果被被关闭电源的电路输入固定电压,也可能产生对地的电流,就需要一个特别的单元对该部分电流进行保护。这样的单元被称为隔离单元(Isolation cell)。一般来说,Isolation cell的输出部分有较大的电容负载,也就是说Isolation cell的延时将会比较大,对时序有一定的影响,是需要注意的。
  • 对于寄存器来说,如果断电,则原有的数据无法保存,重新打开电源后,就一定会出现原有的数据丢失的情况。因此可以为一些必须要保持数据的寄存器建立一个备份设备,电源关闭前,将寄存器的数值保存到备份设备上,电源打开之后从备份设备上将数据重新写入到寄存器中。这种设备叫做保存寄存器(Retention Register Cell)
  • 对于power swithcing cell, Isolation cell以及Retention Register celll,它们上电之后是不能关闭的,因此使用的电源也和正功能的不同,这些单元被称为常开逻辑单元(Always-on Logic cell)。

二、低功耗设计和检查

2.1 低功耗设计流程

架构设计确定电压域划分->designer负责power intern<1801>编写->验证人员完成low power verification
关于UPF的设计,大家可以参考《IEEE 1801》,本文在这不做详细介绍。

2.2 低功耗设计检查

CLP工具可以用作低功耗UPF的检查。目前来说,建议新用户使用UPF2.1来表述power intent,对于UPF CLP的基本脚本如下:

set lowpower option -local_constants -no_use_strategy_location_as_hierarchy
##RTL check
set lowpower option -native_1801 -analysis_style pre_syn
##post-syn check has inserted lp cells
##set lowpower option -native_1801 -analysis_style post_syn
##P&R netlist has pg connection
##set lowpower option -native_1801 -analysis_style post_route

read library -liberty -lp <*file....>
analy
analyze library -lowpower
read design -define SYNTHESIS -merge bbox -lastmod -noelab -sv09 -f rtl_file.f elaborate_design -root XXX -rootly
run library check -used

read power intent <power spec> -1801

上述脚本中set lowpower option,用于指定power intent是CPF/UPF/1801,用于指定分析时针对哪个阶段的设计,用于指定constant signal的power domain信息等。其他option请参考clp user guide

运行以下脚本:

lec -lp -verify -gui -1801 -dofile qc_presim.do

建议使用GUI来check clp的结果,然后点击类似电池的图标(1801 Rule Manager),如图:

android低功耗流程 低功耗下载_寄存器

如上图所示,工具将所有的violation归类,绿色的表示没问题不用关注,红色的表示有violation需要特别关注,黄色的表示有warning一般也需要关注。
点开其中一个violation,右键直接点report rule check,就能够得到该violation的详细信息,同时还可以右键查看schematics,去追电路。
在debug过程中,基本上用report lowpower information和report crossing path这两条命令就可以解决大部门的问题。

2.3 低功耗仿真

完成upf文件的编写和检查之后,就可以在仿真case中添加电源的上电过程了,使用$supply_on函数给相应的VDD上电($supply_off函数可以用来掉电),然后,将UPF添加到仿真命令中,即:
irun -lps_1801 xxx.upf -lps_assign_ft_buf -lps_iso_verbose
其他仿真工具vcs、ncvlog等也可以。
相关option解释

options name

describe

-lps_1801 filename

指定符合IEEE1801标准的UPF文件

-lps_assign_ft_buf

指定assign赋值被当做buffer对待,而非默认的wire,好处是从always_on domain进入和穿过的power_down domain的信号被force成x,方便debug

-lps_const_aon

对处于power_down domain并且直接和always_on domain相连接的tie_low和tie_high constant,不使能corruption功能,默认是不使能该功能的

-lps_enum_rand_corrupt

对于用户定义的enum类型数据,在电源关断后,随机从枚举列表中选择变量值为变量值,该命令跟-lps_enum_right,-lps_implicit_pso等类型

-lps_iso_verbose

使能isolation的log功能,一般需要加上

-lps_verify

使能自动低功耗检查:断电顺序(隔离->复位->断电)和电源打开过程(上电->解复位->解隔离)

注:其他的option请参考low-power simulation guide或者直接查看相关仿真工具手册

仿真之后,verdi查看结果如下:

android低功耗流程 低功耗下载_android低功耗流程_02

从仿真中可以看出,中间count不定态的部分就是VDD掉电的部分,持续一段时间后,又重新上电,恢复了。