Можно ли создать перечислимый тип данных, который состоит из 2 перечислимых типов данных? - PullRequest
0 голосов
/ 10 декабря 2018

Скажем, у меня есть два типа данных перечисления команд

//  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 Ответ

0 голосов
/ 10 декабря 2018

Вы не можете составлять перечисляемые типы из других перечислений.Также вы не можете иметь перечисления разных размеров.

SystemVerilog имеет массивы массивов, что означает, что вы можете создавать список команд переменного размера и использовать конкатенацию массивов для их объединения.Однако для рандомизации было бы проще иметь простой список номеров команд в очереди или динамическом массиве.Затем используйте ограничение inside, чтобы выбрать из списка команд.Если у вас есть номер команды, вы можете использовать ассоциативный массив для сопоставления команды с ее кодировкой.

...