功能覆蓋率指你對設計所實現功能特性的收集,驗證的目的就是確保設計在實際環境中的行為正確。設計規範裡詳細說明了裝置應該如何執行,而驗證計畫裡則列出了相應的功能應該如何激勵、驗證和測量。
功能覆蓋率是和設計意圖緊密相連的,有時也稱為」規範覆蓋率「,而**覆蓋率則是衡量設計的實現情況。
如果你的功能覆蓋率很高但是**覆蓋率很低,這說明你列的測試點可能不夠全面,有遺漏的功能沒有加入到你的測試計畫中,你的測試沒有很好的執行設計的所有**,這是應該回到設計規範上,更新驗證計畫,然後增加更過針對未測試功能的覆蓋點。
如果你的功能覆蓋率很低但是**覆蓋率很高,即使設計的**都被執行了,但是你所列的覆蓋點缺沒有很好的覆蓋到,首先要檢測下dut是否實現了所有的功能,如果功能有了,但是還是測試不到,這時就需要乙個形式驗證工具來提取設計狀態並建立合適的激勵了。
`ifndef guard_coverage
`define guard_coverage
class coverage extends uvm_subscriber ;
packet pkt;
covergroup switch_coverage;
length : coverpoint pkt.length; //自動對length建立倉
da : coverpoint pkt.da ;
bins p1 = ;
bins p2 = ;
bins p3 = ; }
length_kind : coverpoint pkt.length_kind
fcs_kind : coverpoint pkt.fcs_kind; //建立乙個倉代表fcs_kind == 0
bins lo = ; //建立乙個倉代表1:3和5
bins hi = ; //建立從8到最大值建立每個值獨立的倉
bins misc = default; //建立乙個倉表示剩餘的所有值
ignore_bins igbin = ; //忽略掉6和7的兩個倉
illegal_bins ill_bin = //如果出現值8和9遍報錯的非法倉
}port : coverpoint pkt.port
all_cross: cross length,da,length_kind,fcs_kind;//交叉覆蓋率
binsof_cross : cross length ,da
endgroup
function new();
switch_coverage = new();
endfunction : new
task sample(packet pkt);
this.pkt = pkt;
switch_coverage.sample();
endtask:sample
endclass
`endif
uvm中內建了uvm_subscriber類,可以被當作觀察者或者訂閱者使用。
一般用在構建功能覆蓋率的收集。偽**如下:
訂閱者訂閱monitor中收集到的transaction,覆蓋率模組,參考模型,scoreboard都是訂閱者。每當monitor收集到新的transaction,自動呼叫write函式,將transaction廣播出去(uvm_analysis_port是乙個廣播的port,可以對應多個接收者)至於write函式如何實現,monitor並不關心,每個訂閱者的write實現不同。在覆蓋率類中write具體實現就是呼叫sample函式,收集覆蓋率。uvm通過connect函式將tlm埠連線,在訂閱者和發布者之間建立了聯絡。
option用於統計覆蓋率時,則只會用於個別例項instance,即當option.instance=0時,則列印單個instance的覆蓋率不會再把該coverpoint的覆蓋率統計在內,但是對於總的所有instance的覆蓋率並沒有影響,還是會計算該coverpoint的覆蓋率。
type_option用於統計覆蓋率時,則只會用於某個型別的coverpoint,即當type_option.instance=0時,則列印單個instance的覆蓋率會把該coverpoint的覆蓋率統計在內,但是對於總的所有instance的覆蓋率則有影響,不計算該coverpoint的覆蓋率。
我們常用$get_coverage得到所有覆蓋組的總的覆蓋率,使用get_coverage得到單個覆蓋組所有例項的覆蓋率,使用get_inst_coverage得到單個覆蓋組中特定例項的覆蓋率。
功能覆蓋率
功能覆蓋率 function coverage 是屬於黑盒測試範疇內的,在實際測試中,涉及到的覆蓋率一般都是結構化覆蓋率,與黑盒相關的覆蓋率比較少。功能覆蓋中最常見的是需求覆蓋,其含義是通過設計一定的測試用例,要求每個需求點都被測試到。其公式是 需求覆蓋 被驗證到的需求數量 總的需求數量 在黑盒測試...
覆蓋率選項,覆蓋率分析
covergroup選項提供不同的覆蓋率選項,來計算覆蓋率。乙個covergroup可能會被多個地方例化使用,預設情況下sv會將所有的例項的覆蓋率合併到一起計算。如果需要單獨列出每個covergroup例項的覆蓋率,需要以下設定覆蓋率選項。covergroup cov coverpoint tr.l...
測試覆蓋率
摘要 在測試方法中粗略的介紹了幾種測試方法。其中,白盒測試的動態分析方法中提到邏輯覆蓋率測試有 語句覆蓋 分支覆蓋 判定覆蓋 條件覆蓋 條件 判定覆蓋和路徑覆蓋。這裡將詳細闡述邏輯覆蓋率測試。準備知識 可執行語句 可執行的一項操作 真 假分支 ture false 運算元 opreand 操作符 o...