很多地方,是个人理解。也许有误差。看到勿怪。
功耗分析,用ptpx;
功耗优化,除了设计者从功能结构角度去修改设计外;也可以利用DC power compiler工具去优化功耗(优化策略:包括门控时钟之类的)。详情见:
DC PowerCompiler 功耗相关的综合 userguide阅读笔记
http://blog.csdn.net/u011729865/article/details/54378379
introduction
PTPX,是基于primetime环境(简称pt),对全芯片进行power静态和动态功耗分析的工具。包括门级的平均功耗和峰值功耗。
可以说PTPX就是pt工具的一个附加工具。个人补充理解:能与pt时序分析脚本运行环境放在一起,可以计算出平均功耗和time-based功耗。
用PTPX的好处?作为前端设计人员来说,个人理解:
- RTL/pregsim/postgsim三个步骤环节,RTL不支持ptpx功耗分析,netlist才可以采用ptpx分析功耗。
- 通过功耗的统计数据,可以在设计环节就可以发现功耗的问题,比如某些模块功耗太大;由于数据报告了所有层次结构下的功耗信息,所以很容易找到功耗关键的点。
- 平均功耗分析,可以找到当前设计的关键功耗点。
- time-based功耗分析,可以找到瞬态功耗与仿真激励的关系。可以确认峰值功耗是否符合预期要求。
averaged power analysis
简单的说,就是平均功耗。
time-based power analysis
简单的说,基于时间的功耗分析。所以该分析下,会产生每一个时刻的功耗统计,包括平均功耗、峰值功耗等。
经过ptpx实践,个人理解:
1. 平均功耗,对应的是一个报告。
2. time-based功耗分析,对应的是一个波形,显示每一时刻对应的瞬时功耗。而且报告会额外给出peak-power(包括peak-time时刻)的信息。
ptpx支持下述方式:
- vector-based/vector-free(基于vcd/不用vcd。)
- peak-power和average-power
- RTL/gate-level
- VCD/FSDB/SAIF
- multivoltage和powerDomain
power modeling overview
图中:
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漏电流功耗
源到栅、栅到漏之间的电流引起。
gate漏电流功耗,主要跟电源电压、栅极氧化层厚度有关。跟温度关系很小。
动态功耗
动态功耗与电路的激励有关。
它又分为内部功耗和开关功耗两部分。
内部功耗
内部的概念,是指cell以内。
包括充放电导致的功耗和短路功耗。
充放电的意思是,管子的寄生电容,导致充放电。
短路功耗的意思是,栅极在切换的时候,使得P管、N管同时导通,从而引起电源到地的通路。
简单的库单元,动态功耗主要来自短路功耗。
复杂的库单元,动态功耗主要来自充放电。
switching开关功耗
负载电容的充放电过程,导致。具体原因:
1. P管导通,负载电容充电;
2. 因为管子输入端口switching,N管导通,负载电容开始放电。
3. 正是由于上述充放电,导致产生了switching开关功耗。
与内部功耗的子类—充放电功耗,区别是范围不限于cell内部。
设置power derating factor
就是一个人为工程经验的比例因子。默认是1.0。
注意:这个power是电源的意思,不是功耗。是电源因为环境不一样,导致的误差。纯属个人理解,未确认。
生成power models
生成power models之前,要执行时序分析和功耗分析。
在此基础上,利用extract_model -power
命令去产生包含时序和功耗数据的power models。
PTPX power analysis flow
1. 使能power分析
set power_enable_analysis true
2. 执行vector分析
因为动态功耗的分析,与仿真激励的vcd文件有很大关系。vcd的activity活跃度越高,功耗越高。为了评估仿真激励vcd文件的activity活跃度,可以用下述命令:
write_activity_waveforms有参数的。具体使用办法查看man
吃格式vcd或者fsdb的波形文件,并对该波形文件分析activity活跃度。这个是为了在power分析之前,查看仿真激励的活跃度的。这一步骤,对功耗分析来说,不是必要的。
3. 吃design
- 支持verilog、vhdl网表;db、ddc、Milkyway格式的网表也可以。
- logic库,必须是.db格式。
- 寄生参数信息,应该在Milkyway格式的文件里。
- 为了计算平均功耗,需要吃sdc文件
PTPX,支持CCS和NLPM的功耗model。如果design数据里,存在两种的话,可以设置 power_model_preference
,以决定选择NLPM还是CCS;默认是nlpm。【个人补充理解:CCS比NLPM模型,更先进;与hspice仿真差别只有2%。推荐用CCS。】
4. 设置变量
set_operating_conditions
;设置工艺及PVT信息。power_limit_extrapolation_range
; 功耗相关的lookup查找表,有范围。默认功耗分析不限制这个范围。但是如果有很多high-fanout的nets,比如clocks和reset nets;那就得限制范围,从而得到较为准确的功耗数据。power_use_ccsp_pin_capacitance
;深亚微米,低电压的工艺下;建议设置为true,默认是false。是计算寄生电容参数的。与Miller效应有关(即包含栅到源,栅到漏的电容)。
timing分析
执行命令update_timing
;
检查功耗分析的潜在error
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结果。
time-based功耗分析
与平均功耗类似,只需要设置参数:
set_app_var power_analysis_mode time_based
multivoltage功耗分析
时钟网络的功耗分析
multivoltage功耗分析和时钟网络的功耗分析,对前端设计人员来说,没太大必要。对后端设计人员来说,应该很重要。
因为前端关心的是数字逻辑功能部分的功耗;时钟网络是后端布局布线才能确认的。
报告report命令
report_power
report_power_calculation
另外,它们有很多命令参数,可以实现各种定制报告。
功耗的图形界面
利用PrimeTime的图形界面,去查看功耗的数据报告(包含柱状图等),相对文本报告,显得更直观正式。
toggle-rate和switching activity区别?
keyword | description |
---|---|
switching activity | 开关活跃度,就是管子的开关,导致的switching功耗 |
toggle-rate | 信号翻转率。 |
翻转率和switching有什么区别?
个人理解,翻转率对应的是信号变化;开关活跃度对应的是管子开关变化。信号变化,不一定会引起管子开关切换的变化。
参考文档
ps: 一切以primetime的官方userguide—-ptpx.pdf文档为准。
- PrimeTime-PX功耗分析总结紫光新浪博客
http://blog.sina.com.cn/s/blog_cdd8559a0102uycf.html - IC设计中的功耗分析的流程 - mikiah的专栏 - 博客频道 - CSDN.NET
http://blog.csdn.net/mikiah/article/details/8061532 - PrimeTime-PX的userguide,名字是ptpx.pdf