01
對于仿真的激勵測試,其實會有代碼覆蓋率一說,不過我們平常可能更多是功能覆蓋,代碼覆蓋估計關注的人要少些,不過作為相對系統性的學習,還是大概看下這個功能吧~
02
涉及到的測試代碼文件就文末自行獲取了,直接開始正題吧。
把文件準備好后,打開Modelsim,將路徑切換到對于的文件路徑
例:cd E:/Soft_File/Sim_File/coverage
接著創建工作庫(work)=> 編譯.v文件(指定覆蓋測試的類項)
vlib work vlog *.v +cover=bcesxf
附:代碼覆蓋率,在Modelsim中提供了以下幾種覆蓋的類型,簡單說明一下
A-語句覆蓋(Statement coverage):逐行統計每個語句的執行情況
B-分支覆蓋(Branch coverage):統計每個條件“if/then/else”和“case”的執行情況
C-條件覆蓋(Condition coverage):算是分支覆蓋的擴展吧,把判斷條件都覆蓋到
D-表達式覆蓋(Expression coverage):和條件覆蓋又有點相似,就表達式左右側的比對
E-跳轉覆蓋(Toggle coverage):邏輯節點的跳轉,狀態發生變化的意思
F-FSM覆蓋(FSM coverage):有限狀態機的狀態、轉換還有路徑統計
G-SystemVerilog類覆蓋(SystemVerilog class coverage):這部分沒咋涉及過,應該是SV的類統計
然后命令中的 +cover=bcesxf大概就知道是指什么了吧?除了x要特殊一丟丟
branch, condition,expression, statement, extended toggle, finite state machine
03
啟動覆蓋測試吧~
vsim -coverage test_sm
先關注這個界面,通過這個界面可以執行指定的的覆蓋測試,然后分析的結果會以那個小圖標的形式顯示出來,或者,然后有對應的右下標字母,字母和剛剛介紹的一個意思,還會有個E的字樣,就是被排除在覆蓋測試之外產生的一些狀態。
可以在這選對應的覆蓋測試
稍微運行一下,做語句覆蓋測試,結果發生改變
run 1ms
在Files的窗口也能看到相應的代碼覆蓋率
打開sim的窗口,選中不同的目標,在右側的分析窗口會變成相應的代碼覆蓋情況
直接雙擊對應的目標,會直接顯示其在源碼中的位置
接著在分析界面將覆蓋類型換成Toggle,然后選中test_sm,分析界面再點dat,詳細說明的界面就會出現對應的跳轉情況
要是沒這個Details的界面,可以在菜單里,View > Coverage > Details 將其使能
切換到sim窗口,選中test_sm,然后View > Objects,再然后右鍵后Show All Columns
這時可以看到相應跳變的靜態指示
04
在Files的界面中雙擊beh_sram.v打開源碼界面,然后看到40行,條件覆蓋沒滿足的情況,點Xc那個圖標,在詳細界面可以看到對應的描述
接著將覆蓋次數顯示出來,Tools > Code Coverage > Show coverage numbers
軟件大小有點問題,50001只顯示到了0001......
關掉數字的顯示,恢復圖標顯示的情況,鼠標直接放到對應的代碼位置,也能顯示
05
在Files界面,可以選定要排除覆蓋測試的文件,右鍵 > Code Coverage > Exclude Selected File ,Cancel...就可以取消排除。
然后可以看到整體發生變化,代碼界面的√和×都變為了E的字樣
E*指的就是被排除在外,但測試時還是被擊中過,E就是完全被排除在外了,可以點那個圖標,然后看詳細描述里的信息理解。
06
完成代碼覆蓋的測試后,可以將其導出,Tools > Coverage Report > Text ,類型就看自己需要了
(也可以在Instance, sim, files 界面右鍵找對應的導出鍵)
根據要的內容做報告
導出后,文件內容
導出那個HTML就相對圖形化顯示
如果要把使用了排除覆蓋測試的文件狀態也導出,就可以用這個
基本就這樣了,結束本次仿真吧~
quit -sim
-
仿真
+關注
關注
50文章
4043瀏覽量
133416 -
ModelSim
+關注
關注
5文章
174瀏覽量
47123 -
代碼
+關注
關注
30文章
4748瀏覽量
68356
原文標題:Modelsim的仿真之路(代碼覆蓋率)
文章出處:【微信號:HXSLH1010101010,微信公眾號:FPGA技術江湖】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論