数字电路低功耗设计二Word文件下载.docx

上传人:b****1 文档编号:1064446 上传时间:2023-04-30 格式:DOCX 页数:28 大小:1.36MB
下载 相关 举报
数字电路低功耗设计二Word文件下载.docx_第1页
第1页 / 共28页
数字电路低功耗设计二Word文件下载.docx_第2页
第2页 / 共28页
数字电路低功耗设计二Word文件下载.docx_第3页
第3页 / 共28页
数字电路低功耗设计二Word文件下载.docx_第4页
第4页 / 共28页
数字电路低功耗设计二Word文件下载.docx_第5页
第5页 / 共28页
数字电路低功耗设计二Word文件下载.docx_第6页
第6页 / 共28页
数字电路低功耗设计二Word文件下载.docx_第7页
第7页 / 共28页
数字电路低功耗设计二Word文件下载.docx_第8页
第8页 / 共28页
数字电路低功耗设计二Word文件下载.docx_第9页
第9页 / 共28页
数字电路低功耗设计二Word文件下载.docx_第10页
第10页 / 共28页
数字电路低功耗设计二Word文件下载.docx_第11页
第11页 / 共28页
数字电路低功耗设计二Word文件下载.docx_第12页
第12页 / 共28页
数字电路低功耗设计二Word文件下载.docx_第13页
第13页 / 共28页
数字电路低功耗设计二Word文件下载.docx_第14页
第14页 / 共28页
数字电路低功耗设计二Word文件下载.docx_第15页
第15页 / 共28页
数字电路低功耗设计二Word文件下载.docx_第16页
第16页 / 共28页
数字电路低功耗设计二Word文件下载.docx_第17页
第17页 / 共28页
数字电路低功耗设计二Word文件下载.docx_第18页
第18页 / 共28页
数字电路低功耗设计二Word文件下载.docx_第19页
第19页 / 共28页
数字电路低功耗设计二Word文件下载.docx_第20页
第20页 / 共28页
亲,该文档总共28页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

数字电路低功耗设计二Word文件下载.docx

《数字电路低功耗设计二Word文件下载.docx》由会员分享,可在线阅读,更多相关《数字电路低功耗设计二Word文件下载.docx(28页珍藏版)》请在冰点文库上搜索。

数字电路低功耗设计二Word文件下载.docx

(节点)信号的逻辑值为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文件:

即switchingactivityinterchangeformat,开关行为部交换格式文件,用于仿真器和功耗分析之间交换信息的ASCII文件(美国标准信息交换码文件)。

VCD文件,即valuechangedump文件,它也是一个ASCII文件,文件中包括了一个设计中所选择变量值的变化信息,这些信息通过在仿真testbench中使用“VCD系统函数”得到。

在Synopsys的低功耗设计流程里面,可以使用powercompiler(包含在designcompiler中)进行功耗分析。

我们可以通过命令来定义节点的翻转率的方法来分析功耗----称为无向量(vector-free)分析法;

由于SAIF文件和VCD文件可以通过对电路仿真得到,它们是仿真接口格式文件,因此也可以通过VCS仿真器产生SAIF或者VCD文件的方法分析功耗。

当要分析的结果比较精确时,一般使用SAIF文件或者VCD文件(VCD文件通过相关命令转换成SAIF文件,而后使用SAIF进行功耗分析)。

  

(2)无向量分析法

  前面我们说到,无向量分析法就是通过命令来定义节点的翻转率的方法来分析功耗。

我们先来逐条学习需要什么的命令,然后在后面进行举例说明无向量分析法的脚本。

  在学习设置翻转率的命令之前,我们先来了解一下什么是设计的传播起点和黑盒子。

我们定义传播的起点为设计的输入端和黑盒子的输出端,黑盒子是指在工艺库里没有功能描述的单元(比如ROM、RAM或者一些IP核)。

例如对于下面的设计中:

                      

  上面的设计有三处起点,一处是整个设计的输入端,一处是黑盒子的输出端,还有一处是某个单元的输入端。

最后一处的起点不包含在我们的定义中,但是我们也把它当做起点,因为这是被标记了翻转率,这个我们后面进行讲解。

  利用无向量分析法分析功耗时,我们不必提供设计部节点的翻转率,而是通过设置起点的翻转率就行了。

我们有两种方法设置翻转率,一种是通过设置翻转变量,一种是通过标记的方法。

下面我们就来介绍如何通过这两种方法进行设置翻转率。

①设置翻转变量

在powercompiler中,可以设置下面的两个翻转变量进行设置翻转率:

  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

[-static_probabilitystatic_probability]

[-toggle_ratetoggle_rate]

[-state_conditionstate_condition]

[-path_sourcespath_sources]

[-rise_ratiorise_ratio]

[-periodperiod_value|-base_clockclock]

[-typeobject_type_list]

[-hierarchy]

[object_list]

[-verbose]

下面来简单介绍一下常用的几个选项,详细的介绍可以通过manset_switching_activity获取。

  -static_probability 

设置静态概率。

  -period 

 

period_value|-base_clockclock:

设置时钟(周期),-period和-base_clock只能设置其中一个。

  -toggle_rate:

设置翻转值,与-period或者-base_clock相关联。

翻转率Tr等于:

用-base_clock选项指定的时钟周期里面的翻转数目 

或用-period选项指定的时间段里的翻转数目;

当没有这个设置两个选项时,将使用工艺库里面的时间单位,即翻转率等于在每个库单位时间的翻转数目。

下面来举例说明这个命令的用法:

例一:

    create_clockCLK-period20

    set_switching_activity 

-base_clock 

CLK 

-toggle 

0.5 

0.015 

[all_inputs]

上述命令设置了时钟周期为20ns,然后命令使用的是-base_clock的选项,所有输入端的翻转值为0.5,静态概率为0.015,于是得到翻转率Tr=0.5/20=0.025GHz

例二:

    set_switching_activity-period 

1000 

25 

上述没有创建时钟,但是使用了period选项,意思是1000个周期翻转了25次,于是我们就可以得到所以输入的翻转率Tr=25/1000=0.025GHz

例三:

    set_switching_activity-toggle 

0.025 

0.015[all_inputs]

上述命令中,-period和-base_clock这两个选项都没有使用,这个时候就跟工艺库里面的时间单位有关了,若库中时间单位为ns,那么我们就得到翻转率Tr=0.025/1=0.025GHz

  上面讲解了set_switching_activity,下面我们就来讲解一下set_case_analysis。

  set_case_analysis 

用来指定一个静态逻辑值,也就是设置信号为常数,不进行翻转;

设计里面的一些信号需要这样子设计,例如复位信号,设置如下所示:

    set_case_analysis 

[get_portsreset]

则设置了reset的值常为1.

=================================================================================================

  上面我们讲解了设置翻转率的方法,下面举例说明一下如何综合使用这两种翻转率。

例如对于下面的设计:

              

翻转率的设置要求如下所示:

  1.正确地定义时钟;

  2.使用set_case_analysis命令设置常数控制信号reset;

  3.在传输起点设置翻转率,在输入端和黑盒子输出端设置任何已知的翻转率,其他的起点将使用默认的翻转率。

  4.让工具在设计中把翻转率传播下去

上面的没有要求具体的翻转率,因此我们可以设置我们想要的翻转率,根据上面的要求,我们编写相应的tcl脚本如下所示:

  create_clock 

-p 

[get_portsclk}

  set_case_analysis 

reset 

[get_ports 

reset]

  set_power_default_toggle_rate 

0.003

  set_switching_activity-tog0.02 

a

  set_switching_activity-tog0.06 

b

  set_switching_activity-tog0.11 

x

上面的脚本中,设置了周期为4(ns)的时钟,然后利用set_case_analysis命令,设置reset端口为常数;

翻转值为0.003,那么对应的翻转率为0.003/4ns,这个是默认的翻转率;

然后利用set_switching_activity命令指定a、b、x的翻转值,其翻转率为翻转值/4ns。

=============================================================================================

  前面介绍了无向量分析法进行功耗分析,在介绍一下使用SAIF文件的方法进行功耗分析之前,我们先来介绍一下综合不变物体和综合变化物体的概念,下图为一个电路的RTL设计和门级设计:

根据定义,在综合前和综合后,设计中的寄存器数目和寄存器的结构是不变的,输入/输出端口和层次边界是不变的,设计中的黑盒子是不变的。

这些不变的物体称为综合不变物体(SynthesisInvariantObjects,有时候也叫综合不变对象)。

设计部分的组合电路生成与设计约束有很大的关系,不同的约束产生不同的组合电路。

这些变化的物体称为综合变化的物体(SynthesisVariantObjects)。

由于SAIF文件中涉及这两个概念,这里先进行介绍。

  介绍完这两个概念之后,下面我们就来了解一下使用SAIF进行功耗分析。

SAIF文件当做翻转率输入文件的方法有两种方式,也就是说利用SAIF进行功耗分析有两种方法——对RTL级的电路仿真后得到的SAIF文件(称为RTLbackwardSAIF) 

以及 

对门级网表的电路仿真后得到的文件(称为GatebackwardSAIF)。

下面逐个进行具体介绍。

  (3)SAIF--RTLBACK分析法

  RTL 

backward 

SAIF文件是通过对RTL代码进行仿真得到的,当设计很大的时候,门级仿真时间就会很长,这时候就可以使用这种方法进行分析。

使用这种方法进行分析功耗的速度比较快,但是进度不够门级仿真SAIF文件的高。

①RTL 

forward 

SAIF文件

SAIF文件是记录RTL设计中综合不变物体的开关行为文件,可以简单地理解:

RTL 

SAIF文件简要地记录了综合不变物的翻转率。

SAIF文件的产生需要RTL 

SAIF文件,因此我们首先需要产生RTLforward 

SAIF文件。

产生RTL 

forward 

SAIF文件的流程如下:

  RTL 

SAIF文件是由powercompiler(包含在designcompiler中)产生的,根据流程,我们知道,主要设置一些变量,然后读入RTL设计(RTL.v设计),接着读出SAIF文件就可以了。

相应的脚本如下所示:

    set 

power_preserve_rtl-hier_names 

true

    read_verilog 

"

sub.vtop.v"

    rtl2saif 

-output 

fwd_rtl.saif

一个示例RTL 

SAIF文件里面的部分容如下所示:

(SAIFILE

(SAIFVERSION"

2.0"

(DIRECTION"

forward"

(DESIGN)

(DATE"

WedMay1218:

31:

192004

(VENDOR"

Synopsys,Inc"

(PROGRAMNAME"

rtl2saif"

(VERSION“1.0"

(DIVIDER/)

(INSTANCEtop

(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 

SAIF文件的产生

下面是产生RTLbackwardSAIF文件的流程:

从上图中,我们知道,产生RTLbackwardSAIF文件,需要在仿真器输入testbench测试平台文件、RTL.v设计、RTLforwardSAIF文件,然后使用VCS产生RTLforwardSAIF文件时,需要在testbench调用PLI监测节点的翻转率。

下面我们就来介绍一下这几个部分。

首先是PLI。

使用VCS产生SAIF文件,需要用到程序设计语言接口(programming 

languageinterface,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就是设计源文件了,然后RTLforwardSAIF文件在前面也讲过了,这里就从略。

最后是testbench。

testbench中调用RTL设计、调用一下上述的PLI系统函数、调用RTLforwardSAIF文件等。

一个简单的示例testbench文件如下所示:

module 

testbench;

topinstl(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 

SAIF。

因此,仿真时,仿真器仅仅监视这些综合不变物体的开关行为。

向量中$set_toggle_region(u1)命令选择要监视的模块。

$toggle_start和$toggle_stop命令用于控制监视的起始和终止时间。

rtl.saif"

1.0e-9,"

)命令输出SAIF信息到指定的文件。

  一起都准备就绪了,下面就可以使用VCS运行仿真:

    vcs 

-R 

rtl.v 

testbench.v

注意,这里我们进行的是RTL设计文件的仿真,仿真完成后,就可以得到rtl.saif 

文件,这个文件就是RTL 

backwardSAIF文件。

③功耗的分析

  对RTL代码仿真后,所得到的RTLBackwardSAIF文件包含了设计中综合不变物体的开关行为信息。

进行功耗分析时,分析工具通过其部仿真器把综合不变物体的翻转率传播下去,从而得到其他所有节点的翻转率,进行门级电路的功耗分析。

得到了RTLbackwardSAIF文件之后,我们根据前面的功耗分析的流程(从输入输出关系看),就可以分析功耗了:

这里的开关活动文件就是RTLbackwardSAIF文件了。

然后在powercompiler中利用RTLbackwardSAIF文件进行功耗分析的流程如下所示:

                

一个相应的示例脚本如下所示:

target_library 

my.db

link_library 

$target_library"

mynetlist.v

    current_designtop

    link

    read_saif 

-input 

rtl.saif 

-inst 

testbench/top

    report_power

  利用RTLbackwardSAIF文件分析功耗的过程就是上面这个样子了。

上面的流程和脚本适用于前版图(pre-layout)的设计,没有用到寄生参数文件。

连线的RC参数使用工艺库里的线负载模型。

如果是后版图(post-layout)的设计,要尽量使用寄生参数文件,提高功耗分析的精确度。

  从上面我们就知道,利用RTLbackwardSAIF文件分析功耗的流程就是:

powercompiler产生RTLforwardSAIF文件——》VCS仿真产生RTL 

backwardSAIF文件——》powercompiler进行分析功耗。

  (4)SAIF--GATE分析法

  前面介绍了RTLbackwardSAIF文件分析功耗的方法和流程,下面介绍一下Gateback

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 能源化工

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2