1. 程式人生 > >IC數字前端設計開發26 (使用VCS生成覆蓋率報告)

IC數字前端設計開發26 (使用VCS生成覆蓋率報告)

來自:https://blog.csdn.net/limanjihe/article/details/52430286

 

第一部分:

html檔案,想快速用瀏覽器開啟,而不是通過滑鼠點選的老套方式,

有著簡單且看上去高大上的方法:

firefox瀏覽器

firefox trace.html

chrome瀏覽器

chromium-browser trace.html

 

第二部分

VCS中的coverage分析



   VCS支援強大的覆蓋率分析功能, 那麼如何使用該功能呢. 在這裡只講述基本的一些概念和流程

,如果想了解更多, 請檢視synopsysVCS / VCS MX Coverage Metrics User Guide.

  
下面列出如何用VCS進行覆蓋率分析的步驟:

   $> vcs -Mupdate -cm line -cm_dir my_cov_info source.v
   $> simv -cm line -cm_dir int_dat_files
   $> vcs -cm_pp -cm line -cm_dir my_cov_info -cm_dir int_dat_files

  
第一條命令的作用是把source.v檔案進行編譯, 把編譯結果放入my_cov_info 資料夾中. 選項-cm line表示在編譯時, 要加入line 覆蓋率分析.
  
第二條命令執行模擬,同樣選項-cm line選項表示模擬是加入line覆蓋率分析, 並把結果存入ini_data_files目錄中
   第三條進行覆蓋率分析, 分析檔案從my_cov_infoint_dat_files這兩個目錄中讀取, 進行line覆蓋率的分析.
  
當然如果不指定資料夾, 那麼檔案將被儲存到預設的目錄simv.
  
則命令為:

   $> vcs -Mupdate -cm line source.v
   $> simv -cm line
   $> vcs -cm_pp -cm line

  
如何選定固定的一部分進行coverage分析呢?
   -cm_hier config_file
通過寫config_file確定需要要做coverage的範圍
       +tree instance_name level_number instance代表的樹的選擇,預設為0, 0代表整個instance.
       +module
       +file
       +filelist
       +library

  
也可以使用-cm_scope 命令
   $> vcs -cm_pp -cm_scope "tree+top.inst1" -cm_scope "file-testshell.v"

 
 
  
這裡選取幾個常用的coverage的選項:

   -cm line|cond|fsm|tgl|obc|path
設定coverage的方式
   -cm_name          預設中間檔案為test.lin test.con, 設定該名可改為 test_abc.line
   -cm_pp gui           啟動cmViewGUI介面

 

 

將兩次模擬.vdb資料,整合在一起,輸出覆蓋率結果。

TSCALE= -timescale="1ns/100ps"
RTL= ./dut.v
TB= ./my_tb.v
COV_OPT=line+tgl+fsm+cond

default: test

vcs: compile run

run:
    ./simv -l simv.log -cm $(COV_OPT) -cm_dir int_dat_files_test1

compile:
    vcs -l vcs.log -sverilog $(TSCALE) $(TB) $(RTL)             \
    -P ${LD_LIBRARY_PATH}/novas.tab ${LD_LIBRARY_PATH}/pli.a    \
    -debug_pp -cm $(COV_OPT) -cm_dir my_cov_info_test1

urg:
    urg -dir my_cov_info_test0  int_dat_files_test0 -dir my_cov_info_test1  int_dat_files_test1 -report both

 

 

 

第三部分

 

對於vcs工具,支援生成覆蓋率報告,通過檢視覆蓋率報告,即可知道設計中有什麼問題。

 

         要生成覆蓋率報告,要在編譯和模擬的時候,加入一個選項。

 

         -cm  line | fsm | tgl | cond , 指定生成針對什麼條件的覆蓋率報告。

 

         如下的makefile,就生成上述四個的覆蓋率報告。注意,編譯和模擬,都要加上-cm這個選項。

clip_image002

 

         執行 make vcs , make sim後,會生成simv.vdb資料夾,該資料夾下包含了覆蓋率的內容,但是我們需要將內容生成報告,這樣,才方便我們檢視。

clip_image004

 

         生成報告,使用的是 urg命令,該命令也是屬於vcs工具裡面的。

clip_image006

         -dir: 指定 .vdb資料夾的位置

         -report: 指定生成報告的格式,報告格式有兩種,一種網頁格式,一種text格式。這裡,both代表生成兩種。

         執行 make urg後,就會生成both資料夾。

clip_image008

 

         這資料夾下的檔案,就是覆蓋率報告了。

clip_image010

 

         開啟dashboard.html。可以看到整體的一些資訊。

clip_image012

 

         但是我們關心的是設計的,而不是testbench的。點選hierarchy,得到層次。

clip_image014

         點選u1,也就是設計的頂層。可以看到關於該頂層的資訊。因為在頂層,都是呼叫各個子模組(這裡是呼叫band_generaterx_tx, uart_txd模組),所以沒有line的覆蓋率統計,但是有TOGGLE的覆蓋率統計,也就是訊號的翻轉。

clip_image016

         從上面可以看出,對於rst_n訊號,沒有從1->0的翻轉,而這個訊號是testbench中傳遞的,因此看出,在testbench設計,對於rst_n訊號產生,有bug。

 

         點選左下角的uart_txd_1,檢視該模組的資訊。

clip_image018

         對於該設計,因為有具體的實現,所以可以看到有line的覆蓋率,toggle的覆蓋率,FSM的覆蓋率。

 

         對於line覆蓋率,從報告看出,總共有42行,覆蓋到了41行。通過檢視程式碼,可以知道是哪一行沒有被執行到。

clip_image020

 

        

對於toggle覆蓋率。從報告看出,只有rst_n有問題,而這問題是testbench的的bug造成的。

clip_image022

 

         對於FSM的檢查。從報告看出,每個狀態都有被覆蓋到。但是從有些狀態跳轉到另外的狀態,沒有被覆蓋到。因此造成FSM的覆蓋率不高。

clip_image024

 

         通過檢視覆蓋率報告,可以查詢到設計的缺陷,從而進行修正。