4

我想用数值设置一个枚举。以下代码对于 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

4

1 回答 1

9

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

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

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

addr_name = my_addr_e'(reg_addr);
于 2013-10-10T14:44:13.057 回答