Skip to content

Commit dc1f029

Browse files
committed
removed bug in coverage run, added coverpoints of cross, added one more constraint case at 50
1 parent 9e51644 commit dc1f029

File tree

2 files changed

+77
-25
lines changed

2 files changed

+77
-25
lines changed

tb/coverage.sv

+72-24
Original file line numberDiff line numberDiff line change
@@ -47,36 +47,72 @@ class coverage;
4747

4848
exponent_A: coverpoint o_expA{
4949
bins exponent_A_zero={0};
50-
bins exponent_A={['h1:'hfe]};
50+
bins exponent_A_r={['h1:'hfe]};
5151
bins exponent_A_ones={'hff};
5252
}
5353

5454
exponent_B: coverpoint o_expB{
5555
bins exponent_B_zero={0};
56-
bins exponent_B={['h1:'hfe]};
56+
bins exponent_B_r={['h1:'hfe]};
5757
bins exponent_B_ones={'hff};
5858
}
5959

6060
fraction_A: coverpoint o_mantA{
6161
bins fraction_A_zero={0};
62-
bins fraction_A={['h1:'h7ffffe]};
62+
bins fraction_A_r={['h1:'h7ffffe]};
6363
bins fraction_A_ones={'h7fffff};
6464
}
6565

6666
fraction_B: coverpoint o_mantB{
6767
bins fraction_B_zero={0};
68-
bins fraction_B={['h1:'h7ffffe]};
68+
bins fraction_B_r={['h1:'h7ffffe]};
6969
bins fraction_B_ones={'hfffff};
7070
}
7171

72-
// ignoring mantasa and exponent when the number is negative for A
73-
cross o_signA,o_expA,o_mantA{
74-
ignore_bins negative = binsof(o_signA) intersect{1};
72+
opA_0_and_inf: cross op_code,exponent_A,fraction_A{
73+
bins add_A0 = binsof(op_code) intersect{ADD} &&
74+
(binsof (exponent_A.exponent_A_zero) && binsof (fraction_A.fraction_A_zero));
75+
bins sub_A0 = binsof(op_code) intersect{SUB} &&
76+
(binsof (exponent_A.exponent_A_zero) && binsof (fraction_A.fraction_A_zero));
77+
bins mul_A0 = binsof(op_code) intersect{MUL} &&
78+
(binsof (exponent_A.exponent_A_zero) && binsof (fraction_A.fraction_A_zero));
79+
bins div_A0 = binsof(op_code) intersect{DIV} &&
80+
(binsof (exponent_A.exponent_A_zero) && binsof (fraction_A.fraction_A_zero));
81+
bins add_Ainf = binsof(op_code) intersect{ADD} &&
82+
(binsof (exponent_A.exponent_A_ones) && binsof (fraction_A.fraction_A_zero));
83+
bins sub_Ainf = binsof(op_code) intersect{SUB} &&
84+
(binsof (exponent_A.exponent_A_ones) && binsof (fraction_A.fraction_A_zero));
85+
bins mul_Ainf = binsof(op_code) intersect{MUL} &&
86+
(binsof (exponent_A.exponent_A_ones) && binsof (fraction_A.fraction_A_zero));
87+
bins div_Ainf = binsof(op_code) intersect{DIV} &&
88+
(binsof (exponent_A.exponent_A_ones) && binsof (fraction_A.fraction_A_zero));
89+
ignore_bins others_all = binsof(op_code.all_follow_div_op) || binsof(op_code.all_follow_mul_op) ||
90+
binsof(op_code.all_follow_sub_op) || binsof(op_code.all_follow_add_op) ||
91+
binsof(fraction_A.fraction_A_r) || binsof(exponent_A.exponent_A_r) ||
92+
binsof(fraction_A.fraction_A_ones) || binsof(fraction_A.fraction_A_r);
7593
}
7694

77-
// ignoring mantasa and exponent when the number is negative for B
78-
cross o_signB,o_expB,o_mantB{
79-
ignore_bins negative = binsof(o_signB) intersect{1};
95+
opB_0_and_inf: cross op_code,exponent_B,fraction_B{
96+
bins add_B0 = binsof(op_code) intersect{ADD} &&
97+
(binsof (exponent_B.exponent_B_zero) && binsof (fraction_B.fraction_B_zero));
98+
bins sub_B0 = binsof(op_code) intersect{SUB} &&
99+
(binsof (exponent_B.exponent_B_zero) && binsof (fraction_B.fraction_B_zero));
100+
bins mul_B0 = binsof(op_code) intersect{MUL} &&
101+
(binsof (exponent_B.exponent_B_zero) && binsof (fraction_B.fraction_B_zero));
102+
bins div_B0 = binsof(op_code) intersect{DIV} &&
103+
(binsof (exponent_B.exponent_B_zero) && binsof (fraction_B.fraction_B_zero));
104+
bins add_Binf = binsof(op_code) intersect{ADD} &&
105+
(binsof (exponent_B.exponent_B_ones) && binsof (fraction_B.fraction_B_zero));
106+
bins sub_Binf = binsof(op_code) intersect{SUB} &&
107+
(binsof (exponent_B.exponent_B_ones) && binsof (fraction_B.fraction_B_zero));
108+
bins mul_Binf = binsof(op_code) intersect{MUL} &&
109+
(binsof (exponent_B.exponent_B_ones) && binsof (fraction_B.fraction_B_zero));
110+
bins div_Binf = binsof(op_code) intersect{DIV} &&
111+
(binsof (exponent_B.exponent_B_ones) && binsof (fraction_B.fraction_B_zero));
112+
ignore_bins others_all = binsof(op_code.all_follow_div_op) || binsof(op_code.all_follow_mul_op) ||
113+
binsof(op_code.all_follow_sub_op) || binsof(op_code.all_follow_add_op) ||
114+
binsof(fraction_B.fraction_B_r) || binsof(exponent_B.exponent_B_r) ||
115+
binsof(fraction_B.fraction_B_ones) || binsof(fraction_B.fraction_B_r);
80116
}
81117

82118
endgroup
@@ -87,20 +123,32 @@ class coverage;
87123

88124
negative_out: coverpoint o_fpu_out{
89125
bins negative_output = {1}; // covering if output is negative
126+
bins positive_output = {0};
90127
}
91128

92129
exponent_out: coverpoint o_expO{
93-
bins exponent_O_zero={0};
94-
bins exponent_O={['h1:'hfe]};
95-
bins exponent_O_ones={'hff};
130+
bins exponent_O_zero ={0};
131+
bins exponent_O_r ={['h1:'hfe]};
132+
bins exponent_O_ones ={'hff};
96133
}
97134

98135
fraction_out: coverpoint o_mantO{
99-
bins fraction_O_zero={0};
100-
bins fraction_O={['h1:'h7ffffe]};
101-
bins fraction_O_ones={'hfffff};
136+
bins fraction_O_zero ={0};
137+
bins fraction_O_r ={['h1:'h7ffffe]};
138+
bins fraction_O_ones ={'hfffff};
102139
}
103140

141+
output_special: cross exponent_out, fraction_out{
142+
bins op_zero = binsof (exponent_out.exponent_O_zero) && binsof (fraction_out.fraction_O_zero);
143+
bins op_inf = binsof (exponent_out.exponent_O_ones) && binsof (fraction_out.fraction_O_zero);
144+
bins op_normal = binsof (exponent_out.exponent_O_r);
145+
bins op_subnorm = binsof (exponent_out.exponent_O_zero) &&
146+
(binsof (fraction_out.fraction_O_r) || binsof (fraction_out.fraction_O_ones));
147+
bins op_NaN = binsof (exponent_out.exponent_O_ones) &&
148+
(binsof (fraction_out.fraction_O_r) || binsof (fraction_out.fraction_O_ones));
149+
150+
}
151+
104152
endgroup
105153

106154
task run();
@@ -116,17 +164,17 @@ class coverage;
116164
out_op = transaction0.fpuOp;
117165
out_O = transaction0.fpuOut;
118166

119-
o_signA=out_A[31];
120-
o_expA= out_A[30:23];
121-
o_mantA=out_A[22:0];
167+
o_signA = out_A[31];
168+
o_expA = out_A[30:23];
169+
o_mantA = out_A[22:0];
122170

123-
o_signB=out_A[31];
124-
o_expB= out_B[30:23];
125-
o_mantB=out_B[22:0];
171+
o_signB = out_B[31];
172+
o_expB = out_B[30:23];
173+
o_mantB = out_B[22:0];
126174

127175
o_fpu_out = out_O[31];
128-
o_expO = out_B[30:23];
129-
o_mantO = out_B[22:0];
176+
o_expO = out_O[30:23];
177+
o_mantO = out_O[22:0];
130178

131179
inputs.sample();
132180
outputs.sample();

tb/generator.sv

+5-1
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ class generator;
2020

2121
task setconstraints();
2222
int RAND_CONS = 7;
23-
if (!$value$plusargs("RAND_CONS=%0d", RAND_CONS))
23+
if ($value$plusargs("RAND_CONS=%0d", RAND_CONS))
2424
begin
2525
$display("Constraints chosen with RAND_CONS = %d", RAND_CONS);
2626
RAND_CONS = RAND_CONS + 1;
@@ -47,6 +47,10 @@ class generator;
4747
end
4848
6: begin
4949
t.bothnormdenormAB.constraint_mode(1);
50+
end
51+
50: begin
52+
t.zeroonlyA.constraint_mode(1);
53+
t.zeroonlyB.constraint_mode(1);
5054
end
5155
default: begin
5256
t.normonlyA.constraint_mode(1);

0 commit comments

Comments
 (0)