All I am working on understanding how to use functions to create coverpoint and cross bins. Consider the following example code:
module top;
logic [5:0] small_bv;
covergroup cg;
cp : coverpoint small_bv {
bins b0 = {'d0};
bins b_interting[] = {['d1:'d62]} with (bins_interesting_func(item));
bins b63 = {'d63};
}
end group
function automatic bins_interesting_func(logic [5:0] val);
automatic boolean not_prime = 0;
if (int'(val) > 1) begin
for(int i=2; i < int'(val)/2; i++) begin
if ((int'(val) % i) == 0) begin
not_prime = 1;
break;
end
end
end
if (not_prime == 0) return 1 else return 0;
endfunction
initial begin
for (int sim_loop=0; sim_loop<256; sim_loop++) begin
small_bv = $urandom;
end
end
endmodule
With this example I have a small bit_vector in which I am randomizing the values. I am creating a dynamic list of bins based on if the value of the variable for the coverpoint is a PrimeNumber.
Yes I know the PrimeNumber search is brute force, you cannot use the $sqrt operator inside a covergroup function call?
Questions:
Is the word “item” a SV keyword of some sort meaning the variable referenced in the coverpoint?
The return type of the function is not declared, I can see in my analysis of running this code (BTW this was hand transcribed from another system so there may be a typo or two) that I do indeed get a bunch of bins that are only the prime values. I got what I wanted but I need to understand the mechanisms better for my real problem.
I will be posting an update as I try to get a function to build bins for the cross product, see my previous example: Building Sparse Cross Coverage Bins for arrays of enum'ed datatypes
for some ideas of what I am trying to solve.
Thanks in advance to anyone who can answer my couple of questions.
TomT…