我想用数值设置枚举。 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
答案 0 :(得分:9)
从技术上讲,使用其数值设置枚举不是合法的SystemVerilog。 SystemVerilog是一种强类型语言,因此应使用其命名值设置枚举。
也就是说,有些模拟器允许使用数值设置枚举。
上面的代码可以通过添加静态强制转换来修复:
addr_name = my_addr_e'(reg_addr);