System verilog 非法_bin声明中的条件如何解释?
如何处理非法_bin声明中的条件?或者它们一开始就有效吗?在我看来,ILLALLALY-BIN声明不考虑容器覆盖范围内的任何条件。 i、 e 与System verilog 非法_bin声明中的条件如何解释?,system-verilog,System Verilog,如何处理非法_bin声明中的条件?或者它们一开始就有效吗?在我看来,ILLALLALY-BIN声明不考虑容器覆盖范围内的任何条件。 i、 e 与 illegal_bins invalid_1 = {[0:7]}; 非法_bin的目的是,每当base为1600且basediv为2时,coverpoint表达式[0:7]内的任何值都不是有效值 除了使用交叉和垃圾桶外,是否有其他方法对非法垃圾桶进行编码。。。相交路 下面是示例代码 class base_cfg; // Divider Valu
illegal_bins invalid_1 = {[0:7]};
非法_bin
的目的是,每当base为1600且basediv为2时,coverpoint表达式[0:7]内的任何值都不是有效值
除了使用交叉
和垃圾桶外,是否有其他方法对非法垃圾桶
进行编码。。。相交
路
下面是示例代码
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
class-base\u-cfg;
//除法器值
兰德结构{
rand位[1:0]BaseDiv1;
rand位[2:0]BaseDiv2;
rand位BaseDiv3;
rand位BaseDiv4;
}s_basediv;
兰特·内特·巴塞瓦尔;
约束c_BaseX{
BaseVal内部{1600、1400、1200、1000、800};
}
约束c_basediv{
{[0:3]}内的s_basediv.BaseDiv1;
{[0:7]}内的s_basediv.BaseDiv2;
{[0:1]}内的s_basediv.BaseDiv3;
{[0:1]}内的s_basediv.BaseDiv4;
如果(BaseVal==1600){[0:3]}内的{s_basediv.BaseDiv1;}
如果(BaseVal==1400){[0:2]}内的{s_basediv.BaseDiv1;}
如果(BaseVal==1200){[0:2]}内的{s_basediv.BaseDiv1;}
如果(BaseVal==1000){[0:2]}内的{s_basediv.BaseDiv1;}
如果(BaseVal==800){[0:2]}内的{s_basediv.BaseDiv1;}
如果(BaseVal==1600&&s_basediv.BaseDiv1==0){s_basediv.BaseDiv2在{[0:7]};}
如果(BaseVal==1600&&s_basediv.BaseDiv1==1){s_basediv.BaseDiv2在{[0:7]};}
如果(BaseVal==1600&&s_basediv.BaseDiv1==2){s_basediv.BaseDiv2在{[0:3]};}
如果(BaseVal==1600&&s_basediv.BaseDiv1==3){s_basediv.BaseDiv2在{[0:1]};}
如果(BaseVal==1400&&s_basediv.BaseDiv1==0){s_basediv.BaseDiv2在{[0:7]};}
如果(BaseVal==1400&&s_basediv.BaseDiv1==1){s_basediv.BaseDiv2在{[0:6]};}
如果(BaseVal==1400&&s_basediv.BaseDiv1==2){s_basediv.BaseDiv2在{[0:2]};}
如果(BaseVal==1400&&s_basediv.BaseDiv1==3){s_basediv.BaseDiv2在{[0:6]};}
如果(BaseVal==1200&&s_basediv.BaseDiv1==0){s_basediv.BaseDiv2在{[0:7]};}
如果(BaseVal==1200&&s_basediv.BaseDiv1==1){s_basediv.BaseDiv2在{[0:5]};}
如果(BaseVal==1200&&s_basediv.BaseDiv1==2){s_basediv.BaseDiv2在{[0:2]};}
如果(BaseVal==1000&&s_basediv.BaseDiv1==0){s_basediv.BaseDiv2在{[0:7]};}
如果(BaseVal==1000&&s_basediv.BaseDiv1==1){s_basediv.BaseDiv2在{[0:4]};}
如果(BaseVal==1000&&s_basediv.BaseDiv1==2){s_basediv.BaseDiv2在{[0:1]};}
如果(BaseVal==800&&s_basediv.BaseDiv1==0){s_basediv.BaseDiv2在{[0:7]};}
如果(BaseVal==800&&s_basediv.BaseDiv1==1){s_basediv.BaseDiv2在{[0:3]};}
如果(BaseVal==800&&s_basediv.BaseDiv1==2){s_basediv.BaseDiv2在{[0:1]};}
如果(BaseVal==1600&&s_basediv.BaseDiv1==0){s_basediv.BaseDiv3在{[0:1]};}
如果(BaseVal==1600&&s_basediv.BaseDiv1==1){s_basediv.BaseDiv3在{[0:1]};}
如果(BaseVal==1600&&s_basediv.BaseDiv1==2){s_basediv.BaseDiv3在{[0:1]};}
如果(BaseVal==1600&&s_basediv.BaseDiv1==3){s_basediv.BaseDiv3在{[0:0]};}
如果(BaseVal==1400&&s_basediv.BaseDiv1==0){s_basediv.BaseDiv3在{[0:1]};}
如果(BaseVal==1400&&s_basediv.BaseDiv1==1){s_basediv.BaseDiv3在{[0:1]};}
如果(BaseVal==1400&&s_basediv.BaseDiv1==2){s_basediv.BaseDiv3在{[0:1]};}
如果(BaseVal==1200&&s_basediv.BaseDiv1==0){s_basediv.BaseDiv3在{[0:1]};}
如果(BaseVal==1200&&s_basediv.BaseDiv1==1){s_basediv.BaseDiv3在{[0:1]};}
如果(BaseVal==1200&&s_basediv.BaseDiv1==2){s_basediv.BaseDiv3在{[0:1]};}
如果(BaseVal==1000&&s_basediv.BaseDiv1==0){s_basediv.BaseDiv3在{[0:1]};}
如果(BaseVal==1000&&s_basediv.BaseDiv1==1){s_basediv.BaseDiv3在{[0:1]};}
如果(BaseVal==1000&&s_basediv.BaseDiv1==2){s_basediv.BaseDiv3在{[0:0]};}
如果(BaseVal==800&&s_basediv.BaseDiv1==0){s_basediv.BaseDiv3在{[0:1]};}
如果(BaseVal==800&&s_basediv.BaseDiv1==1){s_basediv.BaseDiv3在{[0:1]};}
如果(BaseVal==800&&s_basediv.BaseDiv1==2){s_basediv.BaseDiv3在{[0:0]};}
如果(BaseVal==1600&&s_basediv.BaseDiv1==0){s_basediv.BaseDiv4在{[1:1]};}
如果(BaseVal==1600&&s_basediv.BaseDiv1==1){s_basediv.BaseDiv4在{[0:1]};}
如果(BaseVal==1600&&s_basediv.BaseDiv1==2){s_basediv.BaseDiv4在{[0:1]};}
如果(BaseVal==1600&&s_basediv.BaseDiv1==3){s_basediv.BaseDiv4在{[0:1]};}
如果(BaseVal==1400&&s_basediv.BaseDiv1==0){s_basediv.BaseDiv4在{[1:1]};}
如果(BaseVal==1400&&s_basediv.BaseDiv1==1){s_basediv.BaseDiv4在{[0:1]};}
如果(BaseVal==1400&&s_basediv.BaseDiv1==2){s_basediv.BaseDiv4在{[0:1]};}
如果(BaseVal==1400&&s_basediv.BaseDiv1==3){s_basediv.BaseDiv4在{[0:0]};}
如果(BaseVal==1200&&s_basediv.BaseDiv1==0){s_basediv.BaseDiv4在{[1:1]};}
如果(BaseVal==1200&&s_basediv.BaseDiv1==1){s_basediv.BaseDiv4在{[0:1]};}
如果(BaseVal==1200&&s_basediv.BaseDiv1==2){s_basediv.BaseDiv4在{[0:1]};}
如果(BaseVal==1200&&s_basediv.BaseDiv1==3){s_basediv.BaseDiv4在{[0:0]};}
如果(BaseVal==1000&&s_basediv.BaseDiv1==0){s_basediv.BaseDiv4在{[1:1]};}
如果(BaseVal==1000&&s_basediv.BaseDiv1==1){s_basediv.BaseDiv4在{[0:1]};}
如果(BaseVal==1000&&s_basediv.BaseDiv1==2){s_basediv.BaseDiv4在{[0:1]};}
如果(BaseVal==1000&&s_basediv.BaseDiv1==3){s_basediv.BaseDiv4在{[0:0]};}
如果(BaseVal==800&&s_ba
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