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

Enums 如何检查Verilog枚举是否有效?,enums,system-verilog,Enums,System Verilog,如果我收到一个枚举: my_cmd cmd = my_cmd'(value_from_bus); 如何轻松检查cmd是否为有效的cmd typedef enum int { ADD = 1, SUBTRACT = 3, MULTIPLY = 7 } my_cmd; 您可以使用enum的name()函数: if (cmd.name() == "") $display("%0d is bad", cmd); else $display("%s:%0d is g

如果我收到一个枚举:

my_cmd cmd = my_cmd'(value_from_bus);
如何轻松检查
cmd
是否为有效的cmd

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

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

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

您还可以使用
$cast
检查它是否有效,同时进行复制。 因此,不要这样做:
cmd=my_cmd'(来自_总线的值),您可以执行以下操作:

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

关于

的例子很有趣!虽然我怀疑它是可合成的,但在Quartus Prime中,这在分析中失败了:“名称未在此前缀下声明”