IC數字前端設計開發26 (使用VCS生成覆蓋率報告)
來自:https://blog.csdn.net/limanjihe/article/details/52430286
第一部分:
html檔案,想快速用瀏覽器開啟,而不是通過滑鼠點選的老套方式,
有著簡單且看上去高大上的方法:
firefox瀏覽器
firefox trace.html
chrome瀏覽器
chromium-browser trace.html
第二部分
VCS中的coverage分析
下面列出如何用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 第二條命令執行模擬,同樣選項-cm line選項表示模擬是加入line覆蓋率分析, 並把結果存入ini_data_files目錄中 第三條進行覆蓋率分析, 分析檔案從my_cov_info和int_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 啟動cmView的GUI介面 |
將兩次模擬.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這個選項。
執行 make vcs , make sim後,會生成simv.vdb資料夾,該資料夾下包含了覆蓋率的內容,但是我們需要將內容生成報告,這樣,才方便我們檢視。
生成報告,使用的是 urg命令,該命令也是屬於vcs工具裡面的。
-dir: 指定 .vdb資料夾的位置
-report: 指定生成報告的格式,報告格式有兩種,一種網頁格式,一種text格式。這裡,both代表生成兩種。
執行 make urg後,就會生成both資料夾。
這資料夾下的檔案,就是覆蓋率報告了。
開啟dashboard.html。可以看到整體的一些資訊。
但是我們關心的是設計的,而不是testbench的。點選hierarchy,得到層次。
點選u1,也就是設計的頂層。可以看到關於該頂層的資訊。因為在頂層,都是呼叫各個子模組(這裡是呼叫band_generaterx_tx, uart_txd模組),所以沒有line的覆蓋率統計,但是有TOGGLE的覆蓋率統計,也就是訊號的翻轉。
從上面可以看出,對於rst_n訊號,沒有從1->0的翻轉,而這個訊號是testbench中傳遞的,因此看出,在testbench設計,對於rst_n訊號產生,有bug。
點選左下角的uart_txd_1,檢視該模組的資訊。
對於該設計,因為有具體的實現,所以可以看到有line的覆蓋率,toggle的覆蓋率,FSM的覆蓋率。
對於line覆蓋率,從報告看出,總共有42行,覆蓋到了41行。通過檢視程式碼,可以知道是哪一行沒有被執行到。
對於toggle覆蓋率。從報告看出,只有rst_n有問題,而這問題是testbench的的bug造成的。
對於FSM的檢查。從報告看出,每個狀態都有被覆蓋到。但是從有些狀態跳轉到另外的狀態,沒有被覆蓋到。因此造成FSM的覆蓋率不高。
通過檢視覆蓋率報告,可以查詢到設計的缺陷,從而進行修正。