https://www.cnblogs.com/IClearner/p/6898463.html

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,产生的报告如下所示:

   

最新文章

  1. lua命令行编译
  2. java list 简述
  3. jquery 序列化
  4. iOS---检测系统通知开关状态
  5. XidianOJ 1177 Counting Stars
  6. 序列化各个类型成JSON XML实例
  7. 【BZOJ 2453|bzoj 2120】 2453: 维护队列 (分块+二分)
  8. http://www.tuicool.com/articles/RzUzqei
  9. apache httpd配置ajp报错:ap_proxy_connect_backend disabling worker for (localhost)
  10. Emacs入门快捷键
  11. 任务栏流量监测工具 NetSpeedMonitor 在Windows 8下的安装使用
  12. cocos2d-x 跨平台usleep方法
  13. oracle拆分一个连续的字符串
  14. json格式new Date()的一个小坑
  15. 最快效率求出乱序数组中第k小的数
  16. react基础语法二
  17. 思甜雅---关于qq的NABCD的模型分析
  18. android 混淆 与 反编译
  19. MYSQL escape用法--转义
  20. github----awesome-typescript-projects

热门文章

  1. Selenium3+python自动化014-自动化测试框架的作用
  2. linux 搭建python虚拟环境
  3. JS获取样式
  4. 深入浅出Mybatis系列五-TypeHandler简介及配置(mybatis源码篇)
  5. 一个扩展搜索API的优化过程
  6. react-native简单使用
  7. 2019-08-18 纪中NOIP模拟A组
  8. py二级习题
  9. Educational Codeforces Round 65 (Rated for Div. 2)B. Lost Numbers(交互)
  10. Nginx 配置Websocket