In reply to davidct:
I recommend you read the sections I mentioned, regarding to the last question one possible way is this
module test();
parameter N = 9;
bit [N-1:0] values[N];
bit [N-1:0] mode;
bit enable;
bit clk;
covergroup cg @(posedge clk);
enable_cp: coverpoint enable {
option.weight = 0;
bins v = {1}; // you only care enable = 1
}
one_hot_mode_cp: coverpoint mode {
option.weight = 0;
bins one_hot[] = values;
}
cross enable_cp, one_hot_mode_cp;
endgroup
cg m_cg;
initial begin
forever #10 clk = ~clk;
end
initial begin
mode <= 1;
foreach(values[i]) values[i] = 1 << i;
m_cg= new;
repeat (N) begin
@(posedge clk);
mode <= mode << 1;
enable <= $urandom_range(1, 0);
$display("@ %0t mode = %b enable = %b coverage = %f", $time, mode, enable, m_cg.get_coverage());
end
$finish;
end
endmodule
Outputs the following