随着移动设备的兴起和芯片工艺的提升,功耗成为近年来芯片设计越来越关注的话题。对功耗关注度的提升大致可以从两方面进行分析,用户角度和芯片设计者角度。
从用户角度来看:
(资料图片)
如今手机、PAD、TWS耳机等便携式设备在生活中扮演着重要的角色,芯片功耗越大,对于同等的电池容量意味着使用时间越短;如果使用时间过短,对于现代人们的出行、支付、交流等方面带来不便,会使我们日常生活的安全感降低。芯片功耗越高,手机等便携式设备消耗的能量越多,进而产生的热量也会越多。发热越严重,热噪声越大,就会影响器件的正常工作,导致手机运行速度变慢等问题,会大大影响用户。
从芯片设计者来看:
随着工艺的进步,芯片内部集成电路的密度越来越高,运行速度越来越快,而片上的连线越来越细,片上的供电网络必须将电力以更少连线资源送至每个单元,这就要求芯片设计者在设计阶段减少功耗的需求。另外如果不注意低功耗设计,还会导致后期成本增加,例如,芯片低功耗设计不好,发热量就可能增加,在封装的时候,就需要考虑怎么给芯片进行散热,从而增加了封装的散热成本。成本的增加还会进一步导致芯片的市场竞争力降低,所以对芯片进行低功耗设计是十分必要的。
对芯片进行低功耗设计时要首先搞清芯片功耗的来源,这样才能有针对性的进行控制。从功耗的种类来看,功耗主要来自三个地方,如下图所示。
在数字CMOS电路中,对负载电容进行充放电时消耗的功耗。比如对于下面的CMOS非门中:当Vin = 0时,上面的PMOS导通,下面的NMOS截止,VDD对负载电容Cload进行充电,充电完成后,Vout的电平为高电平;当Vin = 1时,上面的PMOS截止,下面的NMOS导通,负载电容通过NMOS进行放电,放电完成后,Vout的电平为低电平。这样一开一闭的变化,电源的充放电,就形成了开关功耗
开关功耗Pswitch的计算公式如下所示,其中VDD为供电电压,Cload为后级电路等效的电容负载大小,Tr为输入信号的翻转率
短路功耗也称为内部功耗,短路功耗是因为在输入信号进行翻转时,信号的翻转不可能瞬时完成,因此PMOS和NMOS不可能总是一个截止另外一个导通,总有那么一段时间是使PMOS和NMOS同时导通,那么从电源VDD到地VSS之间就有了通路,就形成了短路电流。
短路功耗Pshort的计算公式如下所示,其中Vdd为供电电压,Tr为翻转率,Qx为一次翻转过程中从电源流到地的电荷量。
在CMOS电路中,静态功耗主要是漏电流引起的功耗,漏电流有下面几个部分组成:
PN结反向电流I1(PN-junctionReverse Current)源极和漏极之间的亚阈值漏电流I2(Sub-threshold Current)栅极漏电流,包括栅极和漏极之间的感应漏电流I3(Gate Induced Drain Leakage)栅极和衬底之间的隧道漏电流I4(Gate Tunneling)静态功耗的计算公式如下所示,其中Vdd为供电电压,Ipeak为所有泄漏电流之和,除了式中列出的影响因素外,温度对静态功耗也有显著影响,一般静态功耗会随着温度的升高呈指数上升。
从第二节的描述中可以看出芯片的功耗的大小主要与供电电压、运行频率和电路负载相关,针对这些影响因素芯片设计者主要采用了如下办法:
在芯片中翻转率最高的路径就是clock path,clk path上的功耗消耗会占据到整个芯片功耗比例的40%甚至更多。clock经pll 和预分频器输出后,后面会驱动成千上万寄存器,并且为了增加clock的驱动能力,在clock path上会插入许多buffer,而clock 每个cycle翻转就会带动整条path上所有cell 翻转。如果当某一个subsys 或者module 不工作时clock仍在toggle,那么就会产生很大的功耗浪费。如果能够根据系统或者任务的需要对clock 做动态的关断就能极大地节省功耗消耗,这种对clock 进行关断的技术就是clock gating(时钟门控)。如下图,clock gating 技术主要就是在原来的clock path上加入enable 信号,使clock 在满足一定条件后才能往后传输。
根据clock gating 所加的层次,大体可以分为三个类型:
粗粒度门控:这种clock gating主要由架构师决定,他们根据整个soc 的工作情况来决定在那些pll 或者预分频器的输出端添加门控逻辑。中粒度门控:这种clock gating由模块设计师决定,他们根据模块的功能决定是否在模块外部或者模块内部的子模块处添加门控逻辑;细粒度门控:这种主要是面向寄存器级别,可以使寄存器idle时将寄存器前端的clock 关掉。这种设计的优势是即使模块正在工作,模块内部某些处于空闲状态寄存器的clcok 也会被关掉,进一步节省模块内部的功耗。这种gating对designer 的编码有一定要求,当designer 按照如下图所示模式进行硬件编码时,综合工具会自动在插入门控逻辑。Clock gating 方式可以分为auto gating 和force gating,auto gating 为系统正常工作时的方式,门控单元根据自己所负责的cell/module/subsys的工作状态动态的关断和打开clock;force gating多用在调试阶段或者作为备用方法,强制关掉或打开某个clock观察其运行情况或者功耗变化。
DVFS技术即dynamicvoltage dynamic frequency scaling,动态电压频率技术,是系统根据负载的变化来动态地调整电压和频率的技术。如果一个电路能够估算出它必须做多少工作才能完成当前的任务,那么理论上讲就可以将时钟频率调低到刚好能适时完成该任务的水平。时钟频率和电压紧密相关,降低时钟频率意味着可以同时降低供电电压。频率和电压同时降低,功耗就大大降低了。
DVFS 一般流程如下:
首先计算系统当前的负载,这个负载可以软件统计得出也可以由硬件计算;根据负载计算当前系统需要的频率并进行设置;根据频率选择相应的电压进行设置。DVFS技术可以通过软件和硬件的方式实现,但电路中必须有电源管理模块和时钟管理模块。真正硬件实现的dvfs 结构比较复杂,包括dvfs trigger 模块/dvfs map 模块/votage compare 模块/arbitration 模块等。
由第二节的描述可知,动态功耗和电压的平方成正比,静态功耗和电压成正比,所以降低电压对功耗的改善会很明显。multi-voltage(多电压域) 设计思想就是让SOC内的每个模块/IP根据自己的需要,工作在不同电压域,这样可以减少所有模块共电压域造成的功耗浪费。
信号在不同电压域间进行传输时,可能会存在驱动不足或者过驱动等问题。例如当一个低电压域的信号去驱动高电压域的cell时,欠驱动力的信号不仅增加了输入端的上升时间和下降时间,增加短路电流的持续时间,还会使时序变差。为了解决这个问题,需要在不同电压域之间添加level-shifter(电平转换器),它可以实现将某个电压域的输出电平转换成另一个电压域可以识别的逻辑电平。
多电压设计技术可以分为三种方式:
各电压区域有固定的电压,这种方式不能够根据自己的负载调节电压,如图(a)所示 ;各电压区域具有固定的多个电压,可以根据负载调节电压,但必须由软件决定选择哪一个电压,如图(b)所示;自适应的方式,各电压域具有可变的,可以根据负载调节电压,可以由软件或者硬件决定选择哪一个电压,如图(c)所示。当芯片内部的模块/IP不工作时,即使我们把输入端的时钟和数据全部隔离,仍然会有部分漏电存在。工艺提升使芯片内部集成的晶体管数量越来越多,漏电功耗在芯片整体功耗的比重也越来越大,让设计师不得不关注这部分漏电。power gating(电源门控)技术是指将芯片中某个区域的供电电源关掉,断电后,芯片进入深度睡眠模式,其漏电功率很小,只剩power switch 的功耗。
实现这种技术需要isolation cell(电源隔离单元) 和retention cell(保持寄存器)的支持。isolation cell主要使模块的输入/输出在电源关掉时信号保持为常数,从而避免信号悬空或者胡乱toggle;retention cell可以在关掉电源时将寄存器的状态保留下来,为subsys或module 的唤醒保留必要的初始数据。
powergating有两种方式:auto shutdown 和force shutdown。Auto shutdown 是系统正常工作使用的方式,芯片ALL ON 区域的PMU 单元会监测个subsys内各module的运行情况,当各module 处于idle 状态时,subsys就可以进入深睡状态;一旦监测到subsys内module的工作请求,subsys 就会自动退出睡眠状态。Force shutdown 一般用在调试阶段,也作为auto shutdown 模式失效时的备用方法。
如第4小节所述,工艺的进步虽然使芯片的晶体管(门)数增多、供电电压变低、尺寸减小,但却使静态功耗的比重越来越大。据统计在90nm或以下的工艺,静态功耗要占整个设计功耗的20%以上,这就需要对功耗作更深层次的优化。工艺库中存在着不同的cell类型,cell 类型的速度、电压和漏电可以用下表表示:阈值电压越高,cell速度越慢,功耗越小;反之阈值电压越低,cell速度越快,功耗越高。
多阈值电压设计的策略是:对于性能要求高的模块,或者频率比较高的部分,采用阈值电压比较低的cell,以减少单元门的延迟;对于性能要求较低的模块,或者频率较低的部分,多采用阈值电压比较高的cell,让功耗更低。通过这种方法,可以实现在同一块芯片上,根据性能和功耗的不同要求而调整cell的使用,从而避免在不太重要的功能上浪费过多的功耗。
这一部分工作中没有参与过,只简单介绍一下为了实现低功耗,布局布线的规则:
对于设计中翻转活动很频繁的节点,采用低电容的金属层进行布线;使高翻转率的节点尽可能地短;对于高负载的节点与总线,采用低电容的金属层;对于特别宽的器件,采用特殊的版图技术,以得到更小的漏极结电容;在有些布局布线工具中,可以将功耗作为优化目标来生成时钟。四、功耗验证方式为了验证功耗的大小,在芯片tapeout之前与tapoout 之后有不同的验证工具。在tapeout 之前使用工具进行仿真验证;tapeout之后使用精密电流源精密电流源进行实测分析。
一般使用Spypower,如下图所示。但是spypower里面自带综合工具,不需要输入netlist文件,可以在设计前期应用于功耗分析。
由于spypower是利用自身的综合引擎进行自综合,所得功耗数据与PTPX相比,误差较大,一般是利用spypower看不同版本间相对数据的变化。Spypower虽然在功耗准确度方面较差,但它提供了丰富的功耗优化数据可以用于功耗优化,如下图所示。Cgr可以用于观察添加时钟门控寄存器的比例;cge 可以用观察时钟门控的效率;rodf和rode可以用于观察寄存器输出端与时钟输入端的比值,进一步检验插入的clock gate 是否合适。
当然,前仿真还有power artist工具,功能类似,本文暂不展开。
后仿真一般使用较多时PTPX,PTPX 是芯片设计公司普遍使用的功耗仿真工具,不仅仿真精度高,而且产生的功耗数据丰富,便于进行功耗分析。使用PTPX 工具不仅可以产生一段波形的平均功耗,还可以产生每一时刻的瞬时功耗;不仅可以产生基于block的功耗,还可以报告出block内部 每一个层次的功耗,甚至是每个cell的功耗;不仅可以产生整体的功耗,还可以按照memory、clock、pad等分类产生功耗。
PTPX工作流程如下图所示,用户提供lib、netlist、activity和parasitic文件,然后PTPX工具按照一定的算法对各种数据进行统计和计算,最后产生功耗报告。各种文件的作用如下所述:
tech library:工艺库文件,里面包含着各种cell在不同状态下的功耗信息。netlist:门级网表电路,通过综合得到,里面包含着芯片中使用的cell 类型。parasitic:包含设计中连线等寄生参数,比如寄生电容、寄生电阻,这个一般是后端RC寄生参数工具提供。switch activity:包含设计中每个节点的开关行为情况,比如说节点的翻转率或者可以计算出节点翻转率的文件,可以为saif、vcd和fadb文件。虽然不同的功耗类型,PTPX的计算公式不同,但都是通过从netlist文件中确定使用的cell 类型,从activity 文件中确定cell的状态,从parasitic文件中确定对应状态的负载大小,然后再去lib 文件中查找cell在当前状态下的功耗,最后将所有cell的功耗相加。
拿leakage的计算举例说明,cell的leakage 在工艺库中描述如下,其中Leakage_power_unit标示leakage power的单位;cell_leakage_power标示固定的leakage power值,如果library里没有该变量的定义,或者该变量是个负值,工具会用default_cell_leakage_power的值,如果default_cell_leakage_power也没有指定,则用default_leakage_power_density的值乘以该cell的面积来计算得出一个leakage值,如果这三个变量都没有定义,则leakage的值为0;
leakage_power()这一部分就是用来定义跟输入状态相关的leakage power,其中"when"用于定义输入的状态,如果某种状态没有定义,则用cell_leakage_power定义的值来计算leakage;power_level用于多电压cell中指定是跟哪个电压相关的leakage power。
单个cell leakage power计算公式如下,其中K表示cell 包含的state数量;Pstate_leakage表示cell在当前state的功耗大小;probability表示每种状态的占比。PTPX工具就是按照如下公式逐个统计cell的功耗,最后相加。
芯片tapout之后,功耗测试主要依靠精密电流源进行,将精密电流的输出端连接芯片的供电端,就可以得到芯片工作时的电流。精密电流源具有如下特点:
精度高,拥有三种测量范围可编程接口,方便自动化测试可以显示电流图,方便进行功耗分析具有trigger 功能,能够抓住具有明显特征的波峰拥有多个输出通道,可以测量多个powerrailUTF(Unified Power Format),其作用是把功耗设计意图(powerintent)传递给EDA工具,从而帮助实现物理设计。这就类似于综合时的约束,是把跟时序相关的设计意图传达给EDA。说简单一些,UPF就是一些tcl命令,系统架构师通过这些命令的组合,把真实的低功耗设计意图传递给工具。
CLP(Conformal Low Power),低功耗检查是低功耗设计必不可少的一个环节,此处所谓的低功耗设计指:多电压域设计,实现过程中在原有功能逻辑基础上插入低功耗单元,如:isolation cell, level shifter cell, retention register, power switch等。
此外,还有RTL级功耗优化平台PowerPro。
利用上节所述的功耗验证工具,一般会进行如下功耗评估:
场景功耗分析一般是为大系统软件服务,为大系统软件提供场景的功耗target和golden 配置。场景功耗分析之前首先要定义功耗需求,进行竞品分析,确定功耗目标,分解功耗场景,然后才利用工具进行场景功耗分析。
场景功耗分析的流程一般为:
定义场景,包括场景数据流、场景代码流、场景各power domain状态等;根据场景定义进行coding;将编好的代码在仿真器上运行,并抓取activity文件;利用PTPX工具对activity文件进行功耗分析;确定功耗达标后,导出寄存器信息。leakage 分析可以为产线提供交付标准,也可以优化deep sleep 场景功耗。
Leakage 分析使用ptpx 工具完成,网表ready 之后就可以进行,无需波形。
Leakage 分析时不仅会分析power on 时的leakage,也会分析shutdown 时的leakage;分析多个corner leakage,如tt、ffg等;分析多个lib 下的功耗,不仅包括电压的变化还有温度的变化。
cgr/cge分析主要针对designer的clock gating内容,用于指导RTL designer 优化设计,改善clock gating 效率。
Cgr/cge分析主要使用spypower 工具完成,分析cgr时只需要rtl code即可;分析cge时需要activity 文件。利用spypower工具,可以列出register name、driving clock name、signal width、clock gating type等信息,这些信息可以使designer方便定位问题,快速解决。
Maxpower和IR-drop都为pmic设计人员服务,maxpower 分析使pmic 输出电压能够满足最大功耗的要求并留出足够的margin;IR-drop 分析使pmic 能够应对电源噪声问题,确保系统可以稳定工作。
Maxpower由ptpx完成,maxpower pattern 要使系统clock 和负载最大,测量极端情况的功耗;IR-drop 分析涉及多个部门,多种工具,引入IR-drop分析可以尽早发现功耗策略中的不足,提前想法解决。
标签: