Enums 我可以用数值设置枚举吗?

Enums 我可以用数值设置枚举吗?,enums,system-verilog,Enums,System Verilog,我想用数值设置一个枚举。以下代码对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; ad

我想用数值设置一个枚举。以下代码对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操场上的完整代码:

从技术上讲,使用数值设置枚举不是合法的SystemVerilog。SystemVerilog是一种强类型语言,因此应使用其命名值设置枚举

也就是说,一些模拟器允许使用数值设置枚举

可以通过添加静态强制转换来修复上述代码:

addr_name = my_addr_e'(reg_addr);

允许此操作的模拟器应报告为要修复的bug。@t我不是指强制转换,而是一些模拟器允许在没有强制转换的情况下使用数值设置枚举。