很多地方,是个人理解。也许有误差。看到勿怪。
功耗分析,用ptpx;
功耗优化,除了设计者从功能结构角度去修改设计外;也可以利用DC power compiler工具去优化功耗(优化策略:包括门控时钟之类的)。详情见:
DC PowerCompiler 功耗相关的综合 userguide阅读笔记
http://blog.csdn.net/u011729865/article/details/54378379
PTPX,是基于primetime环境(简称pt),对全芯片进行power静态和动态功耗分析的工具。包括门级的平均功耗和峰值功耗。
可以说PTPX就是pt工具的一个附加工具。个人补充理解:能与pt时序分析脚本运行环境放在一起,可以计算出平均功耗和time-based功耗。
简单的说,就是平均功耗。
简单的说,基于时间的功耗分析。所以该分析下,会产生每一个时刻的功耗统计,包括平均功耗、峰值功耗等。
经过ptpx实践,个人理解:
1. 平均功耗,对应的是一个报告。
2. time-based功耗分析,对应的是一个波形,显示每一时刻对应的瞬时功耗。而且报告会额外给出peak-power(包括peak-time时刻)的信息。
ptpx支持下述方式:
图中:
1. lib表示单元库的.lib文件,.lib不仅仅有时序信息,还有area、power信息。
2. vcd指用户通过仿真得到波形文件,里面记载着待分析模块的所有端口和内部线网的跳变信息。从而确定待分析模块的switching功耗。
功耗分类:
- Leakage Power
Leakage Power由标准单元库的cell .db提供相关数据。
- Dynamic Power(包括internal和switching power)
internal power由标准单元库的cell .db提供相关数据,但与激励有关系。
switching power由电压、网表电容、线开关计算得出(我觉得net不能仅仅说是线,而应该是管子源漏栅的连线。电容是管子和线的寄生电容)。与激励有关系。
PS: 静态漏电流功耗和动态功耗的计算结果,用于peak power和average power的分析。
.db文件的power model包括:
- NLPM(nonlinear power model)
- CCS(composite current source)—推荐模型,相对NLPM,更先进更精确。
静态漏电流功耗,是指cell不发生switching开关切换的时候,去计算得出。ptpx,完全使用单元库(.db文件)的漏电流功耗查找表得出结果。
静态漏电流功耗 = 本征intrisic漏电流功耗 + 栅极gate漏电流功耗
主要是源漏之间的电流引起。原因是深亚微米工艺下,阈值电压越来越低导致管子无法完全关闭,使得源漏之间发生导通。
本征漏电流功耗,主要跟电压、管子state有关。
源到栅、栅到漏之间的电流引起。
gate漏电流功耗,主要跟电源电压、栅极氧化层厚度有关。跟温度关系很小。
动态功耗与电路的激励有关。
它又分为内部功耗和开关功耗两部分。
内部的概念,是指cell以内。
包括充放电导致的功耗和短路功耗。
充放电的意思是,管子的寄生电容,导致充放电。
短路功耗的意思是,栅极在切换的时候,使得P管、N管同时导通,从而引起电源到地的通路。
简单的库单元,动态功耗主要来自短路功耗。
复杂的库单元,动态功耗主要来自充放电。
负载电容的充放电过程,导致。具体原因:
1. P管导通,负载电容充电;
2. 因为管子输入端口switching,N管导通,负载电容开始放电。
3. 正是由于上述充放电,导致产生了switching开关功耗。
与内部功耗的子类—充放电功耗,区别是范围不限于cell内部。
就是一个人为工程经验的比例因子。默认是1.0。
注意:这个power是电源的意思,不是功耗。是电源因为环境不一样,导致的误差。纯属个人理解,未确认。
生成power models之前,要执行时序分析和功耗分析。
在此基础上,利用extract_model -power
命令去产生包含时序和功耗数据的power models。
set power_enable_analysis true
因为动态功耗的分析,与仿真激励的vcd文件有很大关系。vcd的activity活跃度越高,功耗越高。为了评估仿真激励vcd文件的activity活跃度,可以用下述命令:
write_activity_waveforms有参数的。具体使用办法查看man
吃格式vcd或者fsdb的波形文件,并对该波形文件分析activity活跃度。这个是为了在power分析之前,查看仿真激励的活跃度的。这一步骤,对功耗分析来说,不是必要的。
PTPX,支持CCS和NLPM的功耗model。如果design数据里,存在两种的话,可以设置 power_model_preference
,以决定选择NLPM还是CCS;默认是nlpm。【个人补充理解:CCS比NLPM模型,更先进;与hspice仿真差别只有2%。推荐用CCS。】
set_operating_conditions
;设置工艺及PVT信息。power_limit_extrapolation_range
; 功耗相关的lookup查找表,有范围。默认功耗分析不限制这个范围。但是如果有很多high-fanout的nets,比如clocks和reset nets;那就得限制范围,从而得到较为准确的功耗数据。power_use_ccsp_pin_capacitance
;深亚微米,低电压的工艺下;建议设置为true,默认是false。是计算寄生电容参数的。与Miller效应有关(即包含栅到源,栅到漏的电容)。执行命令update_timing
;
check_power
set_app_var power_analysis_mode averaged | time_based
默认是averaged功耗分析。
平均功耗,是基于翻转率toggle rate来分析的。
翻转率的标注,可以是默认翻转率、用户定义switching activity、SAIF文件或者VCD文件。
功耗结果期望准确的话,首先要保证翻转率的标注要准确。这意味着需要后端布局布线、时钟树等已经完全稳定了。前期做功耗分析,可能只是一个评估作用吧。
工具支持基于仿真的switching activity文件类型,包括:
- VCD
- FSDB
- VPD
- SAIF
如果没有上述文件,那可以使用user-define switching activity commands,来提供一个现实的activity去精确power结果。
与平均功耗类似,只需要设置参数:
set_app_var power_analysis_mode time_based
multivoltage功耗分析和时钟网络的功耗分析,对前端设计人员来说,没太大必要。对后端设计人员来说,应该很重要。
因为前端关心的是数字逻辑功能部分的功耗;时钟网络是后端布局布线才能确认的。
report_power
report_power_calculation
另外,它们有很多命令参数,可以实现各种定制报告。
利用PrimeTime的图形界面,去查看功耗的数据报告(包含柱状图等),相对文本报告,显得更直观正式。
keyword | description |
---|---|
switching activity | 开关活跃度,就是管子的开关,导致的switching功耗 |
toggle-rate | 信号翻转率。 |
翻转率和switching有什么区别?
个人理解,翻转率对应的是信号变化;开关活跃度对应的是管子开关变化。信号变化,不一定会引起管子开关切换的变化。
ps: 一切以primetime的官方userguide—-ptpx.pdf文档为准。