-
什么時候可以說,這個設計的可以Tapout了
-
驗證什么時候是個頭
驗證的指標之一:code coverage
1. 什么是Code Coverage
-
RTL代碼是否每一行都覆蓋到了,每一行是不是都執行了
-
所有的狀態,是否遍歷了
-
判斷分支語句是否執行了
公司對行覆蓋率的要求達到100%,冗余產生的多余的面積,成本增加
是不是已經完成了所有的功能,
邊沿情況,特殊情況,corner-case, MP3下載的時候邊聽歌
2. Code Coverage的類型
PPT1
-
Toggle Coverage:是不是信號又0-1的跳變還是一直為固定值
-
Conditional coverage:case是不是有沒有輸入情況
-
FSM coverage:是不是沒有進入某種狀態
PPT2
PPT3
2. 行覆蓋率
PPT1
PPT2
PPT3
2. 條件覆蓋率
PPT1
PPT2
出現了沒有覆蓋的情況,要給出合理的解釋
PPT3
3. 跳變覆蓋
PPT1
PPT2
PPT3
4. 狀態機覆蓋
PPT1
狀態都覆蓋了,但不一定所有的跳變都覆蓋了
PPT2
要告訴驗證人員什么情況下,狀態機才會跳轉
5. 路徑覆蓋
6. 如何去做覆蓋率
PPT1
PPT2
coverage的衡量
toggle coverage的比較花時間
PPT3
一般不會用-cm_pp
都是用gui,或者是轉化為網頁的格式,或者是文本格式
有些不想工具去檢測某個模塊的覆蓋率,比如輔助debug的部分
- 針對代碼段
//vcs coverage on
和//vcs coverage off
synopssys不去綜合//synopssys translate_on
- 針對模塊
7. 編譯coverage
PPT1
PPT2
PPT3
8. 仿真和報告coverage
PPT1
PPT2
PPT4
把覆蓋率糅合在一起,不是簡單的加法
產生多個simv文件,並行的跑多個test case,成百上千個testcase
9. 舉例說明
最下面的方法不推薦
不同的case對覆蓋率的共享不大,統計每一個case對覆蓋率的貢獻
前面跑的testcase往往覆蓋率貢獻比較大,代碼大部分是滿足基本功能需求的
10. 總結
autograding是針對邊邊角角的測試
11. 實驗用例
編譯仿真代碼
對應的覆蓋率的命令如上所示,產生的simv_fsm_moore.vdb
文件夾
用DVE查看覆蓋率
-
代碼覆蓋率
綠色的標記
- 打開之后和上面所示,雙擊進入如下toggle 覆蓋率
dout
沒有跳變
- 狀態機的覆蓋率
點擊shon in list
- path覆蓋率
別的形式報告覆蓋率
網頁的形式,超文本的格式
通過命令行 urg -dir *.vdb
注釋不統計覆蓋率
編譯仿真的顯示,代碼覆蓋率為灰色
還有一種是
模塊不統計覆蓋率
先創建空文件vcs_cov.cfg
文件里面添加-module fsm_top
代表不看top層
編譯的腳本改變為,增加了一句話
結果是top層不統計覆蓋率
空文件里面添加+module fsm_top
代表只看top層
加號看這個模塊,減號不看這個模塊