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