www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(dāng)前位置:首頁 > 公眾號精選 > 芯片驗證工程師
[導(dǎo)讀]什么是做覆蓋率?要回答這個問題需要知道IC驗證的目的。最終目的是保證IC所有的功能都符合我們的期望。通過和referencemodel比較我們能夠知道IC的功能是否符合我們的期望,但是如何體現(xiàn)“所有”?只能從覆蓋率上進行體現(xiàn)。只有當(dāng)所有代碼都被執(zhí)行過時,中間的功能都符合我們的期望...

什么是做覆蓋率?要回答這個問題需要知道 IC 驗證的目的。最終目的是保證 IC 所有的功能都符合我們的期望。通過和 reference model 比較我們能夠知道 IC 的功能是否符合我們的期望,但是如何體現(xiàn)“所有” ?只能從覆蓋率上進行體現(xiàn)。


只有當(dāng)所有代碼都被執(zhí)行過時,中間的功能都符合我們的期望,我們才能夠說達(dá)到了目的。我們需要知道 IC 的所有功能都是正確的,而不是一部分功能或者是大部分功能都是正確的,這就做覆蓋率的意義之一。


覆蓋率能夠體現(xiàn)我們目前的 case 跑過了多少代碼?還有哪些代碼沒有跑到,在做后面的 case 時,就可以有意識的往沒有覆蓋到的方向去傾斜,這就是做覆蓋率的意義之二。


總之,代碼覆蓋率檢查測試平臺和測試用例到底執(zhí)行了多少目標(biāo)代碼。另外,覆蓋率也體現(xiàn)了 IC 驗證工程師的工作量。


單元驗證階段,關(guān)心的是模塊功能和模塊質(zhì)量,一般業(yè)內(nèi)常用的出口條件是:行覆蓋率達(dá)到 100%,分支覆蓋率達(dá)到 100%,條件覆蓋率達(dá)到100%,狀態(tài)機覆蓋率達(dá)到 100%,對沒有覆蓋率的情況給出合理的說明。


集成驗證階段,關(guān)心系統(tǒng)的功能以及模塊與模塊之間的接口,此時出口條件為功能覆蓋率。一般業(yè)內(nèi)常用的出口條件是:功能覆蓋率達(dá)到 95%,對沒有覆蓋的情況給出合理的說明。


代碼覆蓋率
代碼覆蓋率是從軟件編程的角度來分析設(shè)計代碼是否被充分的驗證。一般的仿真器能夠在仿真的過程中自動統(tǒng)計覆蓋率數(shù)據(jù)。代碼覆蓋率僅僅能夠表明設(shè)計中那些代碼已經(jīng)測試,而不能表明測試是否正確, 以及測試是否完善。測試工程師通過分析覆蓋率情況了解目前哪些代碼被執(zhí)行到了,哪些沒有被執(zhí)行到(這些報告在仿真軟件中可以輸出,很直觀), 而后調(diào)整測試?yán)?,保證代碼盡可被全面的測試。代碼覆蓋率可以通過以下幾個角度去統(tǒng)計。

a. 語句覆蓋(StatementCoverage)
語句覆蓋率(statement coverage):又稱行覆蓋(LineCoverage), 這個概念是指在仿真的過程中被執(zhí)行語句所占的百分比。一個語句沒有被執(zhí)行到則肯定沒有被檢驗過,因此我們規(guī)定在一個驗證的過程中,語句覆蓋率必需要達(dá)到 100%。語句覆蓋率是對 RTL 代碼中的語句是否執(zhí)行過進行統(tǒng)計。其是常用工具中支持的最基本的覆蓋形式。幾乎所有的測試都能實現(xiàn) 100%的語句覆蓋率, 因此被認(rèn)為“最弱的覆蓋”,它只管覆蓋代碼中的執(zhí)行語句,卻不考慮各種分支的組合等等。


語句覆蓋 100%不代表著覆蓋到所有的分支情況,不代表沒有異常情況發(fā)生。因為每一條語句都有很多種執(zhí)行情況,我們設(shè)計的 case 只跑過了最普通的一種情況。我們看一個最簡單的例子。

int div(int a, int b) beginreturn (a/b);end設(shè)置任何一個測試?yán)?,都可以達(dá)到 100%的覆蓋率。但是當(dāng) b=0 時,就會出

現(xiàn) bug。因此用語句覆蓋率衡量驗證是否完成是不靠譜的。


b. 分支覆蓋(BranchCoverage)
每一個條件語句“if/ else”和“case”語句的執(zhí)行情況。又稱判定覆蓋, 其
是統(tǒng)計各個分支是否被執(zhí)行到。


c. 條件覆蓋(Condition Coverage)
分析在“if”的決定,三元語句被認(rèn)為是一個擴展的分支覆蓋。條件覆蓋是統(tǒng)計 if 語句中每個子表達(dá)式正確和錯誤的結(jié)果是否被執(zhí)行到。而不考慮各個分支是否執(zhí)行到。分支覆蓋和條件覆蓋是對分支語句的不同方面進行統(tǒng)計,下面舉個例子詳細(xì)
說明。

if (a < 10 || b < 10) // 判定return 0; // 分支一elsereturn 1; // 分支二當(dāng)進行分支覆蓋時, 我們設(shè)計 case 只需要覆蓋到分支一和分支二兩種情況

就可以,即只要 a 和 b 的值滿足最終執(zhí)行到兩個 return 就可以。而進行條件覆蓋時,我們設(shè)計 case 要考慮到(a<0)和(b<10)這兩個語句的真假值,只有這兩個語句的真假值都覆蓋到了,才說明條件覆蓋完備了。


同時需要注意,條件覆蓋不是將判定中的每個表達(dá)式的結(jié)果進行排列組合,而是只要每個表達(dá)式的結(jié)果都測試到就可以。


d. 表達(dá)式覆蓋(Expression Coverage)

分析賦值語句右邊表達(dá)式的活動情況,當(dāng)表達(dá)式被執(zhí)行時進行統(tǒng)計。對涉及邏輯運算符的表達(dá)式,將會建立真值表,對應(yīng)真值表中的條件匹配行進行計數(shù)。


e. FSM 覆蓋
又稱有限狀態(tài)機覆蓋,對在一個有限狀態(tài)機中的狀態(tài)、轉(zhuǎn)化和路徑計數(shù)。下面這些因素將會被收集:
1. 狀態(tài)覆蓋向量:有限狀態(tài)機在仿真期間有多少狀態(tài)已經(jīng)達(dá)到。
2. 轉(zhuǎn)換覆蓋向量:狀態(tài)機仿真中多少轉(zhuǎn)換已經(jīng)被執(zhí)行。
3. 多態(tài)轉(zhuǎn)換覆蓋:在狀態(tài)機仿真中追蹤許多可能被執(zhí)行的轉(zhuǎn)換序列。這也被稱為 sequence coverage。

功能覆蓋率
將待測模塊的功能點提取出來,分功能進行測試,當(dāng)所有的功能點都測完時,就驗證了測試的完備性、充分性。


功能覆蓋率更能體現(xiàn) IC 驗證的目的,即確保待測模塊的實現(xiàn)功能, 比代碼覆蓋率更接近驗證目標(biāo)。


為了確保驗證的充分性, 建議在驗證過程中采用功能覆蓋率和代碼覆蓋率結(jié)合的方式。當(dāng)出現(xiàn)功能覆蓋率高、代碼覆蓋率低的情況時,說明驗證計劃不充分,需要增加功能覆蓋點。當(dāng)代碼覆蓋率高而功能覆蓋率低時,設(shè)計沒有實現(xiàn)指定的功能。


我對于功能覆蓋率的一點心得:即根據(jù)模塊待測的的功能點來生成對應(yīng)的測試用例,然后跑代碼覆蓋率。首先要保證所有的功能點全部跑完,這樣代碼覆蓋率也就八九不離十了。但是在梳理功能點時需要注意以下幾個問題:


1.功能點也分為大功能點和小功能點,同時大功能點中有可能會嵌套有小功能點。代碼覆蓋率達(dá)不到預(yù)期效果的原因之一有可能是大功能點的部分小功能點未能覆蓋到。

2.功能點分為正常功能點和異常功能點,大部分的開發(fā)人員比較重視正常功能點,而往往忽略異常功能點的梳理。

3.功能點分為基本功能點和擴展功能點,基本功能點用于測試模塊基本的功能,而擴展功能點用于測試模塊較為復(fù)雜的功能, 只有基本功能點測試正確之后,才能開始測試擴展功能點。


上述三點要求代碼開發(fā)人員盡可能的完善測試功能點,并將功能點歸類。

本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
關(guān)閉
關(guān)閉