Enums SystemVerilog-如何在编译时获取枚举类型的数量

Enums SystemVerilog-如何在编译时获取枚举类型的数量,enums,system-verilog,Enums,System Verilog,我试图找到一种方法来获取编译时enum类型中可能的枚举数。我需要它来初始化使用枚举类型的模板类 我很好奇,是否有一个实用功能(或系统任务)给出了这一点。它类似于$size(),但适用于枚举类型。然而,我似乎找不到这个函数。在做了大量的研究之后,这似乎是不可能的 下面是我正在尝试做的一个示例: typedef enum {RANDOM, STICKY, SWEEP} bias_t; // can be parameterized to pick another enum type at rand

我试图找到一种方法来获取编译时
enum
类型中可能的枚举数。我需要它来初始化使用枚举类型的模板类

我很好奇,是否有一个实用功能(或系统任务)给出了这一点。它类似于
$size()
,但适用于枚举类型。然而,我似乎找不到这个函数。在做了大量的研究之后,这似乎是不可能的

下面是我正在尝试做的一个示例:

typedef enum {RANDOM, STICKY, SWEEP} bias_t;

// can be parameterized to pick another enum type at random
class enum_picker #(type T = bias_t); //type must be an enumerated type
    local T current_type;
    local const int weights[$size(T)]; //<--- How do I get the number of enumerated types?

    function T pick_type();
        ... some code ...
    endfunction
endclass
typedef枚举{随机、粘性、扫描}偏差;
//可以参数化以随机选取另一个枚举类型
类枚举选择器(类型T=bias\u T)//类型必须是枚举类型
局部T电流_型;

局部常数整数权重[$size(T)]// 您可能不想将
权重设置为
常量
;您将无法在其中设置值。您可以使用
num()
方法获取枚举数

class enum_picker #(type T = bias_t); //type must be an enumerated type
  local T current_type;
  local int weights[]; 
  function new;
    weights = new[current_type.num()];
    foreach (weights[i]) weights[i] = $urandom_range(10);
  endfunction

    function T pick_type();
       
    endfunction
endclass

一个快速的后续问题:如果以不同的方式(即一个热枚举)枚举变量,那么使用
current\u type.num()
而不是
last()
方法不是更好吗?@VarunGovind,是的,忘记了该方法。好多了