前面学习了进行低功耗的目的个功耗的构成,今天就来分享一下功耗的分析。因为是面向数字IC前端设计的学习,因此这里的功耗分析是基于DC中的power compiler工具;更精确的功耗分析能够采用PT,关于PT的功耗分析能够查阅其余资料,这里不涉及使用PT的进行功耗分析。前端
(1)功耗分析与流程概述后端
上一个小节中讲解了功耗的构成,而且结合工艺库进行简要地介绍了功耗的计算。可是实际上,咱们根本不可能人工地计算实际的大规模集成电路的功耗,咱们每每借助EDA工具帮咱们分析电路的功耗。这里咱们就介绍一下EDA工具分析功耗的(广泛)流程,而后下一小节咱们将介绍低功耗电路的设计和优化。函数
①功耗分析流程的输入输出工具
功耗分析的流程(从输入输出关系看)以下所示:post
上面的图中,须要四种东西:学习
·tech library:这个就是包含功耗信息的工艺库了,比较精确的库里面还应该包含状态路径(SDPD)信息,代工厂提供。测试
·netlist:设计的门级网表电路,能够经过DC综合获得。优化
·parasitic:设计中连线等寄生参数,好比寄生电容、寄生电阻,这个通常是后端RC寄生参数工具提供,简单的功耗分析能够不须要这个文件。spa
·switch activity:包含设计中每一个节点的开关行为状况,好比说节点的翻转率或者能够计算出节点翻转率的文件。这个开关行为输入文件是很重要的。这个开关行为能够有不一样的形式提供,所以就有后面不一样的分析功耗的方法。命令行
(注意,无论使用什么方法进行功耗分析,功耗分析的时候,输入设计文件的都是门级网表文件)
②开关行为的一些概念
说到开关行为,咱们前面的翻转率也是一种开关行为。此外咱们还有其余关于开关行为描述的概念,这里咱们经过举例说明,以下图所示:
·翻转(次)数:逻辑变化的次数,上图中信号的翻转数为3.
·翻转率:前面也有相关介绍,这里重提一下,翻转率是单位时间内信号(包括时钟、数据等等信号)的翻转次数。上图中翻转率为3/6 = 0.5(6个时间间隔内,翻转了3次)
·T1,T0:(节点)信号的逻辑值为1和0的持续时间,上图中T1为4,T0为2。
·静态几率(static probability ,SP):(节点)信号逻辑值为1的几率,上图中的SP为4/6=2/3。
③开关行为(文件)状况表示
前面咱们说到了功耗的分析须要开关行为的状况,通常就是指每一个节点的翻转率状况,咱们有下面方式设置翻转率:
·直接命令进行:例如命令:
set_switching_activity -static 0.2 -toggle_rate 20 -period 1000 [all_inputs]
这时,翻转率设置的节点是输入,响应的翻转率为:Tr = 20/1000 = 0.02GHz
·SAIF文件:即switching activity interchange format,开关行为内部交换格式文件,用于仿真器和功耗分析之间交换信息的ASCII文件(美国标准信息交换码文件)。
·VCD文件,即value change dump 文件,它也是一个ASCII文件,文件中包括了一个设计中所选择变量值的变化信息,这些信息经过在仿真testbench中使用“VCD系统函数”获得。
在Synopsys的低功耗设计流程里面,可使用power compiler(包含在design compiler中)进行功耗分析。咱们能够经过命令来定义节点的翻转率的方法来分析功耗----称为无向量(vector-free)分析法;因为SAIF文件和VCD文件能够经过对电路仿真获得,它们是仿真接口格式文件,所以也能够经过VCS仿真器产生SAIF或者VCD文件的方法分析功耗。当要分析的结果比较精确时,通常使用SAIF文件或者VCD文件(VCD文件经过相关命令转换成SAIF文件,然后使用SAIF进行功耗分析)。
(2)无向量分析法
前面咱们说到,无向量分析法就是经过命令来定义节点的翻转率的方法来分析功耗。咱们先来逐条学习须要什么的命令,而后在后面进行举例说明无向量分析法的脚本。
在学习设置翻转率的命令以前,咱们先来了解一下什么是设计的传播起点和黑盒子。咱们定义传播的起点为设计的输入端和黑盒子的输出端,黑盒子是指在工艺库里没有功能描述的单元(好比ROM 、RAM或者一些IP核)。例如对于下面的设计中:
上面的设计有三处起点,一处是整个设计的输入端,一处是黑盒子的输出端,还有一处是某个单元的输入端。最后一处的起点不包含在咱们的定义中,可是咱们也把它当作起点,由于这是被标记了翻转率,这个咱们后面进行讲解。
利用无向量分析法分析功耗时,咱们没必要提供设计内部节点的翻转率,而是经过设置起点的翻转率就好了。咱们有两种方法设置翻转率,一种是经过设置翻转变量,一种是经过标记的方法。下面咱们就来介绍如何经过这两种方法进行设置翻转率。
①设置翻转变量
在power compiler中,能够设置下面的两个翻转变量进行设置翻转率:
power_default_toggle_rate
power_default_static_probability
下面就来介绍一下这两个变量(主要介绍power_default_toggle_rate)。
power_default_toggle_rate:其用法咱们能够在DC中进行man一下,这个变量设置设计中默认使用的翻转率。定义方式是:
set power_default_toggle_rate 翻转值
翻转值默认是0.5。这个翻转值不是翻转率,这个变量定义的翻转率是个相对的值:
·若是设计定义了时钟,这个power_default_toggle_rate变量定义的翻转率就以最快的时钟为参考,好比翻转值为0.5时,设计中最快的时钟为10ns,那么翻转率Tr = 0.5/10ns = 0.05GHz,也就是整个设计中默认的翻转率是0.05GHz。
·若是设计中没有时钟,那么就会以工艺库中的时间单位做为参考,例如工艺库中的时间单位是ns,翻转值为0.5,那么翻转率Tr = 0.5/1ns = 0.5GHz。
power_default_static_probability:这个设置的是默认的静态几率,也就是起点的逻辑值是1的几率。至于静态几率,这里就不详细描述了。这两个变量的默认翻转值都是0.5,翻转率是很大的,通常状况下须要减少一点,好比设置为0.01和0.02这样的。
通常状况下,默认的翻转率是设置在起点上的,也就是提及点的翻转率用的是power_default_toggle_rate这个变量设置的翻转率,内部节点的翻转率能够经过传播获得,以下图所示:
须要说明的是,传播不能够穿过没有功能描述的黑盒子,也就是不能经过传播的方式获得黑盒子的输出翻转率,所以咱们在最前面就定义了,将黑盒子的输出当作起点,这样其余节点的翻转率能够经过传播获得(包括黑盒子的输入),黑盒子输出的翻转率经过默认设置的翻转率获得,咱们就获得了设计中全部节点的翻转率。
②标记翻转率
上面的方式设置的是默认的翻转率。当咱们须要为某个节点标记某个指定的翻转率,而不是使用默认的翻转率时,咱们就用到了标记频率,以下图所示:
单元A的输入端口标记了特定翻转率,好比说0.04GHz。标记的翻转率比传播的翻转率优先级更高,被标记翻转率的节点将做为一个新的起点,这就不属于起点的定义,但仍是叫它为起点的缘由。标记翻转率以后,这个单元后续的节点的翻转率将经过这个新标记的翻转率传播获得。
设置标记翻转率(简称设置翻转率)的命令主要有两条:
set_switching_activity 和 set_case_analysis,下面就来说解一下这两条命令的意思。
set_switching_activity :设置某个节点的翻转率和静态几率,在使用无向量分析法估算功耗的时候,这个命令被普遍使用,越多的节点上被标记翻转率,估算功耗的精度就越高。命令和选项以下所示:
set_switching_activity
[-static_probability static_probability]
[-toggle_rate toggle_rate]
[-state_condition state_condition]
[-path_sources path_sources]
[-rise_ratio rise_ratio]
[-period period_value | -base_clock clock]
[-type object_type_list]
[-hierarchy]
[object_list]
[-verbose]
下面来简单介绍一下经常使用的几个选项,详细的介绍能够经过man set_switching_activity获取。
-static_probability :设置静态几率。
-period period_value | -base_clock clock:设置时钟(周期),-period和 -base_clock只能设置其中一个。
-toggle_rate:设置翻转值,与-period或者 -base_clock相关联。翻转率Tr等于:用-base_clock选项指定的时钟周期里面的翻转数目 或 用-period选项指定的时间段里的翻转数目;当没有这个设置两个选项时,将使用工艺库里面的时间单位,即翻转率等于在每一个库单位时间内的翻转数目。
下面来举例说明这个命令的用法:
例一:
create_clock CLK -period 20
set_switching_activity -base_clock CLK -toggle 0.5 -static 0.015 [all_inputs]
上述命令设置了时钟周期为20ns,而后命令使用的是-base_clock的选项,全部输入端的翻转值为0.5,静态几率为0.015,因而获得翻转率Tr=0 .5/20=0.025 GHz
例二:
set_switching_activity -period 1000 -toggle 25 -static 0.015 [all_inputs]
上述没有建立时钟,可是使用了period选项,意思是1000个周期内翻转了25次,因而咱们就能够获得因此输入的翻转率Tr=25/1000=0. 025 GHz
例三:
set_switching_activity -toggle 0.025 -static 0.015 [all_inputs]
上述命令中,-period和 -base_clock这两个选项都没有使用,这个时候就跟工艺库里面的时间单位有关了,若库中时间单位为ns,那么咱们就获得翻转率Tr=0.025 /1 = 0.025 GHz
上面讲解了set_switching_activity ,下面咱们就来说解一下set_case_analysis。
set_case_analysis 用来指定一个静态逻辑值,也就是设置信号为常数,不进行翻转;设计里面的一些信号须要这样子设计,例如复位信号,设置以下所示:
set_case_analysis 1 [get_ports reset]
则设置了reset的值常为1.
=================================================================================================
上面咱们讲解了设置翻转率的方法,下面举例说明一下如何综合使用这两种翻转率。例如对于下面的设计:
翻转率的设置要求以下所示:
1.正确地定义时钟;
2.使用set_case_analysis命令设置常数控制信号reset;
3.在传输起点设置翻转率,在输入端和黑盒子输出端设置任何已知的翻转率,其余的起点将使用默认的翻转率。
4.让工具在设计中把翻转率传播下去
上面的没有要求具体的翻转率,所以咱们能够设置咱们想要的翻转率,根据上面的要求,咱们编写相应的tcl脚本以下所示:
create_clock -p 4 [get_ports clk}
set_case_analysis 0 reset [get_ports reset]
set_power_default_toggle_rate 0.003
set_switching_activity -tog 0.02 a
set_switching_activity -tog 0.06 b
set_switching_activity -tog 0.11 x
上面的脚本中,设置了周期为4(ns)的时钟,而后利用set_case_analysis命令,设置reset端口为常数;翻转值为0.003,那么对应的翻转率为0.003/4ns,这个是默认的翻转率;而后利用set_switching_activity命令指定a、b、x的翻转值,其翻转率为 翻转值/4ns。
=============================================================================================
前面介绍了无向量分析法进行功耗分析,在介绍一下使用SAIF文件的方法进行功耗分析以前,咱们先来介绍一下综合不变物体和综合变化物体的概念,下图为一个电路的RTL设计和门级设计:
根据定义,在综合前和综合后,设计中的寄存器数目和寄存器的结构是不变的,输入/输出端口和层次边界是不变的,设计中的黑盒子是不变的。这些不变的物体称为综合不变物体(Synthesis Invariant Objects,有时候也叫综合不变对象)。设计中大部分的组合电路生成与设计约束有很大的关系,不一样的约束产生不一样的组合电路。这些变化的物体称为综合变化的物体(Synthesis Variant Objects)。因为SAIF文件中涉及这两个概念,这里先进行介绍。
介绍完这两个概念以后,下面咱们就来了解一下使用SAIF进行功耗分析。SAIF文件当作翻转率输入文件的方法有两种方式,也就是说利用SAIF进行功耗分析有两种方法——对RTL级的电路仿真后获得的SAIF文件(称为RTL backward SAIF) 以及 对门级网表的电路仿真后获得的文件(称为Gate backward SAIF)。下面逐个进行具体介绍。
(3)SAIF--RTL BACK分析法
RTL backward SAIF文件是经过对RTL代码进行仿真获得的,当设计很大的时候,门级仿真时间就会很长,这时候就可使用这种方法进行分析。使用这种方法进行分析功耗的速度比较快,可是进度不够门级仿真SAIF文件的高。
①RTL forward SAIF文件
RTL forward SAIF文件是记录RTL设计中综合不变物体的开关行为文件,能够简单地理解:RTL forward SAIF文件简要地记录了综合不变物的翻转率。RTL backward SAIF文件的产生须要RTL forward SAIF文件,所以咱们首先须要产生RTL forward SAIF文件。产生RTL forward SAIF文件的流程以下:
RTL forward SAIF文件是由power compiler (包含在design compiler中)产生的,根据流程,咱们知道,主要设置一些变量,而后读入RTL设计(RTL.v设计),接着读出SAIF文件就能够了。相应的脚本以下所示:
set power_preserve_rtl-hier_names true
read_verilog "sub.v top. v"
rtl2saif -output fwd_ rtl.saif
一个示例RTL forward SAIF文件里面的部份内容以下所示:
(SAIFILE
(SAIFVERSION "2 .0")
(DIRECTION "forward")
(DESIGN)
(DATE "Wed May 12 18:31:19 2004
(VENDOR "Synopsys,Inc")
(PROGRAM NAME "rtl2saif")
(VERSION“1 .0")
(DIVIDER/)
(INSTANCE top
(PORT
(address\15\ address\15\)
(address\14\ address\14\)
(address\13\ address\13\)
(address\12\ address\12\)
(address\11\ address\11\)
(address\10\ address\10\)
······
咱们能够看到,文件里面包含设计中一系列综合不变的物体。在后续仿真中,仿真器只监视这些物体的开关行为。
②RTL backward SAIF文件的产生
下面是产生RTL backward SAIF文件的流程:
从上图中,咱们知道,产生RTL backward SAIF文件,须要在仿真器输入testbench测试平台文件、RTL.v设计、RTL forward SAIF文件,而后使用VCS产生RTL forward SAIF文件时,须要在testbench调用PLI监测节点的翻转率。下面咱们就来介绍一下这几个部分。
·首先是PLI。使用VCS产生SAIF文件,须要用到程序设计语言接口(programming language interface,PLI)。经过PLI监测节点的翻转,获得节点的翻转率。主要须要下面的系统任务:
$set_gate_level_monitoring ( on|off|rtl_on);
$set_toggle_region (obj);
$read_ rtl_ saif(rtl_saif_file_name,tb_pathname);
$read_ lib_ saif(lib_saif_file_name);
$toggle_start;
$toggle_stop;
$toggle_reset();
$toggle_report(file_name,type,unit);
· RTL.v就是设计源文件了,而后RTL forward SAIF文件在前面也讲过了,这里就从略。
· 最后是testbench。testbench中调用RTL设计、调用一下上述的PLI系统函数、调用RTL forward SAIF文件等。一个简单的示例testbench文件以下所示:
module testbench;
top instl (a, b, c,s);//例化顶层设计
initial begin
$read_rtl_saif ("myrtl.saif")
$set_toggle_region (u1);
$toggle_start;
#120 a=0;
#STEP in_a=temp_in_a;
······
$toggle_stop;
$toggle_report("rtl.saif",1.0e-9,"top");
end
endmodule
上面的测试平台中,用了系统任务程序$read_rtl_saif ("myrtl. saif"),该命令读入综合不变物体文件——RTL forward SAIF。所以,仿真时,仿真器仅仅监视这些综合不变物体的开关行为。向量中$set_toggle_region (u1)命令选择要监视的模块。$toggle_start和$toggle_stop命令用于控制监视的起始和终止时间。$toggle_report("rtl. saif",1. 0e-9,"top")命令输出SAIF信息到指定的文件。
一块儿都准备就绪了,下面就可使用VCS运行仿真:
vcs -R rtl. v testbench. v
注意,这里咱们进行的是RTL设计文件的仿真,仿真完成后,就能够获得rtl.saif 文件,这个文件就是RTL backward SAIF文件。
③功耗的分析
对RTL代码仿真后,所获得的RTL Backward SAIF文件包含了设计中综合不变物体的开关行为信息。进行功耗分析时,分析工具经过其内部仿真器把综合不变物体的翻转率传播下去,从而获得其余全部节点的翻转率,进行门级电路的功耗分析。获得了RTL backward SAIF文件以后,咱们根据前面的功耗分析的流程(从输入输出关系看),就能够分析功耗了:
这里的开关活动文件就是RTL backward SAIF文件了。而后在power compiler中利用RTL backward SAIF文件进行功耗分析的流程以下所示:
一个相应的示例脚本以下所示:
set target_library my. db
set link_library "* $target_library"
read_verilog mynetlist.v
current_design top
link
read_ saif -input rtl.saif -inst testbench/top
report_power
利用RTL backward SAIF文件分析功耗的过程就是上面这个样子了。上面的流程和脚本适用于前版图(pre-layout)的设计,没有用到寄生参数文件。连线的RC参数使用工艺库里的线负载模型。若是是后版图(post-layout)的设计,要尽可能使用寄生参数文件,提升功耗分析的精确度。
从上面咱们就知道,利用RTL backward SAIF文件分析功耗的流程就是:
power compiler 产生 RTL forward SAIF文件 ——》VCS仿真产生RTL backward SAIF文件 ——》power compiler 进行分析功耗。
(4)SAIF--GATE分析法
前面介绍了RTL backward SAIF文件分析功耗的方法和流程,下面介绍一下Gate backward SAIF文件分析功耗的方法和流程,这个与RTL backward SAIF文件的很相似。
①library forward SAIF 文件(简称为 库SAIF文件)
库SAIF文件是包含SDPD(电路状态路径)信息的SAIF文件。Gate backward SAIF文件的生成须要库SAIF文件,该文件能够经过power compiler生成,流程以下所示:
对应该流程的一个示例脚本以下所示:
read_db mylib.db
lib2saif -output mylib. saif -lib_pathname mylib.db
示例库SAIF文件的部份内容以下所示:
(SAIFILE
(SAIFVERSION "2.0" "lib")
(DIRECTION "forward")
(DESIGN)
(DATE "Mon May 10 15:40:19 2004"
(VENDOR "Synopsys,Inc")
(PROGRAM NAME "lib2saif")
(DIVIDER / )
(LIBRARY "ssc_core_typ"
(MODULE "and2al"
(PORT
(Y
(COND A RISE FALL (IOPATH B)
COND B RISE FALL(IOPATH A)
COND DEFAULT)
)
······
库SAIF文件中包含了SDPD信息。有了库SAIF文件,仿真时,仿真器会根据库中的SDPD信息,监视节点的开关行为。
②Gate Backward SAIF文件的生成
下面是产生gate backward SAIF文件的流程:
从上图中咱们能够看到,产生gate backward SAIF须要testbench测试平台、门级网表、标准延时格式(standard delay format)文件SDF、库SAIF文件。其中SDF文件反标了门级网表中的RC延时参数等,能够更为准确地获得线网的延时。
testbench的示例内容以下所示:
module testbench;
top instl (a, b, c,s);
initial
$sdf_annotate("my.sdf",dut)
initial begin
$read_lib_saif ("mylib.saif");
$set_toggle_region (u1);
$toggle_start;
#120 a=0;
#STEP in_ a=temp_in_a;
······
$toggle_stop;
$toggle-report("gate.saif",1.0e-9,"top")
end
endmodule//testbench
testbench测试平台主要是调用门级网表、SDF文件、库SAIF文件。testbench中,用$sdf_annotate("my. sdf", dut)命令做SDF标记,以保证时序的正确性,从而获得正确的翻转数目。$ read_lib_saif ("mylib. saif")命令读取库SAIF文件中的SDPD信息。仿真器只监视在SAIF文件里列出的SDPD开关行为。$ set_toggle_region (u1)命令选择要监视的模块。$ toggle_start和$toggle_stop命令控制开始和结束时间。$ toggle_report("gate. saif",1. 0e-9, "top")命令把SAIF输出到指定的文件。
万事俱备,只欠仿真,接下来就是使用VCS进行仿真了:
vcs -R top.v testbench. v
注意,这里的仿真是对门级网表的仿真,也就是说这里的top.v是门级网表。产生的示例gate forward SAIF文件的部份内容以下所示:
(SAIFILE
(SAIFVERSION "2 .0")
(DIRECTION "backward")
(DESIGN)
(DATE "Mon May 17 02:33:48 2006")
(VENDOR "Synopsys,Inc")
(PROGRAM_NAME "VCS-Scirocco-MX Power Compiler")
(VERSION "1 .0")
(DIVIDER / )
(TIMESCALE 1 ns)
(DURATION 10000.00)
(INSTANCE tb
(INSTANCE top
(NET
(z\3\
(T0 6488) (T1 3493) (TX 18)
(TC 26) (IG 0)
)
······
(z\32\
(T0 6488) (T1 3493) (TX 18)
(TC 26)(IG 0)
)
······
)
(INSTANCE U3
(PORT
(Y
(TO 4989) (T1 5005) (TX 6)
(COND((D1 * !DO)|(! D1*D0)) (RISE)
(IOPATH S (TC 22 )(IG 0)
)
COND((D1*!DO)}(!D1,DO))
( IOPATH S (TC 21)(IG 0) (FALL)
)
COND DEFAULT (TC 0)(IG 0)
)
······
Gate Backward SAIF文件是经过对门级网表进行仿真所获得的。若是设计很大,仿真须要的时间很长。好处是精确度很高。VCS所产生的Gate Backward SAIF文件中包含了一些或全部连线的开关行为和单元的开关行为。这些开关行为分别以上升和降低表示,与状态和路径有关。用这个信息能够进行精确的功耗分析。
③功耗分析
有了门级网表、gate backward SAIF文件和SDF文件,就能够在power compiler中进行功耗分析了,分析功耗的流程图以下所示:
对应的一个示例脚本文件以下所示:
set target_library mylib.db
set link_library " * $target_library"
read_verilog mynetlist.v
current_design top
link
read_read_parasitics top.spef
read_ saif -input mygate. saif -inst tb/top
report_power
上面的流程和脚本适用于后版图(post-layout)的设计,spef文件在作完版图后产生。使用寄生参数文件,提升了功耗分析的精确度。若是是前版图( pre-layout)的设计,没有寄生参数文件,连线的RC参数使用工艺库里的线负载模型。
最后总结一下,这里分析功耗流程为:
power compiler 产生库SAIF文件——》VCS产生gate backward SAIF文件——》power compiler进行功耗分析。
(5)VCD转SAIF分析法
前介绍了使用SAIF文件分析功耗的方法,这个方法都是经过VCS仿真获得相应的SAIF文件,而后进行功耗分析。下面咱们介绍使用VCD文件转换成SAIF文件的方法,而后进行功耗分析。
①VCD文件的产生
首先,咱们在进行仿真的时候,须要经过在testbench中加入相关的系统函数,产生相应的VCD文件(和SDF文件),流程示意图以下所示:
相应的一个示例testbench以下所示:
module testbench;
······
initial
$sdf_annotate("my.sdf",dut)
initial begin
$dumpfile("vcd.dump");
$dumpvars;
······
endmodule
而后使用下面命令进行仿真:
vcs -R dut.v testbench.v +delay_mode_path
完成仿真以后,就能够获得VCD文件了。
②VCD文件转换成SAIF文件
仿真时产生的VCD文件也包含了设计中节点和连线的开关行为。在Power Compiler中,可使用程序vcd2saif能够把VCD文件转化为SAIF文件,以下图所示:
vcd2saif是在UNIX命令行使用的一个程序。vcd2saif程序也能够把VPD文件(二进制格式的VCD文件)转化为SAIF格式的文件。若是设计很大,仿真的时间长,vcd2saif程序能够用管道传递的方式把VCD转化为SAIF文件。这时vcd文件不存放在文件里,vcd经过先入先出(First-In First-()nt,简称FIFO把数据传给vcd2saif程序,而后产生SAIF文件。转换的SAIF文件里没有SDPD的信息。以下图所示:
有了SAIF文件以后,咱们就能够像前面那样使用SAIF文件进行功耗分析了,至因而版图前的功耗分析仍是版图后的功耗分析,取决于功耗分析时有没有与版图中有关的信息,好比是SPEF文件。所以流程为:
VCS产生VCD文件——》power compiler 将VCD文件转换为SAIF文件——》power compiler 进行分析功耗
最后,咱们来讲一下这里使用vcd2saif程序的好处,主要有下面三点:
1. VCD产生的速度快;
2. VCD是IEEE的标准而且适用于进行后仿真;
3. 转换的过程快。
=============================================================================================
咱们已经介绍四种为设计产生开关行为的方法,分别是直接设置翻转率、RTL backward SAIF文件、gate back SAIF文件和VCD转SAIF文件;这些方法能够混合使用,其优先次序以下所示:
用read_ saif命令标记的开关行为优先级最高;用set_switching_activity命令设置的开关行为优先级次之;优先级最低的是用默认的变量power_default_toggle_rate指定的翻转率。
开关行为能够被清除,使用“reset_switching_activity”命令能够清除全部被标记的翻转率和经过传输获得的翻转率。用report_saif能够显示读入saif文件后设计中的开关行为信息。一个完整的SAIF文件,"user annotated”应该是100%。若是SAIF不完整,那么默认的翻转率将附加到输入端和黑盒子的输出端。翻转率经过零延迟仿真传输下去,这样就能够计算出设计的功耗。
使用report_saif命令的一个例子以下:
与开关行为有关的命令有:
merge_saif #合并SAIF文件
read_sai f #读backward SAIF文件
report_saif #报告开关行为的信息
rtl2saif #产生RTL forward SAIF文件
write_ saif #写出一个backward SAIF文件
lib2saif #产生library forward SAIF文件
propagate_switching_activity #传输功耗清除
reset_switching_activity #清除开关行为和/或翻转率
set_switching_activity #在指定的物体上设置开关行为
(6)功耗分析报告
咱们是经过分析功耗报告(report_power命令产生)来查看设计功耗的,一个功耗报告的示例部份内容以下所示:
Cell Internal Power=883.0439 mW(66%)
Net Switching Power=453.0173 mW(34%)
Total Dynamic Power=1 .3361 W(100%)
Cell Leakage Power = 391.5133 nW
其中第一项为内部短路功耗,第二项为开关功耗,合起来为动态功耗;最后一项为静态功耗,也就是泄漏功耗。若是要报告设计中每一个模块和单元的功耗,在report_power命令后加选项 -hier,例如: report_power -hier,产生的报告以下所示:
基于EDA工具——power compiler 的功耗分析就记到这里。