SystemVerilog Coverage: создайте корзину для каждого элемента перечисления - PullRequest
0 голосов
/ 21 ноября 2018

Скажем, у меня есть enum, который содержит список допустимых команд или кодов операций.Есть ли способ создать корзину для каждого элемента перечисления?

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};

Но этоне сработало, как я хотел.

1 Ответ

0 голосов
/ 21 ноября 2018

Это может быть сделано:

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

first и last являются методами перечисления, которые возвращают первое и последнее значения соответственно.Затем они используются как часть диапазона.

Вот дисплей от Mentor Questa (доступны другие симуляторы - на моем компьютере установлено Questa):

enter image description here

Вот 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
...