Могу ли я установить перечисление с его числовым значением?

Я хочу установить перечисление с числовым значением. Является ли следующий код допустимым для SystemVerilog?

`define DEC_ADDR   32'hC001CAFE

typedef enum bit [31:0] {
  ILLEGAL_ADDR_0=0,
  DEC_ADDR=`DEC_ADDR
} my_addr_e;

module tb;

initial begin

  my_addr_e addr_name;
  bit [31:0] reg_addr;

  reg_addr = `DEC_ADDR;
  addr_name = reg_addr; // PROBLEM

end

endmodule

Вот полный код EDA Playground: http://www.edaplayground.com/s/4/ 219


person Victor Lyuboslavsky    schedule 10.10.2013    source источник


Ответы (1)


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

Тем не менее, некоторые симуляторы позволяют устанавливать перечисления с числовыми значениями.

Приведенный выше код можно исправить, добавив статическое приведение:

addr_name = my_addr_e'(reg_addr);
person Victor Lyuboslavsky    schedule 10.10.2013
comment
Симулятор, который позволяет это, следует сообщить об ошибке, которую необходимо исправить. - person dave_59; 10.10.2013
comment
@TFuto, я имел в виду не приведение, а некоторые симуляторы позволяют устанавливать перечисления с числовыми значениями без приведения. - person dave_59; 11.10.2017