说我有两种枚举数据类型的命令
// 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()函数将更多的命令集添加到它们各自的枚举数据类型中,以实现可重用性以及在其枚举数据类型中列出的所有已定义命令的随机化。
答案 0 :(得分:1)
您不能从其他枚举组成枚举类型。也不能有不同大小的枚举。
SystemVerilog确实具有数组数组,这意味着您可以构建可变大小命令的列表,并使用数组串联来组合它们。但是,对于随机化,在队列或动态数组中具有简单的命令编号列表会更容易。然后使用inside
约束从命令列表中进行选择。有了命令编号后,就可以使用关联数组将命令映射到其编码。