1. 程式人生 > 其它 >SV中基於覆蓋率驅動驗證技術(CDV)和生成-檢視覆蓋率報告

SV中基於覆蓋率驅動驗證技術(CDV)和生成-檢視覆蓋率報告

技術標籤:IC驗證

目錄

​基於覆蓋率驅動的驗證技術(CDV):

程式碼覆蓋率

斷言覆蓋率

定義功能覆蓋率模型

covergroup解釋

功能覆蓋率的取樣事件

定義覆蓋點:bins

定義覆蓋點:條件覆蓋

定義覆蓋點:狀態跳轉覆蓋

定義覆蓋點:交叉覆蓋

生成覆蓋率報告和檢視覆蓋率報告:

微信公眾號


​基於覆蓋率驅動的驗證技術(CDV):

覆蓋率是對RTL設計功能進行驗證後達到的覆蓋百分比
(1)檢查過程需滿足完整性,就是cover到文件中所有功能;
(2)滿足正確性;

程式碼覆蓋率

衡量測試案例驗證-覆蓋了哪些設計規則在RTL中實現了,而不能衡量驗證計劃;
1、行(Line Coverage):RTL中的程式碼行;

2、有限狀態機(FSM 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;endclasscovergroup 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,編譯後繼續執行run
sim.vdb就是覆蓋率檔案
兩種方法開啟sim.vdb檢視覆蓋率:
(1)dve -cov&,然後開啟覆蓋率檔案就可以檢視
(2)urg -dir ./*.vdb -format both -report coverage,這個就是生成html和text兩種格式覆蓋率報告,放在coverage資料夾裡,然後進入coverage資料夾,firefox dashboard.htmlgvim dashboard.txt兩種方式都可以開啟覆蓋率報告。

Makefile

微信公眾號

建立了一個微信公眾號“Andy的ICer之路”,此公眾號主要分享數字IC相關的學習經驗,文章主要在公眾號上發,csdn會盡量同步更新,有興趣的朋友可以關注一下!