Coding for covergroup with coverpoint and cross

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

KERNEL: @ 10 mode = 000000001 enable = 0 coverage = 0.000000

KERNEL: @ 30 mode = 000000010 enable = 1 coverage = 11.111111

KERNEL: @ 50 mode = 000000100 enable = 1 coverage = 22.222222

KERNEL: @ 70 mode = 000001000 enable = 0 coverage = 22.222222

KERNEL: @ 90 mode = 000010000 enable = 1 coverage = 33.333333

KERNEL: @ 110 mode = 000100000 enable = 1 coverage = 44.444444

KERNEL: @ 130 mode = 001000000 enable = 0 coverage = 44.444444

KERNEL: @ 150 mode = 010000000 enable = 0 coverage = 44.444444

KERNEL: @ 170 mode = 100000000 enable = 1 coverage = 55.555556