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的效率越高。

 

posted @ 2018-12-24 19:49  大海在倾听  阅读(16148)  评论(1编辑  收藏  举报