如何检查 Verilog 枚举是否有效?

How to check that Verilog enum is valid?

如果我收到枚举:

my_cmd cmd = my_cmd'(value_from_bus);

如何轻松检查 cmd 是否为有效命令?

typedef enum int {
  ADD = 1,
  SUBTRACT = 3,
  MULTIPLY = 7
} my_cmd;

您可以使用枚举的 name() 函数:

  if (cmd.name() == "")
    $display("%0d is bad", cmd);
  else
    $display("%s:%0d is good", cmd.name(), cmd);

示例 EDA Playground

也可以用$cast检查是否有效,同时复制。 因此,与其这样做:cmd = my_cmd'(value_from_bus);,不如这样做:

if ($cast(cmd, value_from_bus))
    $display("Valid: %s", cmd.name());
else
    $display("Invalid");

示例 EDA Playground