使用PrimeTime PX进行功耗分析有两种:一种是平均功耗的分析Averaged power analysis,一种是Time-based power analysis。
 
电路的功耗主要有两种,一种是漏电流功耗(Leakage Power),也就是一个单元在没有switching,inactive或者static情况下的功耗,包括intrinsic leakage power和gate leakage power。
其中intrinsic leakage power主要是由source-to-drain的漏电流引起,也包括扩散区diffusion layer和基底substrate之间的电流泄露。
Gate leakage power是由source-to-gate和gate-to-drain的漏电流引起,随着工艺尺寸的降低diminish,它已经成为主要的漏电流功耗来源。Gate leakage power主要依赖于gate oxide的厚度和电压强度,不依赖于温度。
 
 
另外一种是Dynamic Power,是指电路在active时候的功耗,包括internal power和switching power。
Internal power是指在boundary of cell内的动态功耗,包含cell内部的电容充放电,PN节之间的瞬时短路(momentary short circuit, P晶体管和N晶体管在关闭打开过程中间的某一短暂时刻,会短路,导致从VDD到GND的瞬时电流).因此,对于具有较慢transition time的电路,short-circuit power能够占到总的gate power的50%。
 Switching power是由一个cell的输出端负载电容的充放电导致的(power dissipated by the charging and discharging of load capacitance at the output of the cell).总的load capacitance是输出驱动端(driving output)net和gate电容的累加。
 
Averaged mode: SAIF, VCD, set_switching_activity, Tool defaults
Time-based mode: RTL-VCD, Gate-Level VCD (Peak power)
 
关于SAIF和VCD的区别:
SAIF: SAIF stands for Switching Activity Interface Format. The SAIF files capture signal transitions and the time spent at each logic level. The SAIF file contains the toggle counts and static probabilities for the nets in the design. SAIF is supported only in the averaged power analysis mode. Use the read_saif command to annotate the activity information in the SAIF format.  
 

VCD: VCD stands for Verilog Change Dump format. It is an event-based format that contains every value change for the signals in the design and the time at which they occurred. Use the read_vcd command to specify the VCD file in both the averaged and time-based analysis modes. Use the read_vcd command to specify the activity files in other event-based formats within the PrimeTime PX tool. Internally, the tool converts these formats to the VCD format using the appropriate utility.
 
VCD文件示例:http://en.wikipedia.org/wiki/Value_change_dump
 
这里只关注Gate-level的功耗分析,对于RTL level的,需要进行一系列的mapping操作。
 
首先看SAIF文件格式
对于Gate-level的SAIF文件,报刊每个单元activities的反标,用来计算平均功耗。使用read_saif来读取saif文件。
SAIF文件的产生有多种途径,甚至可以由VCD文件转换(vcd2saif),也可以在simulation中获得,这里补充一下,使用Synopsys的VCS MX可以对Verilog、System Verilog和VHDL的工程实现混仿。这里需要关注Power Compiler的文档。
 
VCD文件格式
同样,对于VCD文件格式,也有RTL和Gate-level之分,对于RTL level的VCD文件,需要使用read_vcd –rtl或者read_vcd –zero_delay读取activity file。read_vcd默认为读取gate-level的文件。
对于VCD文件,同样可以使用VCS或者其他的HDL仿真环境来产生。
在time-based的功耗分析模式,PT PX不支持多个activity VCD文件的读入。在读取VCD文件的时候,经常会出现VCD hierarchy与当前design不匹配的情况,导致最终反标成功的cell为0,这个mismatch主要是由于当使用read_vcd -strip_path来指定当前的design时,-strip_path选择错误,或者VCD文件没有包含所有的design hierarchy。
 
使用PT PX的重要内容之一是name mapping,主要是对于RTL级别的design进行功耗分析的时候,需要将RTL级别的activity与门级网表进行map。这里不赘述。
 
Averaged Power Analysis
进行平均功耗的分析需要的switching activity主要包含static probability和toggle rate两个参数。
Static probability是某个信号在某一个特定logic state下的概率,比如,SP1和SP0就是某个信号在logic-1和logic-0下的概率。SP是一个信号在某一个状态的时间/总的仿真时间,得到的一个比值,比如SP1=0.7表示在70%的时间这个信号等于1.
Toggle rates是一个对象,比如net、pin、port在per unit time下的0->1和1->0的transition数目。由TR表示。
 
 
行为反标的方法包括:
Annotation of RTL or gate-level VCD files with read_vcd command
Annotation of RTL or gate-level SAIF files with the read_saif or merge_saif commands
使用VCD文件进行反标:
read_vcd -strip_path TB/DUT my.vcd
-strip_path指定当前实例化的设计的path。
需要注意的是,在做平均的功耗分析的时候,PT PX支持读入多个VCD文件,但是条件是需要指定不同的时间,在使用read_vcd命令的时候使用-time指定。
read_vcd还支持有条件的功耗分析,使用-when开关,比如说指定分析在某个信号为true时候的功耗。
 
使用SAIF文件的时候,涉及的commands有read_saif (read_saif -strip_path TB/DUT my.saif)、merge_saif和write_saif.
 
当分析不同时钟频率情况下的功耗的时候,需要set_app_var power_enable_analysis true,并且使用set_power_clock_scaling的命令。
 
当simulation的activity文件无法得到时,需要用户自己定义activity,使用的命令包括set_case_analysis, create_clock, infer_switching_activity and set_switching_activity。
 
report switching activity
另一个重要内容是report switching activity。在读入saif或者vcd文件,或者set_switching_activity之后,使用report_switching_activity就能够报告switching activity的各项活动。可以使用-list_not_annotated可以列出没有被反标的对象。
使用下面的属性还可以得到TR和SP的值:
toggle_count/toggle_rate/glitch_rate/static_probability
注意,在此之前,首先要update_power。
还有一些选项,如report_switching_activity -average_activity -hierarchy
还有一个命令为get_switching_activity,使用activity_source属性,可以定义activity information的来源,包括file, set_switching_activity, set_case_analysis, propagated, implied, default, or UNINITIALIZED等。可以得到TR,SP和glitch rate
 
 
在得到switching activity之后,使用update_power来将其反标,使用report_power来报告power的值。
 
使用report_annotated_power -list_annotated可以得到反标的报告列表。
 
Time-based power analysis
PT PX使用VCD来计算每个事件导致的功耗,SAIF格式对此不支持。
read_vcd "../sim/vcd.dump" -strip_path "tb/macinst" -when {N5},读取VCD文件中,在N5为true时候的activities。另外还有-time选项。
 
Handling Large Activity Files
Gate-level的VCD文件可能会非常大,尽管PT PX能够处理大于2G的VCD文件,但是还是要尽量避免产生和储存大的VCD文件。方法一是生成压缩的文件格式来减小activity file的尺寸,比如FSDB或者gzipped的VCD文件。另一种方法是直接将simulation生成的activity数据导入到PT PX,步骤如下:
1) 建立HDL的仿真环境,产生activity文件。比如,在testbench中必须包含$dumpvars或者$dumpfile来产生VCD文件。这个文件名即管道名,因此,两个工具都知道从哪里读写数据,而不需要创建大的文件
2) 定义命令或者运行脚本来调用HDL的仿真,使用-pipe_exec。比如,如果运行一个脚本执行VCS的仿真,包含vcs –R –f arguments –l log。使用下面的某一个命令来调用仿真,并直接读取VCD数据到PT PX
-pipe_exec run_vcs
-pipe_exec “vcs –R –f arguments –l log”
 
Average Toggle Rate=Number of Toggles on All Signals Per Interval/Number of Signals
Coverage=Number of Signals with at least one Toggle/Number of Signals
 
建立分布式环境,加速功耗分析
1) 建立分布式的计算环境,允许同时运行多个scenarios。使用LSF的两个machines进行分布式的peak power分析。
set_app_var power_enable_analysis true
set multi_scenario_working_directory ./work
set multi_scenario_merged_error_log ./work/error_log.txt
set_multi_scenario_license_limit -feature PrimeTime 2
set_multi_scenario_license_limit -feature PrimeTime-PX 2
set_host_options -32bit -num_processes 2 -submit_command /lsf/bin/bsub
start_hosts
2) 将仿真分割成两个模块
set test_dir .
# The common data is used by all the scenarios. Since all the scenarios must read the design data and update timing.
create_scenario -name run_0 -specific_data run_0.tcl -common_data common.tcl -common_variables {test_dir}
create_scenario -name run_1 -specific_data run_1.tcl -common_data common.tcl -common_variables {test_dir}
set_app_var power_enable_analysis true
set_app_var power_analysis_mode time_based
set_app_var search_path "."
set_app_var link_library " * link_library.db"
read_verilog mac.vg
current_design mac
link
read_sdc $test_dir/mac.sdc
set_disable_timing [get_lib_pins ssc_core_typG] 
read_parasitics ../src/annotate/mac.spef.gz 
##################################################### 
# check, update, or report the timing 
##################################################### 
check_timing 
update_timing 
report_timing 
##################################################### 
# read switching activity file 
##################################################### 
read_vcd -strip_path tb/macinst ../sim/vcd.dump.gz 
report_switching_activity -list_not_annotated 
##################################################### 
# check or update or report power 
##################################################### 
check_power 
update_power 
report_power -hierarchy 
quit
 
 
Example 4 Script Example for Time-Based Power Analysis 
##################################################### 
# Set the Power Analysis Mode 
##################################################### 
set power_enable_analysis TRUE 
set power_analysis_mode time_based 
##################################################### 
# link design 
############################################## 
set search_path "../src/hdl/gate ../src/lib/snps . " 
set link_library " * core_typ.db" 
read_verilog mac.vg 
current_design mac 
link
##################################################### 
# set transition time / annotate parasitics 
##################################################### 
read_sdc ../src//hdl/gate/mac.sdc 
set_disable_timing [get_lib_pins ssc_core_typ/*/G] 
read_parasitics ../src/annotate/mac.spef.gz 
##################################################### 
check_timing 
update_timing 
report_timing 
##################################################### 
# read switching activity file 
##################################################### 
read_vcd ../sim/vcd.dump.gz -strip_path tb/macinst 
##################################################### 
# analyze power 
##################################################### 
check_power 
set_power_analysis_options -waveform_format out -waveform_output vcd 
update_power 
report_power 
quit
 

PTPX-功耗分析总结的更多相关文章

  1. 功耗优化之Sensor功耗分析

    功耗优化之Sensor功耗分析 一.Sensor功耗问题分类 二.Sensor功耗问题分析方法 SSC子系统引起系统无法进入AOSD问题分析: SSC子系统频繁唤醒AP问题分析方法 SSC子系统的GP ...

  2. 详解Android功耗分析工具Power Tutor的使用

    简介: PowerTutor 是由美国密歇根大学在谷歌的指导下开发的.它是用来展示google智能手机中主要组件或应用功耗的一种应用程序.例如,CPU,网络链接,LCD显示屏,GPS等.它允许开发者很 ...

  3. (数字IC)低功耗设计入门(二)——功耗的分析

    前面学习了进行低功耗的目的个功耗的构成,今天就来分享一下功耗的分析.由于是面向数字IC前端设计的学习,所以这里的功耗分析是基于DC中的power compiler工具:更精确的功耗分析可以采用PT,关 ...

  4. PTPX Power Analysis Flow

    PrimeTime PX工具是PrimeTime工具内的一个feature. PTPX的功耗分析,可以报告出chip,block,cell的各个level的功耗. 使用PTPX可以分析的功耗的方式: ...

  5. 【转载】FPGA功耗的那些事儿

    在项目设计初期,基于硬件电源模块的设计考虑,对FPGA设计中的功耗估计是必不可少的. 笔者经历过一个项目,整个系统的功耗达到了100w,而单片FPGA的功耗估计得到为20w左右, 有点过高了,功耗过高 ...

  6. FPGA功耗那些事儿(转载)

    在项目设计初期,基于硬件电源模块的设计考虑,对FPGA设计中的功耗估计是必不可少的.笔者经历过一个项目,整个系统的功耗达到了100w,而单片FPGA的功耗估计得到为20w左右,有点过高了,功耗过高则会 ...

  7. (数字IC)低功耗设计入门(一)——低功耗设计目的与功耗的类型

    低功耗设计这个专题整理了好久,有一个月了,有图有证据: 然而最近一直有些烦心事.郁闷事,拖延了一下,虽然现在还是有点烦,但是还是先发表了吧.下面我们就来聊聊低功耗设计吧,由于文章比较长,因此我就不一次 ...

  8. 经验总结之Android framework开发

    本人在某做手机ROM的厂商工作近两年,虽然工作年限不长,但是对此类“工种”已有比较初步的认识,写下来供大家参考借鉴. framework的工作相对于其他比较成熟的软件开发类似,分为维护和需求开发. 需 ...

  9. modelsim(2) - vcd (dump, 查看,格式理解)

    二 vcd dump 由于VCD可以用于做功耗分析,所以需要把其dump出来.另外VCD可以作为结果,也可以作为激励,但是实际看到的少啊! VCD是verilog的标准,所以有系统函数$dumpvar ...

随机推荐

  1. 题解【AcWing1089】烽火传递

    题面 单调队列优化 DP 模板题. 我们考虑设 \(dp_{i}\) 表示从 \(1\) 到 \(i\) 能够准确传递情报,且第 \(i\) 个烽火台发出信号的最小费用. 转移方程不难得出:\(dp_ ...

  2. Cloud开发动态列的简单账表

    业务场景:客户需要根据过滤条件的不同显示不同的列.如下方式可以实现动态的列名. using System;using System.Collections.Generic;using System.L ...

  3. ActiveMQ注意事项

    1.消费者在消费数据的过程当中报错,那么就会自动重试        2.如果消费者报错,会自动重试,但是数据已经真实拿到,可能会造成重复消费,幂等性问题            思路,每一次监听到数据后 ...

  4. ArcMap 导入 CGCS2000 点坐标数据

    最近开始用 ArcGIS 做管网项目,第一步就接触到 CGCS2000 坐标系数据,要把管网的数据给导入进来, 一开始不知道是哪个坐标系,试了半天,都偏到国外去了,最后在一篇博客里找到了类似的管网数据 ...

  5. 消息队列和Kafka

    ------20191211闪

  6. (转)Android访问webservice

    纠正网上乱传的android调用Webservice方法.   1.写作背景: 笔者想实现android调用webservice,可是网上全是不管对与错乱转载的文章,结果不但不能解决问题,只会让人心烦 ...

  7. 本机添加多IP绑定网站

    查询IP 显示为1个IP 点击更改适配器 点击高级 进行添加IP 点击添加 ipconfig 查看效果 注~!:在IIS中可以在这里添加多IP然后绑定

  8. 阿里云Linux服务器安装Redis 完整步骤(包括处理远程连接问题)

    跟随本篇文章步骤,包你成功安装并连接使用. 1.获取redis资源 wget http://download.redis.io/releases/redis-4.0.8.tar.gz 2.解压 tar ...

  9. 数据预处理 | 通过 Z-Score 方法判断异常值

    判断异常值方法:Z-Score 计算公式 Z = (X-μ)/σ 其中μ为总体平均值,X-μ为离均差,σ表示标准差.z的绝对值表示在标准差范围内的原始分数与总体均值之间的距离.当原始分数低于平均值时, ...

  10. PHP实现微信公众号授权获取用户信息

    class WxAuthModel extends BaseModel { var $appId = APPID; var $appSecret = APPSECRET; /*微信x小程序,获取微信o ...