Точка покрытия Systemverilog для каждого элемента в перечислении - PullRequest
0 голосов
/ 16 июня 2020

Я использую среду UVM для проверки своего дизайна. В мониторе я создал точки укрытия для своего дизайна. Однако я не могу использовать перечисления для ящиков точек покрытия.

Для каждой точки покрытия я хочу создать корзину для каждого элемента в enum.

Например, в файле monitor.sv

enum bit [7:0]
{
   data_type_0 =8'd1,
   data_type_1 =8'd16,
   data_type_2 =8'd32,
   data_type_3 =8'd64
} data_types;

data_type: coverpoint seq_item.data_type
{
  bins data_type_bins[] = {[data_types.first:data_types.last]};
}

Я пробовал первый и последний метод, но он создает bin для каждого числа от 1 до 64. Я не хочу этого. Я хочу мусорные ведра всего за 1,16,32,64

1 Ответ

0 голосов
/ 16 июня 2020

Я пробовал это на 4 симуляторах, но не получил такого поведения, как вы. Так, например, это:

    data_type3: coverpoint data_types
    {
    bins data_type_bins[] = {[data_types.first:data_type_2]};
    }

дает мне 4 ячейки. Однако почему бы просто не использовать:

data_type2: coverpoint data_types;

и покончить с этим?


module M;

  enum bit [7:0]
  {
   data_type_0 =8'd1,
   data_type_1 =8'd16,
   data_type_2 =8'd32,
   data_type_3 =8'd64
  } data_types;

  covergroup CG;
    option.per_instance=1;
    data_type1: coverpoint data_types
    {
    bins data_type_bins[] = {[data_types.first:data_types.last]};
    }
    data_type2: coverpoint data_types;
    data_type3: coverpoint data_types
    {
    bins data_type_bins[] = {[data_types.first:data_type_2]};
    }
  endgroup

  CG cg = new;

  initial
    begin
      data_types = data_type_0;
      cg.sample();
      data_types = data_type_2;
      cg.sample();
      $display("cg.data_type1 covereage = %0f", cg.data_type1.get_coverage());
      $display("cg.data_type2 covereage = %0f", cg.data_type2.get_coverage());
      $display("cg.data_type3 covereage = %0f", cg.data_type3.get_coverage());
    end

endmodule

https://www.edaplayground.com/x/a2F

...