PTPX Power Analysis
参考博文:https://www.cnblogs.com/-9-8/p/5668089.html等。
PTPX功耗分析流程
PrimeTime PX工具是PrimeTime工具内的一个feature。
PTPX的功耗分析,可以报告出chip,block,cell的各个level的功耗。
使用PTPX可以分析的功耗的方式:
1)Average power analysis,支持activity的propagation方式,主要用在项目早期做评估。
可以是defaults,user_defined,derived from HDL simulation的switching文件。
2)Time-based power analysis,通过event-drived算法来统计功耗。
主要用在项目signoff时候,加入IR-drop的分析。
电路中的功耗:
1)Leakage power,电路处在inactive或者static时的功耗。
Intrinsic Leakage power,主要是source-to-drain subthreshold leakage。
diffusion layers和substrate之间的current leak。
这种leakage是state和voltage dependent。
Gate Leakage Power,leakage的主要来源,有source to gate和gate to drain的power。
主要由gate oxide thickness和voltage来决定。
2)Dynamic Power,电路处在active模式下的功耗。即使在output不改变的情况下,输入也可能由于transition带来功耗。
Internal Power,包括内部电路冲放电的功耗和short circuit的功耗。对于fast transition times,short-circuit比较低。
对于slow transition times,short-circuit比较高。
Switching Power,cell的output的电容冲放电。
set_power_derate:用来设置某个design,cell,library cell,hierarchical,leaf cell的power的百分比。
report_power_derate
PTPX可以将某个design的power data放在一个power model中,通过extract_model -power来得到这个model,
可以通过在设计中例化的方式,来加快chip_level的power analysis的进度。(生成格式为.lib文件)
针对gate_level的design,PTPX会生成一个带clock pin的power model,可以用在分析一个复杂macro cell的功耗。
Power Analysis input:
logic library,包含timing和power信息,支持NLPM和CCS类型的library。
Gate_level netlist,支持verilog,VHDL,systemverilog格式。
Design constraints,计算primary input的transition time和define clock。
Activity,VCD/SAIF,default,user_defined。
net parasitic,SPEF文件,包含net RC参数。
1)set power_enable_analysis 为true。
2)读入verilog,VHDL,db,ddc等格式的netlist,logic library为db格式。
3)读入SPEF文件,包含WLD定义,以及sdf文件,包含glitch。
4)set_operating_conditions设置PVT。
5)针对某些fanout比较高的net(clock reset),设置power_limit_extrapolation_range。
6)当timing data还没有update的时候,PTPX会自动首先进行timing analysis,也可以通过update_timing来显式调用。
7)check_power检查潜在的功耗计算问题,默认有out_of_table_range和missing_table检查。
8)设置power analysis的模式,set_app_var power_analysis_mode average | time_based。
9)指定switching activity data,主要有set_switching_activity,set_case_analysis。
read_vcd -time(加入time window)/-when(Boolean condition)。
如果vcd等波形从RTL中得到,还需要一个mapping文件来进行波形与netlist之间匹配。
10)update power开始进行power analysis的分析。
11)report power打出power report。
time_base的报告比average报告多出以下几项。
12)最后通过save_session和restore_session来保存以及提取session
PTPX中的activity文件及mapping文件
toggle rate 和 static probability
The toggle rate of a signal is the average number of times that the signal changes value per unit of time. The units for toggle rate are transitions per second and a transition is a change from 1 to 0, or 0 to 1.
The static probability of a signal is the fraction of time that the signal is logic 1 during the period of device operation that is being analyzed. Static probability ranges from 0 (always at ground) to 1 (always at logic-high)
在不同的simulation中的capturing switching activity:
SAIF:Switching Activity Interface Format,包含toggle counts和static probabilities。
RTL中的SAIF文件包含primary input,hierarchical port,sysnthesis-invariant单元如sequential elements。
block box cells,tristate cell,latches,retention registers,clock-gating cell等。
不包含integrated clock-gating cells和latch-based isolation cells等。
VCD:Verilog Change Dump format,是一种event-based format,包含每个value change以及他们的time。
read_vcd -rtl表示输入的是rtl的activity文件。进行average分析。
-zero_delay表示输入的是netlist文件,但是并没有sdf文件的。进行cycle_accurate分析。
什么都不加时,表示进行基于event的分析。
在进行synthesis时,可能会使得一些rtl synthesis invariants的模块(register outputs,primary inputs,tristate,black boxes)
等的名字被改变,所以需要一个mapping文件来进行match RTL activity到gate_level component。
PTPX提供了三种方式:
1)set_rtl_to_get_name命令。
2)exact name mapping
3)default name mapping。
在综合的过程中,如果使用DC工具,可以生成一个map-file,包含很多set_rtl_to_gate_name命令来保证netlist与rtl的一致。
如果没有这个map-file就需要人为的设置很多这样的命令,如果工具仍然发现一个mismatch,那会使用PTPX内建的机制,来进行map。
经过这些操作,仍然mismatch,PTPX就不会在RTL activity file上反标这个object。
set_rtl_to_gate_name -rtl{a} -gate{a_reg}
当map一个RTL的寄存器时,工具实现Q pin和QB pin的标注。
PTPX支持one-to-many的mapping,如在插入Clock Tree Synthesis Buffer时,一个RTL clock可以map所有的buffer。
但是不支持多个RTL object map到一个netlist的object上。
Exact name mapping是区分大小写的,一般情况下,要将cell和pin的exact name map打开,关闭net的exact name map,
因为同一个net名字,可能已经经过了invert。
命令 power_disable_exact_name_match_to_net。
default mapping方式,
1)将RTL hierarchy map到flatten gate_level object上,用“_”代替“/”。
2)RTL的寄存器map到gate_level的object上,用_reg后缀。
3)bus上的"[]"号,map为"_",a[7]map为a_reg_7_。
Name Mapping report:
report_name_mapping,生成一个RTL与netlist之间的通过set_rtl_to_gate_name命令设置的map报告。
report_activity_file_check,列出activity file中所有的RTL name。
PTPX-average power analysis
在average power analysis中,switching activity被分解为toggle rate和static probabilities两部分。
annotation的source:
Switching Activity Annotation:(优先级从高到低)
1) 来自VCD和SAIF这样的波形;
2) 命令set_switching_activity annotation某个individual design;
3) Annotation constant value on set/reset pins,infer_switching_activity –apply命令;
4) Annotation constant value,用命令set_case_analysis命令;
5) Clock net annotation,用命令create_clock命令;
set_switching_activity命令:
可以加入option,-toggle_rate和-static_probability。-period和-base_clock来指定time unit。
Infer_switching_activity命令:
在没有提供VCD和SAIF文件时,工具通过primary input和black boxes的output来进行power分析,
并根据default switching activity来评估nonannotated pin。
通过infer_switching_activity命令来防止reg的reset和set引脚,进行default处理。
Estimating Nonannotated Switching activity
1) 对于不能通过propagation进行annotated的信号,进行default activity处理。
2) 通过buffer和inverter的信号,以及FF的Q/QN端,进行implied处理。
Imply的方向包括forward和backward,为避免冲突,forward方向的imply优先级较高。
3) Propagating机制,PTPX通过一个zero_delay的simulation来annotate一些net的
toggle rate和static probability。
SAIF文件的annotation:
merge_saif命令,工具默认各个SAIF文件分别读入并处理switching activity,然后乘以各自的weight。
加入-simple_merge命令,首先weight各自的activity文件,后再propagating activity,并输出到一个SAIF文件中。
write_saif命令,将包含user-annotated和propagated的switching activity,输出到一个saif
文件。
report_switching_activity命令,将各个group的annotation的情况报告出来。
PTPX-time-based analysis
根据VCD文件的type,PTPX支持instantaneous peak power analysis和cycle_accurate peak
power analysis。
Time-Based Power Analysis支持的VCD type
由于Gate_level和zero_delay的VCD不支持event propagation,所以可以在read_vcd之后,通
过命令report_switching_activity来报告switching activity的annotation。
在time_base mode下,不支持多个VCD file的分析。
PTPX在testbench的level建立activity file,在读入vcd时,通过strip_path的命令来map到design module。
read_vcd –strip_path TB/U1
PTPX进行condition power analysis,加入-time和-when的option。
如果vcd的产生由带systemverilog的语法的TB来产生,那么read_vcd –format systemverilog命令来读入vcd。
进行基于rtl的time_based的分析,命令read_vcd –rtl来设置,可以进行name_mapping和event的propagate。
进行基于gate_level的peak分析,必须加入sdf文件。
由于netlist的VCD文件都会比较大,所以PTPX工具内部支持fsdb/gzipped VCD的解压,
并且可以直接在PTPX工具内invoke simulator。
-pipe_exec “vcs –R –f arguments –l log”
Vector analysis:
用来分析high activity window。Time_based mode中high activity可能落在不同的interval,
所以可以通过-peak_window来设置,最小和最大的window来分析high activity。
write_activity_waveforms –vcd myvcd.vcd –output myvcd.out –interval 0.2 –peak_window 5
生成的myvcd.out一般都是fsdb格式的,直接通过nWave打开。
默认情况下,PTPX不会restore state_dependent和path_dependent的toggle rate,
为了在生成SAIF等文件中,能被包含进去,需要设置write_saif –sdpd_tracking。
set_case_analysis命令,将某个port设置为一个constant value,优先级低于VCD的annotation,
所以一般来设置vcd file中没有的signal,如test_enable信号。
在time_based的analysis中,
Glitch power的分析,作为一个transition分析,有自己的ratio计算方式。
Z State,只有0-Z-1,1-Z-0被认为transition,有power consume,其他的变化都不做分析。
X State,0-X作为半个transition,0-x-0也作为一个transition。默认情况下,initial的X不做分析。
由于peak analysis比较耗时,PTPX采用distribute的方式来进行multi-scenario analysis。
一个scenario是一个VCD activity file的time window,可以并行在multiple processor上来运行。
然后将结果merge到一起。
环境设置flow:
PTPX-clock-tree与LP-design
PTPX在加入CPF/UPF这样的文件后,可以分析multi-voltage,power-gating这样的设计。
针对某个power rail的cell,PTPX支持进行annotate。
set_annotated_power –internal_power 0.1 –leakage_power 0.0 –rail VDDA U1
可以通过report_annotated_power –rail的命令来报告出来。
在设置power_enable_multi_rail_analysis之后,可以通过report_power –rails的命令来报告
某一个power rail的power消耗。否则可以通过命令current_power_rail/update_power/report_power来报告。
每一个power rail也有自己的几个attribute,internal_power,switching_power,leakage_power,
dynamic_power,total_power。
PTPX对clock network的支持:
在clock network还没有insert时,进行estimate;
在clock network已经insert之后,提供power analysis;
1) Report:
报告clock network部分,report_power –groups clock_network
报告register部分,report_power –groups register
Clock network的power总共就这两部分。
2) Annotating:
将transistor-level的simulator输出的power信息,通过set_annotated_clock_network_power
设置。可以细分为:-internal_power,-switching_power,-leakage_power,-total_power等option来进行标注。
3) Estimating
通过命令estimate_clock_network_power,PTPX在内部会建立一个virtual balanced clock network,
来评估clock network的power。
只支持average的power analysis mode。
PTPX-Report选项
Report的生成
report_power表示产生power report,update_power表示进行power analysis。
report_power命令可以生成四种形式的report,
1) Power group-based,default的方式。
2) Cell-based,加入-cell_power的option
还可以加入-sort_by 的option来根据cell_internal_power(default),cell_leakage_power,
dynamic_power来生成report。
3) Net-based,加入-net_power的option
还可以加入-sort_by的option来根据net_static_probability,net_switching_power(default)
和net_toggle_rate和total_net_load。
4) Hierarchy_base,加入-hierarchy的option
一般只有hierarchy的底下一层的power被报告出来,可以通过-levels来进行修改。
还有-group,-rail,-clocks这样的option来进行filter进行report。
在使用-include_estimated_clock_network之前,必须进行estimate_clock_network_power的命令。
PTPX中预设的7中power groups:
1) Io_pad,包括I/O pad cells。
2) memory,包括Memory cell。
3) black_box,除了io和memory之外没有functionality的cell。
4) clock_network,包括使用create_clock的命令定义的clock和clock network上的buffer,inverter,clock-gating logic。
5) register,Latches和FF,但是不包括由clock network驱动的register的clock pin(包含在clock network group中)。
6) sequential,Latch和FF,但是clock pin不连接到clock network。
7) combinational,剩下的cell。
一般情况下,一个instance只会定义在一个power group,所以这几个power group的总和就是这个design的power。
如果lib使用CCS的power model,那么可以分别报告出intrinsic和gate leakage的power,
这时需要设置power_report_leakage_breakdowns变量。
通过报告分析clock_gating的efficiency。
report_clock_gate_saving来报告某个clock gate的情况。
1) Toggle Saving,关掉gate之后,output的clock toggle rate的减少量。
通过加入-by_clock_gate的命令来报告每个clock gate的toggle saving。
2) Register number,clock的fanout register。
通过加入-sequential的命令来报告每个clock gate的reg情况。
越高的clock freq,越多的fanout reg,那么该clock gate的效率越高。