数字电路低功耗设计(二)_第1页
数字电路低功耗设计(二)_第2页
数字电路低功耗设计(二)_第3页
数字电路低功耗设计(二)_第4页
数字电路低功耗设计(二)_第5页
已阅读5页,还剩36页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、前面学习了进行低功耗的目的个功耗的构成, 今天就来分享一下功耗 的分析。由于是面向数字IC前端设计的学习,所以这里的功耗分析 是基于DC中的power compiler工具;更精确的功耗分析可以采用 PT,关于PT的功耗分析可以查阅其他资料, 这里不涉及使用PT的进 行功耗分析。 (1)功耗分析与流程概述 上一个小节中讲解了功耗的构成,并且结合工艺库进行简要地介 绍了功耗的计算。但是实际上,我们根本不可能人工地计算实际的大 规模集成电路的功耗,我们往往借助 EDA工具帮我们分析电路的功 耗。这里我们就介绍一下EDA工具分析功耗的(普遍)流程,然后下一 小节我们将介绍低功耗电路的设计和优化。 功

2、耗分析流程的输入输出 功耗分析的流程(从输入输出关系看)如下所示: 上面的图中,需要四种东西: tech library:这个就是包含功耗信息的工艺库了,比较精确 的库里面还应该包含 状态路径(SDPD信息,代工厂提供。 netlist :设计的门级网表电路,可以通过 DC综合得到。 -parasitic :设计中连线等寄生参数,比如寄生电容、寄生电阻, 这个一般是后端RC寄生参数工具提供,简单的功耗分析可以不需要 这个文件。 switch activity :包含设计中每个节点的开关行为情况,比如 说节点的翻转率或者可以计算出节点翻转率的文件。这个开关行为输 入文件是很重要的。这个开关行为可

3、以有不同的形式提供,因此就有 后面不同的分析功耗的方法。 (注意,不管使用什么方法进行功耗分析, 功耗分析的时候,输入设 计文件的都是门级网表文件) 开关行为的一些概念 说到开关行为,我们前面的翻转率也是一种开关行为。此外我们 还有其他关于开关行为描述的概念, 这里我们通过举例说明,如下图 所示: 翻转(次)数:逻辑变化的次数,上图中信号的翻转数为3. 翻转率:前面也有相关介绍,这里重提一下,翻转率是单位时 间内信号(包括时钟、数据等等信号)的翻转次数。上图中翻转率为 3/6 = 0.5(6 个时间间隔内,翻转了 3次) T1,T0:(节点)信号的逻辑值为1和0的持续时间,上图中T1 为4,

4、T0为2。 静态概率(staticprobability , SP):(节点)信号逻辑值为 1的概率,上图中的SP为4/6=2/3。 开关行为(文件)情况表示 前面我们说到了功耗的分析需要开关行为的情况,一般就是指每个节 点的翻转率情况,我们有下面方式设置翻转率: 直接命令进行:例如命令: set_switch in g_activity-static0.2 -toggle_rate 20 -period 1000 all_i nputs 这时,翻转率设置的节点是输入,响应的翻转率为:Tr = 20/1000 = 0.02GHz SAIF文件:即 switching activity inte

5、rchange format,开 关行为内部交换格式文件,用于仿真器和功耗分析之间交换信息的 ASCII文件(美国标准信息交换码文件)。 VCD文件,即 value change dump 文件,它也是一个 ASCII 文 件,文件中包括了一个设计中所选择变量值的变化信息,这些信息通 过在仿真testbench中使用“ VCD系统函数”得到。 在Synopsys的低功耗设计流程里面,可以使用 power compiler (包含在design compiler中)进行功耗分析。我们可以通过命令来 定义节点的翻转率的方法来分析功耗-称为无向量(vector-free) 分析法;由于SAIF文件和

6、VCD文件可以通过对电路仿真得到,它们是 仿真接口格式文件,因此也可以通过 VCS仿真器产生SAIF或者VCD 文件的方法分析功耗。当要分析的结果比较精确时,一般使用SAIF 文件或者VCD文件(VCD文件通过相关命令转换成 SAIF文件,而后 使用SAIF进行功耗分析)。 (2)无向量分析法 前面我们说到,无向量分析法就是 通过命令来定义节点的翻转率 的方法来分析功耗。我们先来逐条学习需要什么的命令, 然后在后面 进行举例说明无向量分析法的脚本。 在学习设置翻转率的命令之前,我们先来了解一下什么是设计的 传播起点和黑盒子。我们定义传播的起点为设计的输入端和黑盒子的 输出端,黑盒子是指在工艺库

7、里没有功能描述的单元(比如 ROM、 RAM或者一些IP核)。例如对于下面的设计中: 上面的设计有三处起点,一处是整个设计的输入端,一处是黑盒 子的输出端,还有一处是某个单元的输入端。最后一处的起点不包含 在我们的定义中,但是我们也把它当做起点,因为这是被标记了翻转 率,这个我们后面进行讲解。 利用无向量分析法分析功耗时,我们不必提供设计内部节点的翻 转率,而是通过设置起点的翻转率就行了。我们有两种方法设置翻转 率,一种是通过设置翻转变量,一种是通过标记的方法。下面我们就 来介绍如何通过这两种方法进行设置翻转率。 设置翻转变量 在power compiler中,可以设置下面的两个翻转变量进行设

8、置翻转 率: 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 变量

9、定义的翻转率就以最快的时钟为参考, 比如翻转值为0.5时,设计中 最快的时钟为10ns,那么翻转率Tr = 0.5/10ns = 0.05GHz ,也就是 整个设计中默认的翻转率是 0.05GHz 如果设计中没有时钟,那么就会以工艺库中的时间单位作为参 考,例如工艺库中的时间单位是 ns,翻转值为0.5,那么翻转率Tr = 0.5/1 ns = 0.5GHz。 power_default_static_probability:这个设置的是默认的静态 概率,也就是起点的逻辑值是1的概率。至于静态概率,这里就不详 细描述了。这两个变量的默认翻转值都是0.5,翻转率是很大的,一 般情况下需要减小一点

10、,比如设置为0.01和0.02这样的。 一般情况下,默认的翻转率是设置在起点上的,也就是说起点的 翻转率用的是power_default_toggle_rate这个变量设置的翻转率, I SpA)/6-0.ti6 Tr(AJ-J/6-0 5 : 内部节点的翻转率可以通过传播得到,如下图所示: 腻?)2/6专一33 loom Sp( =4/6=0.6b LTL lltoic A 阳-0丄 玄沪,c 100010 C的詡转率可以通过A和B的观 ;jp- 圭 1二 ToSfJc Prnpagacit 需要说明的是,传播不可以穿过没有功能描述的黑盒子,也就是 不能通过传播的方式得到黑盒子的输出翻转率,

11、因此我们在最前面就 定义了,将黑盒子的输出当做起点,这样其他节点的翻转率可以通过 传播得到(包括黑盒子的输入),黑盒子输出的翻转率通过默认设置 的翻转率得到,我们就得到了设计中所有节点的翻转率。 标记翻转率 上面的方式设置的是 默认的翻转率。当我们需要为某个节点标记 某个指定的翻转率,而不是使用默认的翻转率时,我们就用到了标记 频率,如下图所示: 起点 单元A的输入端口标记了特定翻转率,比如说 0.04GHzo标记的翻转 率比传播的翻转率优先级更高,被标记翻转率的节点将作为一个新的 起点,这就不属于起点的定义,但还是叫它为起点的原因。标记翻转 率之后,这个单元后续的节点的翻转率将通过这个新标记

12、的翻转率传 播得到。 设置标记翻转率(简称设置翻转率)的命令主要有两条: set_switch in g_activity禾口 set_case_a nalysis,下面就 来讲解一下这两条命令的意思。 set_switchi ng_activity:设置某个节点的翻转率和静态概 率,在使用无向量分析法估算功耗的时候,这个命令被广泛使用,越 多的节点上被标记翻转率,估算功耗的精度就越高。命令和选项如下 所示: set_switchi ng_activity -static_probability static_probability -toggle_rate toggle_rate -stat

13、e_c on diti on state_c on diti on -path_sources path_sources -rise_ratio rise_ratio -period period_value | -base_clock clock -type object_type_list -hierarchy object_list -verbose 下面来简单介绍一下常用的几个选项,详细的介绍可以通过man set_switch in g_activity 获取。 -static_probability:设置静态概率。 -periodperiod_value | -base_clock

14、 clock:设置时钟 (周期),-period和-base_clock 只能设置其中一个。 -toggle_rate :设置翻转值,与-period 或者-base_clock 相关 联。翻转率Tr等于:用-base_clock选项指定的时钟周期里面的翻 转数目 或 用-period选项指定的时间段里的翻转数目;当没有这 个设置两个选项时,将使用工艺库里面的时间单位,即翻转率等于在 每个库单位时间内的翻转数目。 下面来举例说明这个命令的用法: 例一: create_clock CLK -period 20 set_switchi ng_activity-base_clock CLK -tog

15、gle0 .5 -static 0.015all_i nputs 上述命令设置了时钟周期为20ns,然后命令使用的是-base_clock的 选项,所有输入端的翻转值为0.5,静态概率为0.015,于是得到翻 转率 Tr=0 .5/20=0.025 GHz 例二: set_switchi ng_activity -period 1000 -toggle 25 -static 0.015 all_i nputs 上述没有创建时钟,但是使用了 period选项,意思是1000个周期内 翻转了 25次,于是我们就可以得到所以输入的翻转率 Tr=25/1000=0. 025 GHz 例三: set_s

16、witchi ng_activity -toggle 0.025 -static 0.015 all_i nputs 上述命令中,-period和-base_clock这两个选项都没有使用,这个 时候就跟工艺库里面的时间单位有关了,若库中时间单位为 ns,那么 我们就得到翻转率 Tr=0.025 /1 = 0.025 GHz 上面讲解了 set_switching_activity,下面我们就来讲解一下 set_case_a nalysis 。 set_case_a nalysis用来指定一个静态逻辑值,也就是设置信 号为常数,不进行翻转;设计里面的一些信号需要这样子设计,例如 复位信号,设置

17、如下所示: set_case_a nalysis1 get_ports reset 则设置了 reset的值常为1. 上面我们讲解了设置翻转率的方法,下面举例说明一下如何综合 使用这两种翻转率。例如对于下面的设计: 翻转率的设置要求如下所示: 1. 正确地定义时钟; 2. 使用set_case_analysis 命令设置常数控制信号reset; 3. 在传输起点设置翻转率,在输入端和黑盒子输出端设置任何已 知的翻转率,其他的起点将使用默认的翻转率。 4. 让工具在设计中把翻转率传播下去 上面的没有要求具体的翻转率,因此我们可以设置我们想要的翻转 率,根据上面的要求,我们编写相应的tcl脚本如下

18、所示: create_clock -p 4 get_ports clk set_case_a nalysis 0 reset get_ports reset set_power_default_toggle_rate0.003 set_switchi ng_activity -tog 0.02a set_switchi ng_activity -tog 0.06b set_switchi ng_activity -tog 0.11x 上面的脚本中,设置了周期为 4(ns)的时钟,然后利用 set_case_analysis 命令,设置reset端口为常数;翻转值为0.003 , 那么对应的翻转

19、率为0.003/4ns,这个是默认的翻转率;然后利用 set_switching_activity命令指定a、b、x的翻转值,其翻转率为翻 转值/4ns。 前面介绍了无向量分析法进行功耗分析,在介绍一下使用SAIF 文件的方法进行功耗分析之前,我们先来介绍一下 综合不变物体和综 合变化物体的概念,下图为一个电路的RTL设计和门级设计: (jitc I cipl ncihM 41 -A*B Svnlhe Ji nihey is. l(n ananl Objccl-s vntheiis Vnmnr i ibicl hnk lihrar reaJ ,事if re port power 一个相应的示例

20、脚本如下所示: read yrilog rend vhdl Report ptiv cr rcaddh hnk J* set target_library my. db setlin k_library $target_library read_verilog myn etlist.v curre nt_desig n top link read saif -in put rtl.saif -inst testbe nch/top report_power 利用RTLbackward SAIF文件分析功耗的过程就是上面这个样子 了。上面的流程和脚本适用于前版图(pre-layout)的设计,没

21、有用到 寄生参数文件。连线的RC参数使用工艺库里的线负载模型。如果是 后版图(post-layout)的设计,要尽量使用寄生参数文件,提高功耗 分析的精确度。 从上面我们就知道,利用 RTLbackward SAIF文件分析功耗的流 程就是: power compiler 产生 RTL forward SAIF 文件VCS仿真产生 RTL backward SAIF 文件power compiler 进行分析功耗。 (4) SAIF-GATE 分析法 前面介绍了 RTLbackward SAIF文件分析功耗的方法和流程,下 面介绍一下Gate backward SAIF文件分析功耗的方法和流程

22、,这个 与RTL backward SAIF文件的很类似。 library forward SAIF文件(简称为库SAIF文件) 库SAIF文件是包含SDPD(电路状态路径)信息的 SAIF文件。 Gate backward SAIF文件的生成需要库SAIF文件,该文件可以通过 power compiler 生成,流程如下所示: Li brary 1_.k 1 L Read library 工 .Write lib forward SAI F PwC SDPD Pirectiye top instl (a, b, c ,s); in itial $sdf_a nno tate(my.sdf,d

23、ut) in itial begi n $read_lib_saif (mylib.saif); $set_toggle_regi on (u1); $toggle_start; #120a=0; #STEP in_ a=temp_in_a; $toggle_stop; $toggle-report(gate.saif,1.0e-9,top) end en dmodule/testbe nch testbench测试平台主要是调用门级网表、SDF文件、库SAIF文件。 testbench 中,用 $sdf_annotate(my. sdf, dut) 命令作 SDF标记, 以保证时序的正确性,

24、从而得到正确的翻转数目。$ read_lib_saif (mylib. saif)命令读取库SAIF文件中的SDPDt息。仿真器只监 视在SAIF文件里列出的SDPD关行为。$ set_toggle_region(u1) 命令选择要监视的模块。$ toggle_start 和$toggle_stop命令控制 开始和结束时间。$ toggle_report(gate. saif,1. 0e-9, top) 命令把SAIF输出到指定的文件。 万事俱备,只欠仿真,接下来就是使用 VCS进行仿真了: vcs -R top.v testbe nch. v 注意,这里的仿真是对门级网表的仿真,也就是说这里

25、的top.v是门 级网表。产生的示例gate forward SAIF 文件的部分内容如下所示: (SAIFILE (SAIFVERSION 2 .0) (DIRECTION backward) (DESIGN) (DATE Mon May 17 02:33:48 2006) (VENDOR Synopsys Inc) (PROGRAM_NAMEVCS-Scirocco-MX Power Compiler) (VERSION 1 .0) (DIVIDER / ) (TIMESCALE 1 ns) (DURATION 10000.00) (INSTANCE tb (INSTANCE top (N

26、ET (TO 6488) (T1 3493) (TX 18) (TC 26) (IG 0) ) (TO 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

27、SAIF文件是通过对门级网表进行仿真所得到的。如 果设计很大,仿真需要的时间很长。好处是精确度很高。VCS所产生 的Gate Backward SAIF文件中包含了一些或所有连线的开关行为和 单元的开关行为。这些开关行为分别以上升和下降表示,与状态和路 径有关。用这个信息可以进行精确的功耗分析。 功耗分析 有了门级网表、gate backward SAIF文件和SDF文件,就可以 在power compiler中进行功耗分析了,分析功耗的流程图如下所 示: -r set link library I _ Read Cellist # read_verLlog r redvhdl read db

28、 】ink_ Read PiirasiLics * Read Smf L. _ Report ptWCT ;rcpon_poer readpLiiLisitics 对应的一个示例脚本文件如下所示: set target_librarymylib.db set lin k_library * $target_library read_verilog myn etlist.v curre nt_desig ntop link read_read_parasitics top.spef tb/top read_ saif -in putmygate. saif -inst report_power

29、上面的流程和脚本适用于后版图(post-layout)的设计,spef文件在 做完版图后产生。使用寄生参数文件,提高了功耗分析的精确度。如 果是前版图(pre-layout)的设计,没有寄生参数文件,连线的 RC参 数使用工艺库里的线负载模型。 最后总结一下,这里分析功耗流程为: power compiler 产生库 SAIF文件VCS产生 gate backward SAIF文件power compiler进行功耗分析。 (5) VCD转SAIF分析法 前介绍了使用SAIF文件分析功耗的方法,这个方法都是通过 VCS仿 真得到相应的SAIF文件,然后进行功耗分析。下面我们介绍使用VCD 文件

30、转换成SAIF文件的方法,然后进行功耗分析。 VCD文件的产生 首先,我们在进行仿真的时候,需要通过在testbench中加入相关的 系统函数,产生相应的VCD文件(和SDF文件),流程示意图如下所 示: 丄p . Gate Icy cl ill a.ti on | ” SDh file Simulator 相应的一个示例testbench 如下所示: VCD module testbe nch; in itial $sdf_annotate(my.sdf, dut) in itial begi n $dumpfile(vcd.dump); $dumpvars; en dmodule 然后使用

31、下面命令进行仿真: +delay_mode_path vcs -R dut.vtestbe nch.v 完成仿真之后,就可以得到 VCD文件了。 VCD文件转换成SAIF文件 仿真时产生的VCD文件也包含了设计中节点和连线的开关行为。在 Power Compiler中,可以使用程序vcd2saif可以把VCD文件转化为 SAIF文件,如下图所示: saif vcd ; Lnihvcd2saif *i-o vcd2saif是在UNIX命令行使用的一个程序。vcd2saif程序也可以把 VPD文件(二进制格式的VCC文件)转化为SAIF格式的文件。如果设 计很大,仿真的时间长,vcd2saif程序

32、可以用管道传递的方式把 VCD 转化为SAIF文件。这时vcd文件不存放在文件里,vcd通过先入先 出(First-InFirst-()nt,简称 FIFO把数据传给 vcd2saif 程序, 然后产生SAIF文件。转换的SAIF文件里没有SDPD勺信息。如下图 所示: Simill和世也驰ifsaif I I unn vcd2iaif i drfiiult匚 j N xwggteoivpriinaryi Propagate toggles | 传播翻转率 应用默认的 景 Tff A - lX s-n 普通)N 墾盒子输H TCT q 栈丰匸+ SDPD toggles? 言否頁妆态路栓 Co

33、nstruct SDPD 俭 aY 二百a国 1 (即内部静态密祖 匸J_ 1 Ready for power analysis 用read_ saif命令标记的开关行为优先级最高;用 set_switching_activity命令设置的开关行为优先级次之;优先级最 低的是用默认的变量power_default_toggle_rate指定的翻转率。 开关行为可以被清除,使用“ reset_switchi ng_activity ” 命令可以清除所有被标记的翻转率和通过传输得到的翻转率。用 report_saif 可以显示读入saif文件后设计中的开关行为信息。一 个完整的SAIF文件,user annotated ”应该是100% 如果SAIF不 完整,那么默认的翻转率将附加到输入端和黑盒子的输出端。翻转率 通过零延迟仿真传输下去,这样就可以计算出设计的功耗。 reset_switching_activity #清除开关行为和/或翻转率 dc_sMlKscg-t repor

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论