SV中基於覆蓋率驅動驗證技術(CDV)和生成-檢視覆蓋率報告
技術標籤:IC驗證
目錄
基於覆蓋率驅動的驗證技術(CDV):
覆蓋率是對RTL設計功能進行驗證後達到的覆蓋百分比
(1)檢查過程需滿足完整性,就是cover到文件中所有功能;
(2)滿足正確性;
程式碼覆蓋率
衡量測試案例驗證-覆蓋了哪些設計規則在RTL中實現了,而不能衡量驗證計劃;
1、行(Line Coverage):RTL中的程式碼行;
3、路徑(Path Coverage):RTL程式碼中的路徑分支(if-else語句);
4、訊號翻轉(Toggle Coverage):RTL程式碼中的一個訊號從0跳變到1,以及1跳變到0;
5、表示式(Expression coverage):RTL程式碼中的條件表示式,例如if(a&b&c);
斷言覆蓋率
Assertion Coverage斷言覆蓋率:
1、斷言是一種宣告性的程式碼,一般插到RTL中,用於檢查RTL程式碼中的訊號之間的關係,也就是做時序檢查;
定義功能覆蓋率模型
covergroup解釋
作用:
(1)封裝覆蓋率模型的規格,是使用者定義的一種;結構型別
(2)每個covergroup包含以下內容:一個時鐘事件,用於同步取樣覆蓋點;一組覆蓋點;
(3)跟class類似,完成定義後,可以通過建構函式new()
生成covergroup
的例項;
(4)covergroup
可以定義在module
,program
,interface
,class
中;
功能覆蓋率的取樣事件
帶有event
觸發的covergroup
,當驗證平臺觸發trans_ready
事件時,取樣CovPort
;
event trans_ready;
covergroup CovPort @(trans_ready);
coverpoint ifc.cb.port;
endgroup
這裡的trans_ready
可以換成ck.sample()
、@(posedge clk)
、@(port)
定義覆蓋點:bins
定義bins時
(1)使用者限制覆蓋率統計時需要的數值;
(2)SystemVerilog不再自動建立bins,並且忽略非使用者定義的bins值;
(3)只有使用者定義的bins的值才可以用於計算機功能覆蓋率;
covergroup CovKind;
coverpoint tr.kind {
bins zero = {0};
bins lo = {[1:3],5};
bins hi[] = {[8:$]};
bins misc=default;
}
endgroup
定義覆蓋點:條件覆蓋
(1)使用關鍵字iff
為覆蓋點新增條件
當reset=1時,不收集覆蓋率
covergroup CoverPort;
covergroup port iff(!bus_if.reset);
endgroup
(2)使用start和stop函式
在reset序列期間,停止收集覆蓋率
initial begin
CovPort ck=new;
#1ns bus_if.reset=1;
ck.stop();
#100ns bus_if.reset=0;
ck.start();
...
end
定義覆蓋點:狀態跳轉覆蓋
(1)使用者定義覆蓋點的狀態跳轉,並收集相關的資訊
covergroup CoverPort;
coverpoint port{
bins t1=(0=>1),(0=>2),(0=>3);
bins t2=(1,2=>3,4)
}
endgroup
(2)使用?等萬用字元表示狀態和狀態跳轉
bit [2:0] port;
covergroup CoverPort {
wildcard bins even={3'b??0};
wildcard bins odd={3'b??1};
}
endgroup
定義覆蓋點:交叉覆蓋
在覆蓋率組中,可以定義兩個或多個覆蓋點或者變數之間的交叉覆蓋率
class Transaction;
rand bit [3:0] kind;
rand bit [2:0] port;
endclass
covergroup CovPort
kind: coverpoint tr.kind; // 0~15
port: coverpoint tr.port; // 0~7
cross kind,port;
endgroup
也就是有16 x 8 個倉(bin)
生成覆蓋率報告和檢視覆蓋率報告:
vcs-sverilogcovergroup.sv-debug_all-R-Mupdate
(1)使用-Mupdate進行增量編譯,再次編譯時只編譯改變的檔案,提高速率;
(2)vcs模擬的2個步驟:
程式碼編譯:如 vcs cpu.v
模擬執行:如 simv
或者通過-R選項將2個步驟合成一步:
編譯執行:如vcs -R cpu.v,
-R :run after compilation,編譯後繼續執行runsim.vdb
就是覆蓋率檔案
兩種方法開啟sim.vdb
檢視覆蓋率:
(1)dve -cov&
,然後開啟覆蓋率檔案就可以檢視
(2)urg -dir ./*.vdb -format both -report coverage
,這個就是生成html和text兩種格式覆蓋率報告,放在coverage資料夾裡,然後進入coverage資料夾,firefox dashboard.html
和gvim dashboard.txt
兩種方式都可以開啟覆蓋率報告。
Makefile
微信公眾號
建立了一個微信公眾號“Andy的ICer之路”,此公眾號主要分享數字IC相關的學習經驗,文章主要在公眾號上發,csdn會盡量同步更新,有興趣的朋友可以關注一下!