當前位置:首頁 > 公眾號精選 > 芯片驗證工程師
[導讀]什么是功能覆蓋率?驗證中的覆蓋率分功能覆蓋率和代碼覆蓋率兩種,斷言覆蓋率可歸類為功能覆蓋率。顧名思義,功能覆蓋率用于衡量設計中有多少功能被覆蓋到了,被驗證了,而代碼覆蓋率則是衡量代碼實現(xiàn)中有多少語句被執(zhí)行到了。前者是基于設計的源頭,而后者是基于設計的最終實現(xiàn),源頭是本,實現(xiàn)是末。...

么是功能覆蓋率?驗證中的覆蓋率分功能覆蓋率和代碼覆蓋率兩種,斷言覆蓋率可歸類為功能覆蓋率。

顧名思義,功能覆蓋率用于衡量設計中有多少功能被覆蓋到了,被驗證了,而代碼覆蓋率則是衡量代碼實現(xiàn)中有多少語句被執(zhí)行到了。前者是基于設計的源頭,而后者是基于設計的最終實現(xiàn),源頭是本,實現(xiàn)是末。抓住了根本,目標指日可待;舍本逐末,事倍功半。
為什么是功能覆蓋率?現(xiàn)在的主流的驗證語言是systemverilog,其特點之一就是約束下的隨機。相比較定向測試,它的驗證效率更高,定向測試需要對每個功能點,每個測試維度去構(gòu)造不同的用例測試,只能是想多少測多少,激勵空間是已知的。而隨機化的驗證,其激勵空間要大的多,遠遠大于定向測試的激勵空間。定向測試好處是每個用例測試激勵明確,只要測試通過了,用例的目標也就達成了,而隨機化的驗證問題是測試激勵不明確,雖然它的激勵空間更大,但是怎樣知道用例執(zhí)行完成后,覆蓋到了哪些激勵空間,沒有覆蓋到哪些激勵空間呢?所以需要一個衡量標準,這就是功能覆蓋率。
怎樣做功能覆蓋率?
需求!需求!需求!重要的事情說三遍,經(jīng)過提取、整理和評審一致通過的驗證需求,是做功能覆蓋率的依據(jù),要保證每個需求的充分驗證,有哪些點必須驗證到,這個是必須具體化、量化的,想不清楚這個問題就是沒有真正理解需求,驗證質(zhì)量又如何保證呢。
Systemverilog語言對于功能覆蓋率有很好的支持,其中覆蓋點和交叉覆蓋的概念非常重要。覆蓋點對應的是上面提到的量化后的需求,這只是點,多個點就是一條線,是一個維度的覆蓋;一個設計諸多功能并不是完全孤立的,所以單單驗證一個點、一條線遠遠的不夠的,交叉覆蓋率就是來把這些點、線連接起來,織成了一張網(wǎng)。通過這張網(wǎng)把所有需求囊括其中。
基于功能覆蓋率驅(qū)動的驗證:有被動驅(qū)動和主動驅(qū)動兩種。
所謂被動驅(qū)動,有點“馬后炮”的嫌疑,在用例執(zhí)行完成后,通過查看覆蓋率報告來對未覆蓋到的點補充定向用例覆蓋;而主動驅(qū)動,是在用例執(zhí)行過程中,以功能覆蓋率100%或預期的百分比作為退出條件,否則會一直進行隨機測試,“不達目的誓不罷休”。
所謂行百里者半九十,做隨機化驗證也存在著越臨近終點,需要付出的更多,因為越到最后隨機重復的概率越大,隨機成千上萬次可能才能有一個新覆蓋點,命中率越來越低。針對這個問題,如果采用主動驅(qū)動方法,可以提前篩選掉重復的隨機,只采用對覆蓋率有貢獻的隨機值,將命中率提高到100%。
但被動驅(qū)動方法也有其優(yōu)勢,覆蓋組是對所有用例的隨機進行采樣,而主動驅(qū)動是針對單一用例來實現(xiàn)的。通過諸多項目經(jīng)驗來看,首推主動驅(qū)動方法,效率更高。
結(jié)論
理解清楚驗證需求,具體量化驗證需求,用功能覆蓋率編織的一張大網(wǎng),把所有的覆蓋點一網(wǎng)打盡,采用主動、被動驅(qū)動方法做到攻守兼?zhèn)?,讓驗證工作更加高質(zhì)、高效。

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