是否可以创建由 2 个枚举数据类型组成的枚举数据类型?

Is it possible to create a enumerated data-type that consists of 2 enumerated data types?

假设我有两种枚举数据类型的命令

//  CMD global macros
`define CMD_1_VAL       32'hFACEFACE
`define CMD_2_VAL       16'hBEEF
`define CMD_3_VAL       20'hF000D
`define CMD_4_VAL       12'hCAB
`define CMD_5_VAL       32'hBA5EC0DE

typedef enum logic[31:0] {
                            CMD_1 = `CMD_1_VAL,
                            CMD_2 = `CMD_2_VAL,
                            CMD_3 = `CMD_3_VAL
}   command_set_1;

typedef enum logic[31:0] {
                            CMD_4 = `CMD_4_VAL,
                            CMD_5 = `CMD_5_VAL
}   command_set_2;

是否可以创建一个枚举数据类型来封装已定义的两种枚举数据类型,而不需要创建一个单独列出命令的新枚举数据类型?与此类似的东西:

Pseudocode of what is desired: 
typedef enum logic[31:0] {
                            // include command_set_1 and command_set_2
}   command_set_1_and_2 

我想要这样做的原因是,可以将更多的命令集添加到它们各自的枚举数据类型中,以实现可重用性,并使用 std::randomize( ) 函数。

您不能从其他枚举组合枚举类型。你也不能有不同大小的枚举。

SystemVerilog 确实有数组的数组,这意味着您可以构建可变大小的命令列表并使用数组连接来组合它们。然而,对于随机化,在队列或动态数组中有一个简单的命令编号列表会更容易。然后使用命令列表中的 inside 约束到 select。获得命令编号后,您可以使用关联数组将命令映射到其编码。