如何更轻松地为总线中的每个位制作封面点?

时间:2018-03-16 15:17:15

标签: system-verilog system-verilog-assertions

在设计中有一个4位的总线,因此alfa[3:0],我想制作一个封面组,显示所有位是否都是0和1。

这样做的一种方法是写出来:

covergroup alfa_cv @(posedge clk);
  coverpoint alfa[0];
  coverpoint alfa[1];
  coverpoint alfa[2];
  coverpoint alfa[3];
endgroup

alfa_cv alfa_covergroup = new;

但有没有更简单的方法来制作覆盖点以覆盖总线中的每个位?

2 个答案:

答案 0 :(得分:1)

通常代码覆盖范围包括切换覆盖率。你不应该为此创建一个封面组。但是你可以创建一个covergroups数组

covergroup cg(input int index, ref bit [31:0] bus) @(posedge clk);
  each_bit: coverpoint bus[index];
  option.per_instance = 1;
endgroup

cg cgbits[32];

for (int index=0; index<$size(alfa);index++)  
   cgbits[index] = new(index,alfa);

答案 1 :(得分:0)

正如大家在这里提到的那样,你不需要为此目的编写一个封面组,因为切换覆盖范围将会照顾它。

但是,如果你想编写一个封面组,那么你可以直接使用alfa作为封面,如下所示。

covergroup alfa_cv @(posedge clk);
  coverpoint alfa;
endgroup