SystemVerilog Coverage:为枚举的每个元素创建一个 bin

SystemVerilog Coverage: Create a bin for each element of an enum

假设我有一个包含有效命令或操作码列表的枚举。 有没有办法为枚举的每个元素创建一个 bin?

class command_coverage;
  enum {SEQ_WRITE_16_BIT = 32'hBEEFFOOD, SEQ_READ_16_BIT = 32'hFACEFACE, 
        ... } my_valid_commands

  covergroup cg();
    command_cp : coverpoint cmd {
                   bins valid_commands[] = each element of enum;
                 }
  endgroup

  ...

endclass

我试过类似的方法:

bins valid_commands[] = my_valid_commands;

bins valid_commands[] = {[0:$] inside my_valid_commands};

但它并没有如我所愿。

可以做到:

command_cp : coverpoint my_valid_commands {
    bins valid_commands[] = {[my_valid_commands.first:my_valid_commands.last]};

firstlast 是枚举的 方法 ,return 分别是第一个和最后一个值。然后将它们用作范围的一部分。

这是 Mentor Questa 的显示(其他模拟器可用 - 我的电脑上安装了 Questa):

这是一个MCVE

https://www.edaplayground.com/x/5rUu

module enum_cg;

  enum {SEQ_WRITE_16_BIT, SEQ_READ_16_BIT} my_valid_commands;

  covergroup cg();
    command_cp : coverpoint my_valid_commands {
      bins valid_commands[] = {[my_valid_commands.first:my_valid_commands.last]};
                 }
  endgroup

  cg cg0 = new;

  initial begin
    my_valid_commands = SEQ_WRITE_16_BIT;
    cg0.sample;
  end    

endmodule