前面我們探討了接到驗(yàn)證任務(wù)后的行動(dòng)以及前期如何進(jìn)行高效的學(xué)習(xí),當(dāng)有了對(duì)驗(yàn)證對(duì)象的充分理解和學(xué)習(xí)之后,我們就可以進(jìn)行驗(yàn)證feature(即驗(yàn)證的測(cè)試點(diǎn))的提取了。
凡事預(yù)則立,不預(yù)則廢,眾所周知,驗(yàn)證feature文檔決定驗(yàn)證的內(nèi)容、側(cè)重點(diǎn)、質(zhì)量,是驗(yàn)證工程師最重要的文檔和指導(dǎo)工具。
本文的側(cè)重點(diǎn)不在于大而全的探討諸如”不同類型的驗(yàn)證對(duì)象哪些點(diǎn)可以作為驗(yàn)證feature”等內(nèi)容(以后在別的文章中有機(jī)會(huì)再討論),而是繼續(xù)遵循“高效”的主題,一起探討如何又快又好的梳理驗(yàn)證測(cè)試點(diǎn)這個(gè)文檔?怎樣在驗(yàn)證過(guò)程中充分使用這個(gè)文檔?
杰瑞IC驗(yàn)證給出一種答案,圍繞一個(gè)口訣來(lái)作為今天探討的線索和綜述:
“先粗再細(xì)、先全再剃、不斷迭代、定期反思”
1
先粗再細(xì)
對(duì)于驗(yàn)證feature來(lái)說(shuō)什么叫粗?什么叫細(xì)?
我們舉個(gè)簡(jiǎn)單的例子,如一條驗(yàn)證feature可以這樣寫:
“需要覆蓋中斷功能的測(cè)試?!?/p>
也可以把這一條驗(yàn)證feature細(xì)化成多條驗(yàn)證feature,這樣寫:
“覆蓋不同中斷信號(hào)使能打開、關(guān)閉測(cè)試”
“覆蓋中斷正常清除測(cè)試”
“覆蓋延遲清除中斷測(cè)試”
“覆蓋不同中斷來(lái)源的中斷測(cè)試” “覆蓋中斷有效后相關(guān)中斷狀態(tài)寄存器正確性檢查” “覆蓋中斷不同來(lái)源同時(shí)有效的優(yōu)先級(jí)測(cè)試”
“覆蓋多中斷次數(shù)測(cè)試場(chǎng)景”
……
當(dāng)然,還可以寫的更細(xì)致:
例如上面“覆蓋不同中斷信號(hào)使能打開、關(guān)閉測(cè)試”可以繼續(xù)分解:
“覆蓋不同中斷信號(hào)隨機(jī)打開關(guān)閉以及不同信號(hào)間的交叉場(chǎng)景”
“覆蓋中斷信號(hào)使能全關(guān)閉,通過(guò)輪詢寄存器方式處理中斷場(chǎng)景”
……
例如“覆蓋延遲清除中斷測(cè)試”可以繼續(xù)分解:
“覆蓋延遲清中斷,延遲時(shí)間小范圍隨機(jī)”
“覆蓋延遲清中斷,延遲時(shí)間等到下一個(gè)中斷來(lái)之后再清除” ……
我們不再繼續(xù)細(xì)化贅述,相信大家從舉例中已經(jīng)有點(diǎn)感覺(jué)了,什么叫“粗”,什么叫“細(xì)”,這里說(shuō)到的粗細(xì),其實(shí)就是指的是驗(yàn)證feature的顆粒度。
杰瑞IC驗(yàn)證認(rèn)為,一個(gè)好的驗(yàn)證feature文檔,一定是全面且顆粒度很細(xì)的文檔。只有顆粒度很細(xì),借助這個(gè)驗(yàn)證feature文檔才能更好的幫助你把需要覆蓋的測(cè)試點(diǎn)思考清楚,更好的衡量你的驗(yàn)證工作量制定驗(yàn)證計(jì)劃、更好的幫你構(gòu)造定向或隨機(jī)case和編寫功能覆蓋率代碼、更好的保證你的驗(yàn)證完備性。
可想而知,如果你只寫一句這么“博大精深”的驗(yàn)證feature:“需要覆蓋中斷功能的測(cè)試?!?,你看到這條驗(yàn)證feature也許很難會(huì)想到還需要:“覆蓋延遲清中斷,延遲時(shí)間等到下一個(gè)中斷來(lái)之后再清除” 這種測(cè)試場(chǎng)景,這樣就有可能會(huì)埋下風(fēng)險(xiǎn)。
我們回到“高效戰(zhàn)斗”的主題,怎么又好又快的把這個(gè)文檔搞定呢?
從高效的角度杰瑞IC驗(yàn)證建議一定要“先粗再細(xì)”。
一方面:
“粗”可以讓我們站在一個(gè)宏觀的角度,不漏掉大的功能點(diǎn),例如先涵蓋各種需求點(diǎn)、各種設(shè)計(jì)文檔核心功能點(diǎn)、應(yīng)用場(chǎng)景、性能點(diǎn)、功耗測(cè)試點(diǎn)、壓力測(cè)試點(diǎn)、注錯(cuò)點(diǎn)等等
另一方面:
我們是不可能一蹴而就的。如果一開始就鉆進(jìn)某一個(gè)點(diǎn),把某個(gè)功能的所有細(xì)節(jié)驗(yàn)證feature寫清楚再寫別的,效率顯然會(huì)低于先寫的粗一點(diǎn),再多輪迭代進(jìn)行細(xì)化。正如前面的舉例,每一次的細(xì)化都在上一輪細(xì)化的思考基礎(chǔ)之上進(jìn)行的,這樣也會(huì)想的更清楚全面。
2
先全再剃
通過(guò)剛才講的先粗略提取再不斷細(xì)化的方式,相信大家可以高效提取出來(lái)一個(gè)比較全面的驗(yàn)證feature文檔。
前面我們提到:“一個(gè)好的驗(yàn)證feature文檔,一定是全面且顆粒度很細(xì)的文檔。”但是僅僅的全面和顆粒度小,就可以叫一個(gè)好的驗(yàn)證feature文檔嗎??
答案是否定的,全面和顆粒度小,只是提取驗(yàn)證feature的第一步。如果說(shuō)第一步細(xì)化是做加法,第二步更為重要和有難度,那就是做減法。就像本節(jié)的小標(biāo)題“先全再剃”,這里的“剃”,講的就是“剃刀原則”的“剃”,關(guān)注的是驗(yàn)證的執(zhí)行層面,“剃”就是學(xué)會(huì)取舍,就是抓驗(yàn)證重點(diǎn)和主要矛盾,就是高效的體現(xiàn)。
(1)“剃”,刪除掉不必要的驗(yàn)證feature。
有時(shí)候,我們需要?jiǎng)h除和精簡(jiǎn)一些沒(méi)有必要的驗(yàn)證feature。
最簡(jiǎn)單的例如,對(duì)于已經(jīng)多次流片實(shí)踐驗(yàn)證穩(wěn)定的ip,沒(méi)有必要覆蓋非常細(xì)致的驗(yàn)證feature,這部分完全可以舍去不驗(yàn)證。
再舉一個(gè)例子:如針對(duì)某個(gè)參數(shù)我們通過(guò)確定邊界值、典型值、劃分等價(jià)類等方式進(jìn)行驗(yàn)證feature細(xì)化:
“A參數(shù)取值[0:1000],需要覆蓋邊界值0,1000,典型值200、500、600、900……(例如100個(gè)),隨機(jī)覆蓋a模式[0:200),b模式[200:700),c模式[700:1000]”
“B參數(shù)取值[0:8880],需要覆蓋邊界值0,8880,典型值200、500、600、900……(例如300個(gè)),隨機(jī)覆蓋a模式[0:1000),b模式[1000:300),c模式[3000:8880]”
……
這樣的參數(shù)有20個(gè),然后有一條:
“需要覆蓋這20個(gè)參數(shù)取值的所有交叉場(chǎng)景”
這個(gè)“交叉場(chǎng)景”是很全面了(當(dāng)然你如果想“修身養(yǎng)性”可以用一整天時(shí)間進(jìn)一步具體細(xì)化出來(lái)怎么交叉的)。但是這條有意義嗎?
對(duì)于EDA仿真驗(yàn)證來(lái)說(shuō),這條可以說(shuō)是沒(méi)有意義的,因?yàn)檫@個(gè)需要覆蓋的驗(yàn)證空間太大了,大到不能執(zhí)行,即使你通過(guò)腳本交叉參數(shù)一鍵生成批量case,這么大的case量大概率不能在有限的時(shí)間跑完,就算能跑完,這樣的參數(shù)交叉測(cè)試是否真的有意義,是否在浪費(fèi)測(cè)試時(shí)間?我們有這樣的時(shí)間,放在更重要的測(cè)試點(diǎn)上努力是否更有價(jià)值?
所以,對(duì)于這樣的驗(yàn)證feature我們一定要做以權(quán)衡。是否可以通過(guò)深入分析實(shí)際應(yīng)用場(chǎng)景和設(shè)計(jì)思路,精簡(jiǎn)這些驗(yàn)證feature,是不是哪些點(diǎn)可以刪除?是不是哪些點(diǎn)不需要交叉覆蓋?當(dāng)然也可以思考是不是我們可以嘗試啟用形式驗(yàn)證工具?
(2)“剃”,給驗(yàn)證feature選擇一個(gè)更好的歸宿。
舉一個(gè)例子,有這樣一條驗(yàn)證feature:“需要覆蓋連續(xù)不間斷運(yùn)行10000次場(chǎng)景的壓力測(cè)試”。
這條驗(yàn)證feature考慮的沒(méi)有問(wèn)題,顆粒度很細(xì),需求也很明確。但是對(duì)于EDA驗(yàn)證來(lái)說(shuō),又是一個(gè)不可能完成的任務(wù),這么一個(gè)case可能跑幾個(gè)月都結(jié)束不了。對(duì)于這樣的驗(yàn)證feature,不需要從文檔中刪除,因?yàn)?a target="_blank">FPGA測(cè)試是可以辦到的,這種情況可以增加備注,指明在FPGA測(cè)試的時(shí)候進(jìn)行覆蓋,并且負(fù)責(zé)跟蹤這個(gè)點(diǎn)是否在FPGA驗(yàn)證計(jì)劃中列出以及測(cè)試時(shí)候是否確實(shí)落實(shí)。
同理,例如有的驗(yàn)證feature可能不適合在單元級(jí)驗(yàn)證時(shí)候測(cè)試,適合在更高層次的驗(yàn)證階段中測(cè)試,都可以像上面的例子給驗(yàn)證feature一個(gè)更好的測(cè)試“歸宿”,用最適合的方式覆蓋,從而提高項(xiàng)目總體的驗(yàn)證效率。當(dāng)然了,給驗(yàn)證feature更好的歸宿前提是需要驗(yàn)證者了解和把握驗(yàn)證的不同驗(yàn)證階段以及不同驗(yàn)證層次的側(cè)重點(diǎn)和優(yōu)劣勢(shì),有一個(gè)驗(yàn)證的全局觀念。
(3)“剃”,給驗(yàn)證feature刮骨,設(shè)置不同的優(yōu)先級(jí)。
有這么兩條驗(yàn)證feature:
“需要覆蓋中斷功能的測(cè)試”
“覆蓋用于debug的狀態(tài)寄存器”
很明顯,第一個(gè)驗(yàn)證feature是核心功能,第二條重要程度遠(yuǎn)遠(yuǎn)不如第一條。如果我們的驗(yàn)證時(shí)間有限,那我們至少要通過(guò)完備的激勵(lì)和檢查機(jī)制保證第一條核心功能,而不是先編寫大量的checker去自動(dòng)化檢查各種debug狀態(tài)寄存器。
也就是說(shuō),不同的驗(yàn)證feature含金量和優(yōu)先級(jí)也是不一樣的,我們?cè)谔崛◎?yàn)證feature的時(shí)候,要想清楚和標(biāo)注不同驗(yàn)證feature的優(yōu)先級(jí)。
3
不斷迭代
驗(yàn)證feature列表在驗(yàn)證開始前就是寫好固定死了不能變的嗎?
不是的,驗(yàn)證feature文檔是動(dòng)態(tài)變化迭代的。
在正式驗(yàn)證開展之前,我們會(huì)出一個(gè)當(dāng)時(shí)認(rèn)為最完善的版本,但是在驗(yàn)證過(guò)程中我們還是要定期迭代我們的驗(yàn)證feature文檔,例如:
當(dāng)需求和設(shè)計(jì)的變更,我們需要相應(yīng)的修改和增刪驗(yàn)證feature;
當(dāng)功能應(yīng)用場(chǎng)景、典型參數(shù)增加或改變時(shí),及時(shí)增加驗(yàn)證feature;
性能功耗的場(chǎng)景驗(yàn)證feature也可能常常需要修改文檔;
隨著驗(yàn)證過(guò)程中對(duì)設(shè)計(jì)理解更加深入,也需要及時(shí)的記錄和補(bǔ)充細(xì)化驗(yàn)證feature。
4
定期反思
驗(yàn)證feature需要定期反思,有兩層含義,一方面是對(duì)已有驗(yàn)證feature的不斷反思,其實(shí)類似于上面說(shuō)的迭代,定期反思之前提取出的驗(yàn)證feature是否合理或有缺少,這里不過(guò)多解釋;另一方面,是要利用好我們的驗(yàn)證feature文檔,定期反思驗(yàn)證進(jìn)度和質(zhì)量。
a. 依據(jù)我們的驗(yàn)證feature列表和優(yōu)先級(jí)等信息來(lái)制定我們的驗(yàn)證計(jì)劃,并且不斷的修改更正我們的驗(yàn)證計(jì)劃。
b.定期的把測(cè)試用例與驗(yàn)證feature列表做一個(gè)對(duì)應(yīng)和反標(biāo),心里清楚哪些驗(yàn)證feature已經(jīng)有case覆蓋住了,哪些還沒(méi)有,在驗(yàn)證項(xiàng)目最后要保證所有驗(yàn)證feature都有定向或隨機(jī)case可以對(duì)應(yīng)。
c. 功能覆蓋率覆蓋點(diǎn)的規(guī)劃和收集工作,也需要定期利用驗(yàn)證feature文檔進(jìn)行規(guī)劃和反思,確定哪些點(diǎn)是一定需要寫功能覆蓋率收集代碼的,也是驗(yàn)證完備性和質(zhì)量的保證。
結(jié)語(yǔ)
今天我們用了一句口訣來(lái)回答“如何又快又好的梳理和利用驗(yàn)證feature文檔?”
這個(gè)問(wèn)題,即“先粗再細(xì)、先全再剃、不斷迭代、定期反思”。
驗(yàn)證feature文檔的地位絕對(duì)是驗(yàn)證過(guò)程中金字塔的頂端,篇幅有限,這其中很多的細(xì)節(jié)還希望各位進(jìn)一步探索、感悟、交流~
審核編輯:劉清
-
FPGA設(shè)計(jì)
+關(guān)注
關(guān)注
9文章
428瀏覽量
26532 -
EDA工具
+關(guān)注
關(guān)注
4文章
268瀏覽量
31806 -
中斷
+關(guān)注
關(guān)注
5文章
899瀏覽量
41529
原文標(biāo)題:驗(yàn)證feature文檔梳理
文章出處:【微信號(hào):處芯積律,微信公眾號(hào):處芯積律】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論