System verilog 如何更容易地为总线中的每个位创建覆盖点?
在一个设计中,有一个4位的总线,因此alfa[3:0],我想制作一个covergroup,显示所有位是否同时为0和1 一种方法是这样写:System verilog 如何更容易地为总线中的每个位创建覆盖点?,system-verilog,System Verilog,在一个设计中,有一个4位的总线,因此alfa[3:0],我想制作一个covergroup,显示所有位是否同时为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; 但是有没有更简单的方法使覆盖点覆
covergroup alfa_cv @(posedge clk);
coverpoint alfa[0];
coverpoint alfa[1];
coverpoint alfa[2];
coverpoint alfa[3];
endgroup
alfa_cv alfa_covergroup = new;
但是有没有更简单的方法使覆盖点覆盖总线中的每个位呢?通常代码覆盖包括切换覆盖。您不必为此创建covergroup。但您可以创建一个CoverGroup数组
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);
正如大家在这里提到的,你不需要为此编写一个covergroup,因为切换覆盖将解决这个问题 但是,如果您想编写一个covergroup,那么您可以直接使用alfa作为coverpoint,如下所示
covergroup alfa_cv @(posedge clk);
coverpoint alfa;
endgroup
您可以在covergroup内执行以下操作:coverpoint alfa;。您好,感谢您的建议,但这为4位中的所有值组合提供了一个覆盖组,因此2**4=16个组合,并且不仅为每个位0和1,因此4*2=8个组合。感谢您的启发,但由于报告的错误,不得不做一些修改,例如,必须将索引声明为genvar index;。这取决于for循环所在的上下文。