1. 程式人生 > >IC數字前端設計開發27 (VCS中使用coverage metrics進行程式碼覆蓋分析)

IC數字前端設計開發27 (VCS中使用coverage metrics進行程式碼覆蓋分析)

來自:https://blog.csdn.net/fredfei2002/article/details/5539060

 

VCS覆蓋率概念

  1. vcs指令碼命令中包含六種覆蓋率分析選項:-cm line|cond|fsm|tgl|path|branch|assert,分別代表行覆蓋率|條件覆蓋率|狀態機覆蓋率|翻轉覆蓋率|路徑覆蓋率|分支覆蓋率|斷言覆蓋率   最低要求為line100%, line+tgl+fsm+cond更好。
  2. line_coverage:模擬程式碼中行和語句的覆蓋情況;cond_coverage:表明程式碼中條件語句的覆蓋情況;fsm_coverage:狀態機中各個狀態的覆蓋情況;tgl_coverage:程式碼中訊號的0到1,1到0的翻轉情況;obc:表明程式碼中的分支覆蓋情況(if_else,case,及三元操作符);path_coverage:表明程式碼中資料通路的覆蓋情況;
  3. UVF採用行覆蓋率、條件覆蓋率、狀態機覆蓋率和分支覆蓋率作為程式碼覆蓋率的判斷標準;
  4. 分支覆蓋率和條件覆蓋率有什麼不同呢?分支覆蓋率是每個分支是否被執行及其執行的次數,與行覆蓋率有點類似作用,而條件覆蓋i率是條件的內容出現的組合情況是否都出現過,這個可以驗證這個條件寫的合不合理;
  5. 功能覆蓋率基於控制的SVA斷言覆蓋率及基於資料的功能覆蓋率,即coverage group中的容器被擊中的情況;

 

 

VCS工具自帶的Coverage Metric是一個功能強大的程式碼覆蓋率分析工具,它能對模擬過程進行監測和評估,並可以通過指定對RTL程式碼中的哪一部分進行統計,即不關注那些無需進行覆蓋率統計的程式碼(如memory的bist模組部分),從而提高驗證效率。除此之外,在驗證平臺及設計程式碼已經基本穩定並進入全部case的迴歸階段,該工具可以記錄並儲存每次模擬的相關資訊,並在全部case模擬完成後將這些中間資料對程式碼覆蓋率的貢獻累加起來,生成一個最終的程式碼覆蓋率統計報告。該工具還能自動將沒有覆蓋到的行標示出來,方便驗證人員和設計人員進行分析和改進。此外,它還支援圖形介面的使用。

Coverage Metrcs工具可以提供對如下幾種覆蓋率指標的統計:

l         Line or statement coverage:表明模擬過程程式碼中行和語句的覆蓋情況,即區分出哪些得到執行,哪些沒有執行。

l         Path/Condition coverage:表明程式碼中資料通路和條件語句的覆蓋情況。

l         Toggle coverage:表明程式碼中訊號的0到1和1到0的翻轉情況。

l         FSM coverage:表明內狀態機中各個狀態的覆蓋情況。

l         Branch coverage:表明仿程式碼中的分支覆蓋情況。Verilog中的分支包括“if-else語句”、“case語句”和三元操作符“? :”。

 

編譯時需新增如下命令:-lca –cm line+fsm+cond+path+branch+tgl –cm_dir “coverage_dir” –cm_hier “hierarchy cfg name” –cm_name “test suite name”

 

注:

       -lca 不知道幹什麼的

-cm_dir<directory_paht_name> 指明simv.cm資料夾的名稱和路徑;預設為simv.cm

       -cm_hier<filename> 分析程式碼覆蓋率時指定的配置檔案,此配置檔案用來指定所需要進行程式碼覆蓋率分析的模組。使用時在配置檔案中指定所需要進行程式碼覆蓋統計的模組,預設情況下vcs將統計所編譯的所有模組的程式碼覆蓋率。

       -cm_name<filename> 編譯和執行時指定中間資料檔名稱

       -cm_pp gui           啟動cmView的GUI介面

 

如何選定固定的一部分進行coverage分析呢?
   -cm_hier config_file 通過寫config_file確定需要要做coverage的範圍
       +tree instance_name level_number 該instance代表的樹的選擇,預設為0, 0代表整個instance。1為指定module_instance的頂層訊號。n為記錄從頂層開始到下面n層例化模組的訊號
       +module
       +file
       +filelist
       +library

 

執行時同樣需要新增以上命令。./simv –lca –cm line+fsm+cond+path+branch+tgl –cm_dir” “ –cm_hier” “ –cm_name” “

執行完成後生成程式碼覆蓋報告:urg –dir “coverage_dir”。coverage_dir為之前定義的-cm_dir。

然後可用Firefox檢視urgreport。