驗證覆蓋率(Verification Coverage)的存在是為了試圖回答這樣一個問題:“你怎么知道驗證已經完成?”
實際上,就算驗證覆蓋率達到了100%,從邏輯上也不能保證當前的驗證是完備的。只不過,100%的驗證覆蓋率,可以讓工程團隊對即將tape out的芯片增添不少信心。
本文將重點厘清覆蓋率相關的概念,以及在芯片開發流程中跟覆蓋率相關的事項。
01
覆蓋率概述
要完成一項工程,需要從市場需求、產品計劃、工程流程、技術手段、監管機制、資源調配、評審體系等多個維度做全盤考量。而覆蓋率,就是芯片工程中,評審體系需要重點參考的一項技術指標,但也只是驗證相關的其中一項。 目前被業界廣泛采用的覆蓋率指標有功能覆蓋率(Function Coverage)和代碼覆蓋率(Code Coverage)。這兩項指標需要配合起來看,比如100%的代碼覆蓋率以及低于100%的功能覆蓋率,可以看出驗證不完整;100%的功能覆蓋率以及低于100%的代碼覆蓋率,可以看出代碼冗余或驗證計劃有誤;更多的分析可以得出更詳細的結論。
下面會對這兩種覆蓋率分別展開闡述,最后再補充一下用例通過率(Pass rate)和計劃覆蓋率(Plan Coverage)的內容。
02
功能覆蓋率
功能覆蓋率,被用來度量DUT中哪些功能/特性被測試用例測試到了。這項指標在隨機驗證中非常有用,通過它可以明確地知道在“大范圍的掃射”之后,哪些功能被命中了,也就對當前DUT的狀態有了大致的把握。 但要獲得這項指標也會比較麻煩,工程師們需要針對各種各樣的功能和應用場景,使用SV等驗證語言去實現覆蓋率模型(Coverage Model)或斷言(Assertion),并且從大量的回歸測試(Regression)中采集(Sample)覆蓋數據,然后進行統計數據的合并(Merge),最后做覆蓋率分析(Analysis)。
這里提到的功能和應用場景,在不同層級的驗證中(模塊驗證/子系統驗證/系統驗證)有不同抽象的表達,比如模塊驗證會更關心模塊電路是否所有的功能都被觸發到了,而系統驗證會更關心是否耦合了各類工作場景。 這里提到的實現覆蓋率模型,是容易引入人為錯誤的地方。覆蓋率模型的定義決定了計算覆蓋率時的全集,比如設計文檔中提到了100個功能特性,驗證工程師在開發覆蓋率模型的時候由于理解不到位或者遺漏,導致只針對其中90個特性編寫了覆蓋點,那么最后就算達成100%的功能覆蓋率,也還是有10個功能特性沒有被測試到。
SV功能覆蓋率模型的實現,需要用到覆蓋組covergroup和覆蓋點coverpoint這些語法特性。覆蓋組可以定義在package包、module模塊、program程序、interface接口或者class類中。覆蓋組通過包含多個覆蓋點或覆蓋點交叉場景來完成對覆蓋率模型的描述,覆蓋組還需要指定采樣條件和其他配置選項。而覆蓋點,通常是需要被覆蓋的信號的邏輯或算術表達式,并且對具體覆蓋倉(bin)做劃分。
提個小建議,即使對SV相關語法很熟悉,實現覆蓋率模型的時候還是使用最直接和最簡單的方式。這樣可以提高可讀性,便于維護和評審。
03
代碼覆蓋率
代碼覆蓋率,被用來度量RTL中哪些代碼被仿真驗證執行到了。代碼覆蓋率是一種軟件和硬件開發都通用的手段,通過在仿真程序運行的過程中記錄統計數據,來說明代碼中哪些語句被分別執行了多少次。 通過對代碼覆蓋率的分析,我們很容易發現RTL中冗余的代碼塊(沒有被執行),這種“冗余”可能來自于RTL實現邏輯的錯誤,或者用例和環境沒有正確完成期望的測試序列,又或者驗證計劃不夠完備??傊?,對于驗證質量的把控是非常有益的。 代碼覆蓋率的收集相比于功能覆蓋率要方便得多。
收集代碼覆蓋率通常是由EDA工具在啟用相應功能的選項(option)之后自動化完成,不需要工程師再開發額外的代碼。同時,代碼覆蓋率是按照所有代碼作為全集來計算,不會像功能覆蓋率那樣存在人為引入的局限性。 但是,代碼覆蓋率有個本質上的問題,那就是代碼行本身不能代表功能特性,也就是說,某一些代碼被覆蓋到了,并不能說明RTL實現了某項功能,也不能說明功能實現的正確性和邏輯完備性。反過來,完整的代碼覆蓋率,不能識別出來哪些功能特性沒有被實現,不能識別出來實現了的功能特性所有可能的場景,也不能識別代碼行在執行順序上的正確性。
代碼覆蓋率的統計一般會再進一步做分類,即翻轉覆蓋率(Toggle Coverage)、行覆蓋率(Line Coverage)、語句覆蓋率(Statement Coverage)、分支覆蓋率(Branch Coverage)和狀態覆蓋率(FSM Coverage)。這些分類很好理解,都是字面意思,比如toggle cov就是看某個信號的翻轉情況,FSM cov就是有限狀態機的遍歷情況,這里不再一一展開贅述。
04
用例通過率和計劃覆蓋率
這是最后想要補充的兩個常見指標,用例通過率(Pass rate)和計劃覆蓋率(Plan Coverage)。 通過率指的是執行Pass的用例數占所有需要執行的用例的比例。嚴格來講,通過率并不能表示驗證工作的質量進度,它只能表征驗證工程師大致的工作量進度。在達成功能覆蓋率和代碼覆蓋率的目標前,一般要求用例是100%pass的,即手上已開發的用例都能執行通過。
計劃覆蓋率指的是測試通過的測試點(test point)占所有測試點的比例。嚴格來講,計劃覆蓋率同樣不能表征驗證工作的質量進度,因為測試點的拆分具有很大的主觀性,在實際工程中增加測試點是常有的事。 計劃覆蓋率的計算,會要求將用例執行結果反標回驗證計劃表,然后再對應到測試點,這樣就可以根據用例的執行結果來計算出計劃覆蓋率,它同樣只是能在一定程度上表征工作量進度。
審核編輯:劉清
-
EDA工具
+關注
關注
4文章
267瀏覽量
31794 -
RTL
+關注
關注
1文章
385瀏覽量
59791 -
fsm
+關注
關注
0文章
35瀏覽量
12825 -
DUT
+關注
關注
0文章
189瀏覽量
12386
原文標題:SystemVerilog | 脫離代碼談芯片驗證關鍵指標:覆蓋率
文章出處:【微信號:處芯積律,微信公眾號:處芯積律】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論