進階驗證與 UVM
程式碼覆蓋率(code coverage)
程式碼覆蓋率衡量你的測試實際運行到設計原始碼的多少比例——全自動,不需人工撰寫目標。模擬器會在 RTL 上插樁,回報哪些行有執行、每個 if 的真假兩條分支是否都走過、每個有限狀態機進入了哪些狀態、哪些邏輯曾從 0→1 與 1→0 翻轉。它回答一個令人謙卑的問題:「跑了上百萬個週期的測試後,我的設計裡是否還有任何測試從未碰過的程式碼?」答案往往出乎意料地是:有。
它最大的優點是免費且客觀;最大的侷限是它衡量的是「寫出來的設計」,而非「想要的設計」。100% 程式碼覆蓋率只證明每一行都跑過——它無法知道某行本該存在卻漏寫,也無法知道某行雖然跑了卻是在錯誤情境下跑的。這正是程式碼覆蓋率與功能覆蓋率互為夥伴的原因:程式碼覆蓋率找出死掉、沒測到的程式碼;功能覆蓋率確認有意義的情境真的命中。要宣稱某區塊已徹底驗證,兩者缺一不可。
寬匯流排上 100% 的翻轉覆蓋率可能具誤導性——每個位元都翻轉過,但也許從未出現過真正重要的數值組合。覆蓋率是必要條件,卻永遠不是充分條件。
又称
另见