Verdi 知識體系

1. verdi 加強了active anotation, active trace和trace this value的能力,並且引入了Temperal flow view。在trace X的時侯面對很多選項,推舉的快速定位的方法是:

   1) 找出來自於信號源的明顯的錯誤,譬如(uninitialize,setup, hold time voilation, no drivers)

         •Stop at black box output signal (ON)
         • Stop at fanin that is X but no transition in its last cycle (OFF)
         • Snap to value change and continue (ON)  -----------找出第一個X

         // 儘量放開了跑,遇到黑盒子才停止。

 

   2) 準確找出active X源

         • Stop at black box output signal (ON)
         • Stop at fanin that is X but no transition in its last cycle (ON)  -----找出從此向前來源是固定的X(activeX)

         • Snap to value change and continue (OFF)

 

   3) 設置number of cause

         • Use the default setting : Stop after finding 1 cause

          • 如果遇到很多類似的cause,那麼設爲trace all causes

 

2. 當碰到ntrace和fsdb的hierarchy層次不一樣時,不能聯動。解決方案 set virtual top

    vritual top/map file:         CPU = system.i_cpu

 

 

3. 在VMM中引入fsdbLog

[c-sharp] view plaincopyprint?

  1. `ifdef FSDB  
  2. class log2fsdb extends vmm_log_format;   
  3.     virtual function string format_msg(string name, string inst, string msg_typ, string severity, ref string lines[$]);   
  4.          string text = "";   
  5.          string stream = $psprintf("%s(%s)", name, inst);  
  6.          string label = $psprintf("%s[%s]", severity, msg_typ);   
  7.          foreach(lines[i]) text = {text, "/n", lines[i]};   
  8.          $fsdbLog(label, text, , stream );   
  9.          format_msg = super.format_msg(name, inst, msg_typ, severity, lines);   
  10.     endfunction  
  11. endclass  
  12. `endif  
  13. `ifdef FSDB   
  14.        if($test$plusargs("fsdb=")) begin   
  15.            log2fsdb l2f = new;   
  16.            this.log.set_format(l2f);   
  17.        end   
  18. `endif  

 

 

 

4. 波形比較找出mismatch point, 然後在定位發生mismatch的原因

如果是相同的design view,    Waveform comparison -> behavior trace for fsdb mismatch 

   ---》 適合RTL和RTL的比較,定位引起錯誤的源頭

如果是不同的design view,    Waveform comparison -> Trace this value in flow view for different design

 

5. 利用siloti減少波形記錄文件大小,進而加快仿真速度

步驟如下:

    1. 生成主要信號的列表文件

      esa -bas tb_CPUsystem -f run.f -all_eslist fullchip.list

      //  -bas 指明瞭work scope,即一旦design 加載就立刻進行behavior analyse的範圍

      //  -all_eslist 指明瞭生成 hierachy 和 plain list 兩種形式的信號列表文件

 

     2. dump 主要信號的波形

      • $fsdbDumpfile("ess.fsdb");
      • $fsdbDumpvarsToFile("fullchip.list");

 

     3. 啓動verdi,在必要時打開visibility的相關選項

         Tools -> Visibility -> Data Expansion -> Enable Data Expansion

 

6. ntrace 可以喫進prime time 的STA report 文件並自動將其轉爲XML文件,用以形象的debug timing的關鍵路徑爲何出現問題

          File -> Import Path Data File -> Select the violate_path.rpt    

 

         • Show this path on nSchema
         • Show this path on File Viewer
         • D&D the 42.860 delay from File Viewer into nSchema
         • Debug the reason of this huge delay on schematic window
         • Tools-> New Schematic ->Connectivity

 

7. 當gate level和rtl level 的波形不一致時可以採用“trace triggering path,based on transition,來找到由於時序問題產生錯誤的根源”

         steps:

         1. compare rtl and gate simulation mismatch,以gate wave form 爲主導

         2. 在產生變化的地方(transition發生處),產生TFV

         3. trace triggering path 並設爲stop at Register Boundary

         4. 找到源頭後,ctrl+K把clock放入waveform中加以分析。

 

8.  如何dump assertion的波形

 

 

[cpp] view plaincopyprint?

  1. vcs +vpi /  
  2.     -sverilog /  
  3.     -Mupdat /  
  4.     -assert enable_diag /  
  5.     -assert vpiSeqBeginTime /  
  6.     -assert vpiSeqFail /  
  7.     +systemverilogext+.sv+.SV+ /  
  8.     -l vcs.log /  
  9.     -f run.f  
  10. +vpi 和 -sverilog是不能缺少的。 -assert enable_diag  指出可以進一步的通過runtime option來控制systemverilog assertion  
  11. -assert vpiSeqBeginTime 指出允許debussy顯示assertion sequence開始的時間, -assert vpiSeqFail 指出允許debussy顯示assertion fail時對應的simulation time。  
  12. ./simv +vcs+lic+wait -assert success -s -i ./sim_sva_fsdb.do -l ./simv.log   
  13. -assert success  指出不僅僅報告失敗,還指出成功的次數。  
  14. //===========sim_sva_fsdb.do 內容如下==========   
  15. $fsdbDumpfile("sv.fsdb")  
  16. $fsdbDumpSVA  
  17. $fsdbDumpvars 0 system  
  18. tbreak #12500ns  
  19. continue  
  20. quit  
  21. //=============================================   
  22. 其實一般都是用最簡單的方法,即在testbench中加入   
  23. initial  
  24.    begin  
  25.         $fsdbDumpfile("sv.fsdb");  
  26.         $fsdbDumpSVA;  
  27.         $fsdbDumpvars(0, system, "+all");  
  28.         #12500 $finish;   
  29.    end  
  30. 然後直接用simv -assert success -l ./simv.log 就行了。  

 

 

 

verdi的assertion evaluation組件還能自動推算出修改或新增的assertion的行爲,主要是在property tools界面下啓動evaluator,然後修改store to all。就能自動推算出新的assertion,並生成新的波形文件。

 

9. Import SVTB with VMM library

    1) 用戶用自己的VMM library

          verdi –sv –f run.f +incdir+your_vcs_vmm_library_path

    2) 用戶沒有VMM library

          verdi –sv –f run.f -ntb_opts vmm

 

10. Import SVTB with OVM library

        1.) 在源代碼中加入 `include "ovm.svh"

        2.) verdi -sv -f run.f +incdir+${IUS81_HOME}/tools/ovm/src +define+INCA -ignorekwd_config

 

 

11. 現在很多verilog 的filelist 文件中用如下形式來指定文件所在的目錄就行了,而不必指定具體文件

               

[c-sharp] view plaincopyprint?

  1. ./testbench/ppc460_PLB4/p464s_test_top_tb.v  
  2. ../hdl/p460s_defines.v  
  3. +incdir+$SYNOPSYS/dw/sim_ver  
  4. +incdir+./vera/ver_shell/ppc460_PLB4  
  5. +incdir+./testbench/ppc460_PLB4  
  6. +incdir+./testbench/IBM_models/DCR3X  
  7. -y ../hdl  
  8. -y ../hdl/CPU  
  9. -y ../hdl/SYNC4  
  10. -y ../hdl/behav_models/custom  
  11. -y ../hdl/behav_models/rams  
  12. -y $SYNOPSYS/dw/sim_ver  
  13. -y ./testbench/ppc460_PLB4  
  14. -y ./vera/ver_shell/ppc460_PLB4  
  15. -y ./testbench/IBM_models/DCR3X  
  16. +libext+.v  
  17. +define+VCS_DUMPON=1  

 

 

上面通過-y 指定library目錄, +libext+.v指定library後綴名。 有時候還用-v 來指定library文件。但是這樣直接被verdi喫進去以後不能顯示hierarchy和文件。verdi提供瞭解決的辦法:   -ssy  (用來取消-y指定的library爲library cell)     -ssv (用來取消-v 指定的library爲library cell)

               

[c-sharp] view plaincopyprint?

  1. ./testbench/ppc460_PLB4/p464s_test_top_tb.v  
  2. ../hdl/p460s_defines.v  
  3. -ssy  
  4. -ssv  
  5. +incdir+$SYNOPSYS/dw/sim_ver  
  6. +incdir+./vera/ver_shell/ppc460_PLB4  
  7. +incdir+./testbench/ppc460_PLB4  
  8. +incdir+./testbench/IBM_models/DCR3X  
  9. -y ../hdl  
  10. -y ../hdl/CPU  
  11. -y ../hdl/SYNC4  
  12. -y ../hdl/behav_models/custom  
  13. -y ../hdl/behav_models/rams  
  14. -y $SYNOPSYS/dw/sim_ver  
  15. -y ./testbench/ppc460_PLB4  
  16. -y ./vera/ver_shell/ppc460_PLB4  
  17. -y ./testbench/IBM_models/DCR3X  
  18. +libext+.v  
  19. +define+VCS_DUMPON=1  

 

 

 

 

12.  新的fsdb dumper 的應用

Verdi 從2010.04之後提供全新架構的FSDB PLI。新的FSDB PLI針對System Verilog有更完整的support,有比較好的performance。另外也支援同時dump不同的fsdb檔案。

 

  1. Synopsys VCS simulator link新dumper的方式:  
  2. Set share library path  
  3. setenv LD_LIBRARY_PATH ${NOVAS_INSTDIR}/share/PLI/VCS/${PLATFORM}  
  4. Compile design and run simulation  
  5. vcs –f run.f -debug_pp +vcsd +vpi -P ${NOVAS_INSTDIR}/share/PLI/VCS/${PLATFORM}/novas.tab /  
  6. ${NOVAS_INSTDIR}/share/PLI/VCS/${PLATFORM}/pli.a  

 

 

現在已經可以在new dumper上,以parallel dumping的方式來加快dump fsdb的速度。使用方法就是在執行simulation的指令上,加上+fsdb+parallel的參數。例如:

For VCS==> simv <+original_options> +fsdb+parallel
For IUS==> irun <+original_options> +fsdb+parallel

 

什麼是「-debug_pp」?

1. VCS的debug options有三個levels:-debug_all、-debug、-debug_pp。

2. -debug_pp是三種level當中,performance最好的。

3. -debug_pp是+memcbk, +vcsd, +vpi, -ucli 這些options的集合。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章