Checks和coverage是覆蓋率驅(qū)動(dòng)的驗(yàn)證流程的關(guān)鍵。在驗(yàn)證環(huán)境中,Checks和coverage可以被定義在多個(gè)位置。
在Classes中實(shí)現(xiàn)Checks和Coverage
uvm_monitor的派生類總是存在于agent中,因此包含必要的Checks和Coverage。下面是一個(gè)斷言檢查的簡(jiǎn)單例子,傳輸?shù)膕ize字段是1、2、4或8。否則斷言失敗。
check也可以寫成函數(shù)的形式,例如檢查size字段的值與動(dòng)態(tài)數(shù)組的size相匹配。
這兩個(gè)檢查都應(yīng)該在transfer被monitor收集時(shí)執(zhí)行。由于這些check是在同一時(shí)間發(fā)生的,所以可以封裝成一個(gè)函數(shù),這樣就只需要進(jìn)行一次調(diào)用。
功能覆蓋是通過SystemVerilog covergroups實(shí)現(xiàn)的,下面是一個(gè)簡(jiǎn)單的covergroups的例子。
這個(gè)covergroup被定義在一個(gè)從uvm_monitor派生出來的類里面。對(duì)于上述covergroup,應(yīng)該在一個(gè)函數(shù)中聲明作為coverpoints的局部變量,然后對(duì)covergroup進(jìn)行采樣。
SystemVerilog沒有提供動(dòng)態(tài)數(shù)組覆蓋率收集的能力,這個(gè)函數(shù)實(shí)現(xiàn)了這個(gè)功能。perform_transfer_coverage()函數(shù)會(huì)像 perform_transfer_checks()一樣,在transaction被monitor收集時(shí)調(diào)用。
在Interfaces中實(shí)現(xiàn)Checks和Coverage
InterfacesChecks被實(shí)現(xiàn)為assertions,以檢查信號(hào)協(xié)議為主。例如,一個(gè)斷言可能會(huì)檢查一個(gè)地址在有效的傳輸過程中從未出現(xiàn)過X。
在Formal FPV中,
當(dāng)property表達(dá)DUT的內(nèi)部和輸出行為時(shí),使用assert進(jìn)行檢查。
當(dāng)property表達(dá)產(chǎn)生DUT激勵(lì)的環(huán)境行為時(shí),就使用assume約束。
控制Checks和Coverage
應(yīng)該提供一個(gè)字段來控制Checks是否被執(zhí)行和Coverage是否被收集,該字段可以通過uvm_config_db接口來控制。下面是一個(gè)使用checks_enable位來控制Checks的例子。
if (checks_enable) perform_transfer_checks();
uvm_config_db#(int)::set(this,"masters[0].monitor", "checks_enable", 0);
?
審核編輯:劉清
-
Verilog
+關(guān)注
關(guān)注
28文章
1343瀏覽量
109932 -
UVM
+關(guān)注
關(guān)注
0文章
181瀏覽量
19122 -
DUT
+關(guān)注
關(guān)注
0文章
189瀏覽量
12310
原文標(biāo)題:在驗(yàn)證環(huán)境中開發(fā)Checks和Coverage
文章出處:【微信號(hào):芯片驗(yàn)證工程師,微信公眾號(hào):芯片驗(yàn)證工程師】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論