天天看點

在modelsim中對萬年曆進行代碼覆寫率仿真

什麼是代碼覆寫率(code coverage)?

代碼覆寫率是驗證激勵是否完備,檢驗代碼品質的一個重要手段。測試激勵的代碼覆寫率至少要達到95%以上,才能基本認為代碼在邏輯上是通過品質控制的。如果代碼覆寫率較低,則說明仿真沒有執行到所有的代碼或者測試檔案有缺陷。

ModelSim代碼覆寫率功能Code coverage,能報告出statement(語句) 、branch(分支)、condition(條件)、 expression(表達式)、toggle(信号反轉)、fsm(有限狀态機)等多種覆寫率情況,進一步提高了測試的完整性。

步驟:

1、編譯選項(compile options):

在ModelSim的Workspace裡選中需要檢視代碼覆寫率的檔案,使用Ctrl鍵選擇多個檔案,然後點選右鍵選擇compile->compile prperties->coverage,選擇前四項(statement,brances,condition,expression)。

2、編譯(compile):

對所選擇的檔案進行編譯,可在指令行視窗敲compile -all,也可在編譯菜單裡選擇compile all。

3、仿真(simulate ):

在指令行視窗輸入vsim -coverage work.top,然後run -all

參考自http://blog.sina.com.cn/s/blog_68c493870101exkf.html

為友善仿真測試和調試程式,在代碼覆寫率仿真時應該使用腳本檔案,可以使用modelsim直接建立一個do檔案,将每一步的指令複制下來粘貼到do檔案中就變成了腳本檔案,do檔案如下(使用腳本編譯後圖形化界面還是顯示?為正常現象不影響後續仿真):

#建庫
#vlib work                                 
#映射
#vmap work work
#編譯,vcom for VHDL                  
#vlog -cover bcest *.v
#仿真,不優化
vsim -coverage -novopt work.calendar_tb work.calendar
#執行仿真
run 5500ns
#以txt形式導出覆寫率檢測報告
#coverage report -recursive -select bces -file coverage.txt
           

參考自:

https://blog.csdn.net/wyh135792/article/details/79834053

https://www.cnblogs.com/hfyfpga/p/4277870.html

https://blog.csdn.net/usb_abc/article/details/69897590

為了提高代碼覆寫率,主要從語句、分支、條件表達式來産生有針對性的激勵信号,測試信号在功能仿真測試代碼的基礎上有針對性的進行優化,加入了12個月份的覆寫,将1900.1.1星期1作為了rst後的日期,像下圖中這種情況,

在modelsim中對萬年曆進行代碼覆寫率仿真

表示未執行語句中的false,

在modelsim中對萬年曆進行代碼覆寫率仿真

表示條件覆寫未完成,可以在X上滑鼠點選右鍵查詢詳情進行調試。本例中條件互相沖突無法覆寫所有情況,此情況在設計RTL級代碼時應該盡量避免,以免影響總體覆寫率。

在modelsim中對萬年曆進行代碼覆寫率仿真
在modelsim中對萬年曆進行代碼覆寫率仿真

下面是覆寫率檢測報告:

Coverage Report Summary Data by file

=================================================================================
=== File: C:/Users/Administrator/Documents/verilog exp/calendar/calendar.v
=================================================================================
    Enabled Coverage            Active      Hits    Misses % Covered
    ----------------            ------      ----    ------ ---------
    Stmts                           43        43         0     100.0
    Branches                        31        30         1      96.7
    FEC Condition Terms              3         1         2      33.3
    FEC Expression Terms             3         3         0     100.0

=================================================================================
=== File: C:/Users/Administrator/Documents/verilog exp/calendar/calendar_tb.v
=================================================================================
    Enabled Coverage            Active      Hits    Misses % Covered
    ----------------            ------      ----    ------ ---------
    Stmts                          165       165         0     100.0


Total Coverage By File (code coverage only, filtered view): 82.5%

           
  • Stmts 是語句覆寫,表示測試程式運作後,程式中運作可執行語句的比率
  • Branches 是分支覆寫,表示測試程式運作後,所有判斷語句的取真分支和取假分支被執行的比率
  • Conditions 是條件覆寫,表示所有判斷語句中的每個條件的可能取值出現過的比率
  • Expressions 是表達式覆寫,表示所有表達式被執行的比率
  • FEC 是 focused expressions/condition 的縮寫,FEC Conditions 表示條件表達式中條件分支被執行的比率,FEC Expressions 表示條件表達式中表達式被執行的比率

 相關文章:

利用Verilog HDL規劃一款電子表晶片(萬年曆)

在modelsim中對萬年曆進行代碼覆寫率仿真

在CentOS中使用Design Compiler (DC) 圖形界面/tcl腳本進行電路綜合

繼續閱讀