VCS課時8:代碼覆蓋率


  • 什么時候可以說,這個設計的可以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覆蓋率

1577093627054

別的形式報告覆蓋率

網頁的形式,超文本的格式

通過命令行 urg -dir *.vdb

注釋不統計覆蓋率

編譯仿真的顯示,代碼覆蓋率為灰色

還有一種是

模塊不統計覆蓋率

先創建空文件vcs_cov.cfg

文件里面添加-module fsm_top代表不看top層

編譯的腳本改變為,增加了一句話

結果是top層不統計覆蓋率

空文件里面添加+module fsm_top代表只看top層

加號看這個模塊,減號不看這個模塊


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM