首页 文章

是否可以创建包含2个枚举数据类型的枚举数据类型?

提问于
浏览
0

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

//  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()函数随机化其枚举数据类型中列出的所有已定义命令 .

1 回答

  • 1

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

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

相关问题