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

嵌入式代碼覆蓋率統(tǒng)計(jì)方法和經(jīng)驗(yàn)

嵌入式代碼覆蓋率如何進(jìn)行統(tǒng)計(jì)有哪些方法和經(jīng)驗(yàn)

統(tǒng)計(jì)嵌入式代碼覆蓋率的方法和經(jīng)驗(yàn)

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

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

評(píng)論