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

Vic*_*sky 5 enums system-verilog

如果我收到一个枚举:

my_cmd cmd = my_cmd'(value_from_bus);
Run Code Online (Sandbox Code Playgroud)

如何轻松检查这cmd是一个有效的cmd?

typedef enum int {
  ADD = 1,
  SUBTRACT = 3,
  MULTIPLY = 7
} my_cmd;
Run Code Online (Sandbox Code Playgroud)

Ald*_*doT 9

您还可以使用$cast它来检查它是否有效,并同时复制.因此cmd = my_cmd'(value_from_bus);,您可以这样做:而不是:

if ($cast(cmd, value_from_bus))
    $display("Valid: %s", cmd.name());
else
    $display("Invalid");
Run Code Online (Sandbox Code Playgroud)

EDA游乐场的示例