System verilog systemverilog转换功能覆盖范围中的过滤器箱
是否有办法限制在系统Verilog覆盖点的过渡覆盖范围内生成的BIN 例如,我想介绍到某个值的转换,以及从某个值到另一个值的转换,但我不关心到/从什么转换,我也不想为讨论中的每个“某个值”写一个单独的binSystem verilog systemverilog转换功能覆盖范围中的过滤器箱,system-verilog,System Verilog,是否有办法限制在系统Verilog覆盖点的过渡覆盖范围内生成的BIN 例如,我想介绍到某个值的转换,以及从某个值到另一个值的转换,但我不关心到/从什么转换,我也不想为讨论中的每个“某个值”写一个单独的bin module a ; logic [7-1 : 0] b; covergroup c ; cp_aaa : coverpoint b { bins tr [] = ([0:128] => [0:128]) ; } endg
module a ;
logic [7-1 : 0] b;
covergroup c ;
cp_aaa : coverpoint b {
bins tr [] = ([0:128] => [0:128]) ;
}
endgroup
endmodule
产生2^14个垃圾箱,数量过多
如果能够有如下伪代码,那就太好了:
bins tr [] = (notq => q)
for q inside {[128-1:0]}
where notq != q && notq inside {[128-1:0]};
让它只生成128个垃圾箱
是的,在这个特定的例子中,这几乎等同于说bin tr[]={[128-1:0]}
,但我对原理感兴趣
理想情况下,有一种方法可以按程序(而不是以声明方式)生成存储箱…我不会尝试使用转换存储箱,因为它太复杂了。使用
交叉符号
covergroup c;
currvalue: coverpoint q {
bins v[128] = {[0:127]};
}
prevvalue: coverpoint prevq {
bins v[128] = {[0:127]};
}
X: coverpoint q != prevq {
bins xx = {1}; // 1 bin
}
to: cross currvalue,X; // creates 128 cross bins
away: cross prevvalue,X;
endgroup
我没有尝试这个,因为您没有给出完整的示例,但应该可以让您接近。正如我所说,我没有尝试过。我缺少一个
[
。您需要提供一个完整的示例来测试它。