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,是的,忘记了该方法。好多了