[SV]在module中使用covergroup cover一個多bit向量狀態轉移的方法

       SystemVerilog在module中cover一個多bit向量狀態轉移的方法

 

       前言:在驗DSB(Data Send Back)的時候,我們經常會遇到這樣的場景:需要Cover每個Channel的工作狀態,需要看是否有IRQ發生,看這個IRQ能否被mask掉。如何去Cover這種狀態呢?本文將推薦一種做法。

 

一、各個Channel的IDLE狀態

 1.1、假設idle信號的邏輯如下:

bit [193:0]                        idle;
bit [193:0]                        req;
bit [193:0]                        work;

idle = ~(req | work);

 

 1.2、covergroup定義及例化

  • 在module中使用generate做“複製”的操作
  • 通過new函數(構造函數)給covergroup傳參數
  • 注意:此處是創建多個covergroup的實例,就是說對每個bit單獨收coverage,所以要打開per_instance
  • 若沒有打開per_instance,最後只能收到一個實例的coverg
module dma_test_top();

  covergroup idle_chk_cvg(logic i) @(posedge clk);
    option.per_instance = 1;

    idle_trans : coverpoint idle_vector[i] {
      b
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章