system-verilog - 非法_bin 声明中的条件如何解释?
问题描述
非法_bin 声明中的条件如何处理?还是它们一开始就有效?在我看来,非法 bin 声明没有考虑 bin 中的任何条件 coverpoint_range_list
IE
illegal_bins invalid_1 = {[0:7]} iff (base == 1600 && basediv == 2);
和
illegal_bins invalid_1 = {[0:7]};
的目的illegal_bin
是,只要 base 为 1600 且 basediv 为 2,coverpoint 表达式 [0:7] 内的任何值都不是有效值。
illegal_bins
除了使用cross
andbinsof ... intersect
方式之外,还有其他方法可以使用条件进行编码吗?
下面是示例代码。
class base_cfg;
// Divider Values
rand struct {
rand bit [ 1: 0] BaseDiv1;
rand bit [ 2: 0] BaseDiv2;
rand bit BaseDiv3;
rand bit BaseDiv4;
} s_basediv;
rand int BaseVal;
constraint c_BaseX {
BaseVal inside {1600, 1400, 1200, 1000, 800};
}
constraint c_basediv {
s_basediv.BaseDiv1 inside {[0: 3]};
s_basediv.BaseDiv2 inside {[0: 7]};
s_basediv.BaseDiv3 inside {[0: 1]};
s_basediv.BaseDiv4 inside {[0: 1]};
if (BaseVal == 1600) { s_basediv.BaseDiv1 inside {[0:3]}; }
if (BaseVal == 1400) { s_basediv.BaseDiv1 inside {[0:2]}; }
if (BaseVal == 1200) { s_basediv.BaseDiv1 inside {[0:2]}; }
if (BaseVal == 1000) { s_basediv.BaseDiv1 inside {[0:2]}; }
if (BaseVal == 800 ) { s_basediv.BaseDiv1 inside {[0:2]}; }
if (BaseVal == 1600 && s_basediv.BaseDiv1 == 0) { s_basediv.BaseDiv2 inside {[0:7]}; }
if (BaseVal == 1600 && s_basediv.BaseDiv1 == 1) { s_basediv.BaseDiv2 inside {[0:7]}; }
if (BaseVal == 1600 && s_basediv.BaseDiv1 == 2) { s_basediv.BaseDiv2 inside {[0:3]}; }
if (BaseVal == 1600 && s_basediv.BaseDiv1 == 3) { s_basediv.BaseDiv2 inside {[0:1]}; }
if (BaseVal == 1400 && s_basediv.BaseDiv1 == 0) { s_basediv.BaseDiv2 inside {[0:7]}; }
if (BaseVal == 1400 && s_basediv.BaseDiv1 == 1) { s_basediv.BaseDiv2 inside {[0:6]}; }
if (BaseVal == 1400 && s_basediv.BaseDiv1 == 2) { s_basediv.BaseDiv2 inside {[0:2]}; }
if (BaseVal == 1400 && s_basediv.BaseDiv1 == 3) { s_basediv.BaseDiv2 inside {[0:6]}; }
if (BaseVal == 1200 && s_basediv.BaseDiv1 == 0) { s_basediv.BaseDiv2 inside {[0:7]}; }
if (BaseVal == 1200 && s_basediv.BaseDiv1 == 1) { s_basediv.BaseDiv2 inside {[0:5]}; }
if (BaseVal == 1200 && s_basediv.BaseDiv1 == 2) { s_basediv.BaseDiv2 inside {[0:2]}; }
if (BaseVal == 1000 && s_basediv.BaseDiv1 == 0) { s_basediv.BaseDiv2 inside {[0:7]}; }
if (BaseVal == 1000 && s_basediv.BaseDiv1 == 1) { s_basediv.BaseDiv2 inside {[0:4]}; }
if (BaseVal == 1000 && s_basediv.BaseDiv1 == 2) { s_basediv.BaseDiv2 inside {[0:1]}; }
if (BaseVal == 800 && s_basediv.BaseDiv1 == 0) { s_basediv.BaseDiv2 inside {[0:7]}; }
if (BaseVal == 800 && s_basediv.BaseDiv1 == 1) { s_basediv.BaseDiv2 inside {[0:3]}; }
if (BaseVal == 800 && s_basediv.BaseDiv1 == 2) { s_basediv.BaseDiv2 inside {[0:1]}; }
if (BaseVal == 1600 && s_basediv.BaseDiv1 == 0) { s_basediv.BaseDiv3 inside {[0:1]}; }
if (BaseVal == 1600 && s_basediv.BaseDiv1 == 1) { s_basediv.BaseDiv3 inside {[0:1]}; }
if (BaseVal == 1600 && s_basediv.BaseDiv1 == 2) { s_basediv.BaseDiv3 inside {[0:1]}; }
if (BaseVal == 1600 && s_basediv.BaseDiv1 == 3) { s_basediv.BaseDiv3 inside {[0:0]}; }
if (BaseVal == 1400 && s_basediv.BaseDiv1 == 0) { s_basediv.BaseDiv3 inside {[0:1]}; }
if (BaseVal == 1400 && s_basediv.BaseDiv1 == 1) { s_basediv.BaseDiv3 inside {[0:1]}; }
if (BaseVal == 1400 && s_basediv.BaseDiv1 == 2) { s_basediv.BaseDiv3 inside {[0:1]}; }
if (BaseVal == 1200 && s_basediv.BaseDiv1 == 0) { s_basediv.BaseDiv3 inside {[0:1]}; }
if (BaseVal == 1200 && s_basediv.BaseDiv1 == 1) { s_basediv.BaseDiv3 inside {[0:1]}; }
if (BaseVal == 1200 && s_basediv.BaseDiv1 == 2) { s_basediv.BaseDiv3 inside {[0:1]}; }
if (BaseVal == 1000 && s_basediv.BaseDiv1 == 0) { s_basediv.BaseDiv3 inside {[0:1]}; }
if (BaseVal == 1000 && s_basediv.BaseDiv1 == 1) { s_basediv.BaseDiv3 inside {[0:1]}; }
if (BaseVal == 1000 && s_basediv.BaseDiv1 == 2) { s_basediv.BaseDiv3 inside {[0:0]}; }
if (BaseVal == 800 && s_basediv.BaseDiv1 == 0) { s_basediv.BaseDiv3 inside {[0:1]}; }
if (BaseVal == 800 && s_basediv.BaseDiv1 == 1) { s_basediv.BaseDiv3 inside {[0:1]}; }
if (BaseVal == 800 && s_basediv.BaseDiv1 == 2) { s_basediv.BaseDiv3 inside {[0:0]}; }
if (BaseVal == 1600 && s_basediv.BaseDiv1 == 0) { s_basediv.BaseDiv4 inside {[1:1]}; }
if (BaseVal == 1600 && s_basediv.BaseDiv1 == 1) { s_basediv.BaseDiv4 inside {[0:1]}; }
if (BaseVal == 1600 && s_basediv.BaseDiv1 == 2) { s_basediv.BaseDiv4 inside {[0:1]}; }
if (BaseVal == 1600 && s_basediv.BaseDiv1 == 3) { s_basediv.BaseDiv4 inside {[0:1]}; }
if (BaseVal == 1400 && s_basediv.BaseDiv1 == 0) { s_basediv.BaseDiv4 inside {[1:1]}; }
if (BaseVal == 1400 && s_basediv.BaseDiv1 == 1) { s_basediv.BaseDiv4 inside {[0:1]}; }
if (BaseVal == 1400 && s_basediv.BaseDiv1 == 2) { s_basediv.BaseDiv4 inside {[0:1]}; }
if (BaseVal == 1400 && s_basediv.BaseDiv1 == 3) { s_basediv.BaseDiv4 inside {[0:0]}; }
if (BaseVal == 1200 && s_basediv.BaseDiv1 == 0) { s_basediv.BaseDiv4 inside {[1:1]}; }
if (BaseVal == 1200 && s_basediv.BaseDiv1 == 1) { s_basediv.BaseDiv4 inside {[0:1]}; }
if (BaseVal == 1200 && s_basediv.BaseDiv1 == 2) { s_basediv.BaseDiv4 inside {[0:1]}; }
if (BaseVal == 1200 && s_basediv.BaseDiv1 == 3) { s_basediv.BaseDiv4 inside {[0:0]}; }
if (BaseVal == 1000 && s_basediv.BaseDiv1 == 0) { s_basediv.BaseDiv4 inside {[1:1]}; }
if (BaseVal == 1000 && s_basediv.BaseDiv1 == 1) { s_basediv.BaseDiv4 inside {[0:1]}; }
if (BaseVal == 1000 && s_basediv.BaseDiv1 == 2) { s_basediv.BaseDiv4 inside {[0:1]}; }
if (BaseVal == 1000 && s_basediv.BaseDiv1 == 3) { s_basediv.BaseDiv4 inside {[0:0]}; }
if (BaseVal == 800 && s_basediv.BaseDiv1 == 0) { s_basediv.BaseDiv4 inside {[0:1]}; }
if (BaseVal == 800 && s_basediv.BaseDiv1 == 1) { s_basediv.BaseDiv4 inside {[0:1]}; }
if (BaseVal == 800 && s_basediv.BaseDiv1 == 2) { s_basediv.BaseDiv4 inside {[0:1]}; }
if (BaseVal == 800 && s_basediv.BaseDiv1 == 3) { s_basediv.BaseDiv4 inside {[0:0]}; }
}
function void post_randomize();
$display($psprintf("BaseVal = %d", BaseVal));
$display($psprintf("BaseDiv1 = %d", s_basediv.BaseDiv1));
$display($psprintf("BaseDiv2 = %d", s_basediv.BaseDiv2));
$display($psprintf("BaseDiv3 = %d", s_basediv.BaseDiv3));
$display($psprintf("BaseDiv4 = %d", s_basediv.BaseDiv4));
$display($psprintf("----------------------------------"));
endfunction: post_randomize
endclass: base_cfg
class base_cov;
covergroup base_cg (string name, ref base_cfg p_base_cfg);
option.per_instance = 1;
option.name = name;
option.comment = $sformatf("covergroup for covering ccr clocks");
BaseVal_cp: coverpoint p_base_cfg.BaseVal {
bins valid[] = { 1600, 1400, 1200, 1000, 800 };
bins default_val = default;
}
BaseDiv1_cp: coverpoint p_base_cfg.s_basediv.BaseDiv1 {
bins valid[] = {[0:3]};
}
BaseDiv2_cp: coverpoint p_base_cfg.s_basediv.BaseDiv2 {
bins valid_1600_0[] = {[0:7]} with ( (item inside {[0:7]}) ) iff (p_base_cfg.BaseVal == 1600 && p_base_cfg.s_basediv.BaseDiv1 == 0);
bins valid_1600_1[] = {[0:7]} with ( (item inside {[0:7]}) ) iff (p_base_cfg.BaseVal == 1600 && p_base_cfg.s_basediv.BaseDiv1 == 1);
bins valid_1600_2[] = {[0:7]} with ( (item inside {[0:3]}) ) iff (p_base_cfg.BaseVal == 1600 && p_base_cfg.s_basediv.BaseDiv1 == 2);
bins valid_1600_3[] = {[0:7]} with ( (item inside {[0:1]}) ) iff (p_base_cfg.BaseVal == 1600 && p_base_cfg.s_basediv.BaseDiv1 == 3);
bins valid_1400_0[] = {[0:7]} with ( (item inside {[0:7]}) ) iff (p_base_cfg.BaseVal == 1400 && p_base_cfg.s_basediv.BaseDiv1 == 0);
bins valid_1400_1[] = {[0:7]} with ( (item inside {[0:6]}) ) iff (p_base_cfg.BaseVal == 1400 && p_base_cfg.s_basediv.BaseDiv1 == 1);
bins valid_1400_2[] = {[0:7]} with ( (item inside {[0:2]}) ) iff (p_base_cfg.BaseVal == 1400 && p_base_cfg.s_basediv.BaseDiv1 == 2);
bins valid_1400_3[] = {[0:7]} with ( (item inside {[0:6]}) ) iff (p_base_cfg.BaseVal == 1400 && p_base_cfg.s_basediv.BaseDiv1 == 3);
bins valid_1200_0[] = {[0:7]} with ( (item inside {[0:7]}) ) iff (p_base_cfg.BaseVal == 1200 && p_base_cfg.s_basediv.BaseDiv1 == 0);
bins valid_1200_1[] = {[0:7]} with ( (item inside {[0:5]}) ) iff (p_base_cfg.BaseVal == 1200 && p_base_cfg.s_basediv.BaseDiv1 == 1);
bins valid_1200_2[] = {[0:7]} with ( (item inside {[0:2]}) ) iff (p_base_cfg.BaseVal == 1200 && p_base_cfg.s_basediv.BaseDiv1 == 2);
bins valid_1000_0[] = {[0:7]} with ( (item inside {[0:7]}) ) iff (p_base_cfg.BaseVal == 1000 && p_base_cfg.s_basediv.BaseDiv1 == 0);
bins valid_1000_1[] = {[0:7]} with ( (item inside {[0:4]}) ) iff (p_base_cfg.BaseVal == 1000 && p_base_cfg.s_basediv.BaseDiv1 == 1);
bins valid_1000_2[] = {[0:7]} with ( (item inside {[0:1]}) ) iff (p_base_cfg.BaseVal == 1000 && p_base_cfg.s_basediv.BaseDiv1 == 2);
bins valid_800_0[] = {[0:7]} with ( (item inside {[0:7]}) ) iff (p_base_cfg.BaseVal == 800 && p_base_cfg.s_basediv.BaseDiv1 == 0);
bins valid_800_1[] = {[0:7]} with ( (item inside {[0:3]}) ) iff (p_base_cfg.BaseVal == 800 && p_base_cfg.s_basediv.BaseDiv1 == 1);
bins valid_800_2[] = {[0:7]} with ( (item inside {[0:1]}) ) iff (p_base_cfg.BaseVal == 800 && p_base_cfg.s_basediv.BaseDiv1 == 2);
illegal_bins invalid_1600_2 = {[0:7]} with ( (item inside {[4:7]}) ) iff (p_base_cfg.BaseVal == 1600 && p_base_cfg.s_basediv.BaseDiv1 == 2);
illegal_bins invalid_1600_3 = {[0:7]} with ( (item inside {[2:7]}) ) iff (p_base_cfg.BaseVal == 1600 && p_base_cfg.s_basediv.BaseDiv1 == 3);
illegal_bins invalid_1400_1 = {[0:7]} with ( (item inside {[7:7]}) ) iff (p_base_cfg.BaseVal == 1400 && p_base_cfg.s_basediv.BaseDiv1 == 1);
illegal_bins invalid_1400_2 = {[0:7]} with ( (item inside {[3:7]}) ) iff (p_base_cfg.BaseVal == 1400 && p_base_cfg.s_basediv.BaseDiv1 == 2);
illegal_bins invalid_1400_3 = {[0:7]} with ( (item inside {[7:7]}) ) iff (p_base_cfg.BaseVal == 1400 && p_base_cfg.s_basediv.BaseDiv1 == 3);
illegal_bins invalid_1200_1 = {[0:7]} with ( (item inside {[6:7]}) ) iff (p_base_cfg.BaseVal == 1200 && p_base_cfg.s_basediv.BaseDiv1 == 1);
illegal_bins invalid_1200_2 = {[0:7]} with ( (item inside {[3:7]}) ) iff (p_base_cfg.BaseVal == 1200 && p_base_cfg.s_basediv.BaseDiv1 == 2);
illegal_bins invalid_1200_3 = {[0:7]} with ( (item inside {[0:7]}) ) iff (p_base_cfg.BaseVal == 1200 && p_base_cfg.s_basediv.BaseDiv1 == 3);
illegal_bins invalid_1000_1 = {[0:7]} with ( (item inside {[5:7]}) ) iff (p_base_cfg.BaseVal == 1000 && p_base_cfg.s_basediv.BaseDiv1 == 1);
illegal_bins invalid_1000_2 = {[0:7]} with ( (item inside {[2:7]}) ) iff (p_base_cfg.BaseVal == 1000 && p_base_cfg.s_basediv.BaseDiv1 == 2);
illegal_bins invalid_1000_3 = {[0:7]} with ( (item inside {[0:7]}) ) iff (p_base_cfg.BaseVal == 1000 && p_base_cfg.s_basediv.BaseDiv1 == 3);
illegal_bins invalid_800_1 = {[0:7]} with ( (item inside {[4:7]}) ) iff (p_base_cfg.BaseVal == 800 && p_base_cfg.s_basediv.BaseDiv1 == 1);
illegal_bins invalid_800_2 = {[0:7]} with ( (item inside {[2:7]}) ) iff (p_base_cfg.BaseVal == 800 && p_base_cfg.s_basediv.BaseDiv1 == 2);
illegal_bins invalid_800_3 = {[0:7]} with ( (item inside {[0:7]}) ) iff (p_base_cfg.BaseVal == 800 && p_base_cfg.s_basediv.BaseDiv1 == 3);
}
BaseDiv3_cp: coverpoint p_base_cfg.s_basediv.BaseDiv3 {
bins valid_1600_0[] = {[0:1]} with ( (item inside {[0:1]}) ) iff (p_base_cfg.BaseVal == 1600 && p_base_cfg.s_basediv.BaseDiv1 == 0);
bins valid_1600_1[] = {[0:1]} with ( (item inside {[0:1]}) ) iff (p_base_cfg.BaseVal == 1600 && p_base_cfg.s_basediv.BaseDiv1 == 1);
bins valid_1600_2[] = {[0:1]} with ( (item inside {[0:1]}) ) iff (p_base_cfg.BaseVal == 1600 && p_base_cfg.s_basediv.BaseDiv1 == 2);
bins valid_1600_3[] = {[0:1]} with ( (item inside {[0:0]}) ) iff (p_base_cfg.BaseVal == 1600 && p_base_cfg.s_basediv.BaseDiv1 == 3);
bins valid_1400_0[] = {[0:1]} with ( (item inside {[0:1]}) ) iff (p_base_cfg.BaseVal == 1400 && p_base_cfg.s_basediv.BaseDiv1 == 0);
bins valid_1400_1[] = {[0:1]} with ( (item inside {[0:1]}) ) iff (p_base_cfg.BaseVal == 1400 && p_base_cfg.s_basediv.BaseDiv1 == 1);
bins valid_1400_2[] = {[0:1]} with ( (item inside {[0:1]}) ) iff (p_base_cfg.BaseVal == 1400 && p_base_cfg.s_basediv.BaseDiv1 == 2);
bins valid_1200_0[] = {[0:1]} with ( (item inside {[0:1]}) ) iff (p_base_cfg.BaseVal == 1200 && p_base_cfg.s_basediv.BaseDiv1 == 0);
bins valid_1200_1[] = {[0:1]} with ( (item inside {[0:1]}) ) iff (p_base_cfg.BaseVal == 1200 && p_base_cfg.s_basediv.BaseDiv1 == 1);
bins valid_1200_2[] = {[0:1]} with ( (item inside {[0:1]}) ) iff (p_base_cfg.BaseVal == 1200 && p_base_cfg.s_basediv.BaseDiv1 == 2);
bins valid_1000_0[] = {[0:1]} with ( (item inside {[0:1]}) ) iff (p_base_cfg.BaseVal == 1000 && p_base_cfg.s_basediv.BaseDiv1 == 0);
bins valid_1000_1[] = {[0:1]} with ( (item inside {[0:1]}) ) iff (p_base_cfg.BaseVal == 1000 && p_base_cfg.s_basediv.BaseDiv1 == 1);
bins valid_1000_2[] = {[0:1]} with ( (item inside {[0:0]}) ) iff (p_base_cfg.BaseVal == 1000 && p_base_cfg.s_basediv.BaseDiv1 == 2);
bins valid_800_0[] = {[0:1]} with ( (item inside {[0:1]}) ) iff (p_base_cfg.BaseVal == 800 && p_base_cfg.s_basediv.BaseDiv1 == 0);
bins valid_800_1[] = {[0:1]} with ( (item inside {[0:1]}) ) iff (p_base_cfg.BaseVal == 800 && p_base_cfg.s_basediv.BaseDiv1 == 1);
bins valid_800_2[] = {[0:1]} with ( (item inside {[0:0]}) ) iff (p_base_cfg.BaseVal == 800 && p_base_cfg.s_basediv.BaseDiv1 == 2);
illegal_bins invalid_1600_0 = {[0:1]} with ( (item inside {[1:1]}) ) iff (p_base_cfg.BaseVal == 1600 && p_base_cfg.s_basediv.BaseDiv1 == 3);
illegal_bins invalid_1400_1 = {[0:1]} with ( (item inside {[0:1]}) ) iff (p_base_cfg.BaseVal == 1400 && p_base_cfg.s_basediv.BaseDiv1 == 3);
illegal_bins invalid_1200_2 = {[0:1]} with ( (item inside {[0:1]}) ) iff (p_base_cfg.BaseVal == 1200 && p_base_cfg.s_basediv.BaseDiv1 == 3);
illegal_bins invalid_1000_2 = {[0:1]} with ( (item inside {[1:1]}) ) iff (p_base_cfg.BaseVal == 1000 && p_base_cfg.s_basediv.BaseDiv1 == 2);
illegal_bins invalid_1000_3 = {[0:1]} with ( (item inside {[0:1]}) ) iff (p_base_cfg.BaseVal == 1000 && p_base_cfg.s_basediv.BaseDiv1 == 3);
illegal_bins invalid_800_2 = {[0:1]} with ( (item inside {[1:1]}) ) iff (p_base_cfg.BaseVal == 800 && p_base_cfg.s_basediv.BaseDiv1 == 2);
illegal_bins invalid_800_3 = {[0:1]} with ( (item inside {[0:1]}) ) iff (p_base_cfg.BaseVal == 800 && p_base_cfg.s_basediv.BaseDiv1 == 3);
}
BaseDiv4_cp: coverpoint p_base_cfg.s_basediv.BaseDiv4 {
bins valid_1600_0[] = {[0:1]} with ( (item inside {[1:1]}) ) iff (p_base_cfg.BaseVal == 1600 && p_base_cfg.s_basediv.BaseDiv1 == 0);
bins valid_1600_1[] = {[0:1]} with ( (item inside {[0:1]}) ) iff (p_base_cfg.BaseVal == 1600 && p_base_cfg.s_basediv.BaseDiv1 == 1);
bins valid_1600_2[] = {[0:1]} with ( (item inside {[0:1]}) ) iff (p_base_cfg.BaseVal == 1600 && p_base_cfg.s_basediv.BaseDiv1 == 2);
bins valid_1600_3[] = {[0:1]} with ( (item inside {[0:1]}) ) iff (p_base_cfg.BaseVal == 1600 && p_base_cfg.s_basediv.BaseDiv1 == 3);
bins valid_1400_0[] = {[0:1]} with ( (item inside {[1:1]}) ) iff (p_base_cfg.BaseVal == 1400 && p_base_cfg.s_basediv.BaseDiv1 == 0);
bins valid_1400_1[] = {[0:1]} with ( (item inside {[0:1]}) ) iff (p_base_cfg.BaseVal == 1400 && p_base_cfg.s_basediv.BaseDiv1 == 1);
bins valid_1400_2[] = {[0:1]} with ( (item inside {[0:1]}) ) iff (p_base_cfg.BaseVal == 1400 && p_base_cfg.s_basediv.BaseDiv1 == 2);
bins valid_1400_3[] = {[0:1]} with ( (item inside {[0:0]}) ) iff (p_base_cfg.BaseVal == 1400 && p_base_cfg.s_basediv.BaseDiv1 == 3);
bins valid_1200_0[] = {[0:1]} with ( (item inside {[1:1]}) ) iff (p_base_cfg.BaseVal == 1200 && p_base_cfg.s_basediv.BaseDiv1 == 0);
bins valid_1200_1[] = {[0:1]} with ( (item inside {[0:1]}) ) iff (p_base_cfg.BaseVal == 1200 && p_base_cfg.s_basediv.BaseDiv1 == 1);
bins valid_1200_2[] = {[0:1]} with ( (item inside {[0:1]}) ) iff (p_base_cfg.BaseVal == 1200 && p_base_cfg.s_basediv.BaseDiv1 == 2);
bins valid_1200_3[] = {[0:1]} with ( (item inside {[0:0]}) ) iff (p_base_cfg.BaseVal == 1200 && p_base_cfg.s_basediv.BaseDiv1 == 3);
bins valid_1000_0[] = {[0:1]} with ( (item inside {[1:1]}) ) iff (p_base_cfg.BaseVal == 1000 && p_base_cfg.s_basediv.BaseDiv1 == 0);
bins valid_1000_1[] = {[0:1]} with ( (item inside {[0:1]}) ) iff (p_base_cfg.BaseVal == 1000 && p_base_cfg.s_basediv.BaseDiv1 == 1);
bins valid_1000_2[] = {[0:1]} with ( (item inside {[0:1]}) ) iff (p_base_cfg.BaseVal == 1000 && p_base_cfg.s_basediv.BaseDiv1 == 2);
bins valid_1000_3[] = {[0:1]} with ( (item inside {[0:0]}) ) iff (p_base_cfg.BaseVal == 1000 && p_base_cfg.s_basediv.BaseDiv1 == 3);
bins valid_800_0[] = {[0:1]} with ( (item inside {[0:1]}) ) iff (p_base_cfg.BaseVal == 800 && p_base_cfg.s_basediv.BaseDiv1 == 0);
bins valid_800_1[] = {[0:1]} with ( (item inside {[0:1]}) ) iff (p_base_cfg.BaseVal == 800 && p_base_cfg.s_basediv.BaseDiv1 == 1);
bins valid_800_2[] = {[0:1]} with ( (item inside {[0:1]}) ) iff (p_base_cfg.BaseVal == 800 && p_base_cfg.s_basediv.BaseDiv1 == 2);
bins valid_800_3[] = {[0:1]} with ( (item inside {[0:0]}) ) iff (p_base_cfg.BaseVal == 800 && p_base_cfg.s_basediv.BaseDiv1 == 3);
illegal_bins invalid_1600_0 = {[0:0]} iff (p_base_cfg.BaseVal == 1600 && p_base_cfg.s_basediv.BaseDiv1 == 0);
illegal_bins invalid_1400_3 = {[1:1]} iff (p_base_cfg.BaseVal == 1400 && p_base_cfg.s_basediv.BaseDiv1 == 3);
illegal_bins invalid_1200_0 = {[0:0]} iff (p_base_cfg.BaseVal == 1200 && p_base_cfg.s_basediv.BaseDiv1 == 0);
illegal_bins invalid_1200_3 = {[1:1]} iff (p_base_cfg.BaseVal == 1200 && p_base_cfg.s_basediv.BaseDiv1 == 3);
illegal_bins invalid_1000_0 = {[0:0]} iff (p_base_cfg.BaseVal == 1000 && p_base_cfg.s_basediv.BaseDiv1 == 0);
illegal_bins invalid_1000_3 = {[1:1]} iff (p_base_cfg.BaseVal == 1000 && p_base_cfg.s_basediv.BaseDiv1 == 3);
illegal_bins invalid_800_3 = {[1:1]} iff (p_base_cfg.BaseVal == 800 && p_base_cfg.s_basediv.BaseDiv1 == 3);
}
endgroup: base_cg
function new (ref base_cfg base_cfg_h);
base_cg = new($sformatf("base_cg"), base_cfg_h);
endfunction: new
endclass: base_cov
class base_env;
rand base_cfg m_base_cfg;
base_cov m_base_cov;
function new ();
m_base_cfg = new();
m_base_cov = new(m_base_cfg);
endfunction: new
endclass: base_env
module top;
base_env env;
initial begin
int count;
env = new();
for (int i=0; i<4; i++) begin
for (int j=0; j<8; j++) begin
$display("\n\ncount = %0d, i = %0d, j = %0d", count, i, j);
$display($psprintf(".................................."));
if (!env.randomize() with {m_base_cfg.s_basediv.BaseDiv1 == i;}) begin
$error("env.randomize() with {m_base_cfg.s_basediv.BaseDiv1 == %0d;}", i);
end
#1;
env.m_base_cov.base_cg.sample();
#1;
count ++;
end
end
end
endmodule: top
解决方案
之后的条件iff
唯一影响 的采样coverpoint
,cross
或者,在您的情况下,bins
它被添加到。它不影响bin 的值。您需要在您的cross
垃圾箱中使用单独illegal_bins
的 .
推荐阅读
- javascript - 当代理并行发布的消息过多时,Node JS 客户端不接收 MQTT 消息
- c# - 引用以下命令行的正确方法
- python - 如何使用python对相同颜色的图像区域进行分组并获取其坐标而忽略背景颜色
- sql - 如何将数据分成两列
- assembly - 组装 - 无法使用 lldb 为 macOS 上的组装文件设置断点
- sql-server - 如何在 CTE 中将两行合并为一行
- c - 从字符串中删除重复单词时出现字符串标记化问题
- angular - 在 angular-signature-pad 插件中获取导入模块问题
- java - 通过传递 0 和 null 对 Null 参数进行方法重载
- swift - App Sandbox 阻止创建 .sqlite-shm、.sqlite-wal 文件 (swift)