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