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





