本來以為coverage這件事情很多人會寫文章講,結果在公眾號上搜了一圈也沒找到幾篇,那么今天就和大家聊聊coverage。
早期的驗證方法學是通過direct test去保證設計的質量。這個階段是directed-test driven的,但是隨著設計規模和復雜度變大,這種直接測試導向會遺漏掉很多問題。于是驗證方法學發展到了第二個階段coverage driven。
Coverage driven這里的coverage主要有功能覆蓋率(function coverage) 和代碼覆蓋率(code coverage)。功能覆蓋率覆蓋點(coverage point)和斷言覆蓋率(assertion coverage),代碼覆蓋率分為行覆蓋(linecoverage),翻轉覆蓋(toggle coverage),分支覆蓋(branch coverage),條件覆蓋(condition coverage),狀態機覆蓋(FSM coverage)等。這也是目前大部分公司在執行的驗證策略。實際 coveragedrive能夠覆蓋到大部分問題,但是有些可能因為設計有漏掉,然后寫function coverage的時候也有漏掉,導致規格書上有些部分沒有真正實現。

驗證工程師很大一部分工作在收集coverage,對于80%的coverage我們可能通過幾個基本的test就能打到,但是剩下的20%會花很長的時間去打。
為此我們需要建立regression的環境,創造隨機的test,跑大量的regression去補齊最后20%的部分。

接下來將是一個非常痛苦的過程,很多公司的做法就會去review code,如果DV的能力比較強,看懂code自己補test,但是到最后發現還是有補不完的。designer的參與就非常有必要了,designer會幫忙一起review,然后幾個輪回的造test跑simulation把coverage補齊。

當然目前也有很多公司采用一些tool去收集coverage,比如用formal去驗證某些代碼是無法被覆蓋到的,這樣就省去人力去看,這種方法非常高效。
對于收集coverage這件事情,你們還遇到過什么問題,都有哪些小技巧,歡迎留言討論。