功能覆蓋率

2022-09-09 08:27:08 字數 2381 閱讀 7212

功能覆蓋率指你對設計所實現功能特性的收集,驗證的目的就是確保設計在實際環境中的行為正確。設計規範裡詳細說明了裝置應該如何執行,而驗證計畫裡則列出了相應的功能應該如何激勵、驗證和測量。

功能覆蓋率是和設計意圖緊密相連的,有時也稱為」規範覆蓋率「,而**覆蓋率則是衡量設計的實現情況。

如果你的功能覆蓋率很高但是**覆蓋率很低,這說明你列的測試點可能不夠全面,有遺漏的功能沒有加入到你的測試計畫中,你的測試沒有很好的執行設計的所有**,這是應該回到設計規範上,更新驗證計畫,然後增加更過針對未測試功能的覆蓋點。

如果你的功能覆蓋率很低但是**覆蓋率很高,即使設計的**都被執行了,但是你所列的覆蓋點缺沒有很好的覆蓋到,首先要檢測下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...