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

时间:2013-10-10 14:44:13

标签: 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;
  addr_name = reg_addr; // PROBLEM

end

endmodule

以下是EDA Playground的完整代码:http://www.edaplayground.com/s/4/219

1 个答案:

答案 0 :(得分:9)

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

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

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

addr_name = my_addr_e'(reg_addr);