使用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. 今天才知道a标签的href="#"是回到页面顶部

    如题,真的是,做了一年多的开发,今天才知道a标签的href="#"是回到顶部.以前一直以为这是个多么了不起的功能. 顺便扩展一下滑动隐藏和显示按钮(从别处拷贝来的代码) $( do ...

  2. Ubuntu 18.04安装配置Apache Ant

    Ubuntu 18.04安装配置Apache Ant 文章目录 Ubuntu 18.04安装配置Apache Ant 下载 执行以下命令 `/etc/profile`中配置环境变量 载入配置 测试 执 ...

  3. PHP目录操作(附封装好的目录操作函数文件)

    目录函数库常用API $path='test'; var_dump(is_dir($path));//检测是否为目录 echo '<hr/>'; echo getcwd();//得到当前的 ...

  4. smarty文章字符截取

    {%$data.dealer_info.address|replace:' ':''|cutstr:58%} cutstr:58

  5. Meta(其他信息)

    简介 元数据就是描述数据的数据 <meta> 元素表示那些不能由其它HTML元相关元素 (<base>, <link>, <script>, <s ...

  6. 使用python 写一个 股票涨跌提醒功能

    1: 安装python: https://www.cnblogs.com/liyafei/articles/11550979.html 将python.exe加入 全局path 2: 安装库:(不需要 ...

  7. dataTables插件的使用

    用到dataTables这个插件还是因为Metronic这个框架里有用到,不然我不会选择它的,为啥呢?就感觉它的文档有点复杂(当然,也有我智商不够用的原因):既然用了,那就说说我遇到的问题吧,以防下次 ...

  8. C++面向对象编程实例

    实例一.四位运算符操作 main.cpp. #include <iostream> #include "operator_1.h" #include <stdio ...

  9. Java-重载和重写区别剖析

    重载(Overload)和重写(Override)是任何一门面向对象的语言都会具有的两个特性,自然,Java语言中也具有此两种特性.但是,对于Java新手,或者没有面向对象语言经验的开发者而言,这会是 ...

  10. java基础(十三)之接口

    接口 什么是接口? 生活中也有很多的接口,比如USB接口.定义了接口就是定义了调用对象的标准. 接口基本语法 1.使用interface定义:2.接口当中的方法都是抽象方法:因为抽象函数不能生成对象, ...