參考博文: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的效率越高。