如何在verilog系统中使用枚举中的算术表达式? `define REG_WIDTH 48 `定义字段宽度32 typedef枚举位[`REG_WIDTH-1:0] { BIN_MIN='h0, BIN_MID=BIN_MIN+`REG_WIDTH'((1

如何在verilog系统中使用枚举中的算术表达式? `define REG_WIDTH 48 `定义字段宽度32 typedef枚举位[`REG_WIDTH-1:0] { BIN_MIN='h0, BIN_MID=BIN_MIN+`REG_WIDTH'((1,verilog,system-verilog,test-bench,Verilog,System Verilog,Test Bench,通常,像1这样的整数常量被视为32位值(SystemVerilog LRM指定它们至少为32位,但大多数模拟器/合成工具使用的正好是32位)。因此,由于您先执行了32的移位,因此在编译过程中,您将完全移出该移位,并保留0(32'd)。我知道了。非常感谢。我尝试了打字转换,直到(1 `define REG_WIDTH 48 `define FIELD_WIDTH 32 typedef enum bit [`REG_WIDTH-1:0] { BIN_MIN = 'h0, B

通常,像
1
这样的整数常量被视为32位值(SystemVerilog LRM指定它们至少为32位,但大多数模拟器/合成工具使用的正好是32位)。因此,由于您先执行了32的移位,因此在编译过程中,您将完全移出该移位,并保留0(
32'd)。我知道了。非常感谢。我尝试了打字转换,直到(1
`define REG_WIDTH 48
`define FIELD_WIDTH 32
  typedef enum bit [`REG_WIDTH-1:0] 
  {
    BIN_MIN = 'h0,
    BIN_MID = BIN_MIN  + `REG_WIDTH'(((1<<`FIELD_WIDTH)+2)/3), 
    BIN_MAX = BIN_MID  + `REG_WIDTH'(((1<<`FIELD_WIDTH)+2)/3), 
  }reg_cover;
`define REG_WIDTH 48
`define FIELD_WIDTH 32
typedef enum bit [`REG_WIDTH-1:0] {
  BIN_MIN = 'h0,
  BIN_MID = BIN_MIN  + (((`REG_WIDTH'(1))<<`FIELD_WIDTH)+2)/3, 
  BIN_MAX = BIN_MID  + (((`REG_WIDTH'(1))<<`FIELD_WIDTH)+2)/3
} reg_cover;