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

怎么才能寫出高覆蓋率的Verilog代碼?
高覆蓋率的Verilog代碼的編寫技巧
代碼覆蓋率工具的重要性

EDA仿真驗證環(huán)境中的激勵、檢查和覆蓋率
代碼覆蓋率記錄

評論