SAIF anno

http://www.javashuo.com/article/p-oeabgmie-mw.htmlhtml

 

SAIF--RTL BACK分析法函數

  RTL backward SAIF文件是經過對RTL代碼進行仿真獲得的,當設計很大的時候,門級仿真時間就會很長,這時候就能夠使用這種方法進行分析。使用這種方法進行分析功耗的速度比較快,可是進度不夠門級仿真SAIF文件的高。工具

①RTL forward SAIF文件post

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"3d

    rtl2saif  -output  fwd_ rtl.saiform

一個示例RTL  forward  SAIF文件裏面的部份內容以下所示:htm

(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,產生的報告以下所示:

    

相關文章
相關標籤/搜索