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

时间:2015-01-07 23:46:24

标签: enums system-verilog

如果我收到枚举:

my_cmd cmd = my_cmd'(value_from_bus);

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

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

2 个答案:

答案 0 :(得分:9)

您也可以使用$cast检查它是否有效,并同时复制。 所以不要这样做:cmd = my_cmd'(value_from_bus);,你可以这样做:

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

EDA Playground

上的示例

答案 1 :(得分:3)

您可以使用枚举的名称()功能:

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

EDA Playground

上的示例