Перечисления
Перечисление определяет набор именованных значений. Имена в перечислениях не могут начинаться с цифры. Можно задать целочисленные значения к именам перечисления на этапе объявления перечисления. Если значение имени на этапе объявления не определено явно, то ему будет назначено значение предыдущего имени в перечислении, увеличенное на 1, а первому имени будет назначен 0.
Синтаксис
enum {name}
Следующее числовое значение будет ассоциировано с именем
enum {name = C}
Ассоциация константы C с именем
enum {name[N]}
Генерирует N
именованных констант: name0
, name1
, ..., nameN-1
enum {name[N] = C}
Первая именованная константа получает значение C
, а последующие связаны с предыдущими увеличением ассоциированного значения
enum {name[N:M]}
Первой константой с именем будет name[N]
, а последней константой с именем name[M]
, где N
и M
– целые числа
enum {name[N:M] = C}
Первая именованная константа name[N]
получает значение C
, а последующие связаны с предыдущими увеличением ассоциированного значения до name[M]
Пример
module enum_tb;
// GREEN = 0, YELLOW = 1, RED = 2, BLUE = 3
typedef enum {GREEN, YELLOW, RED, BLUE} color_set_1;
// MAGENTA = 2, VIOLET = 3, PURPLE = 8, PINK = 9
typedef enum {MAGENTA=2, VIOLET, PURPLE=8, PINK} color_set_2;
// BLACK0 = 0, BLACK1 = 1, BLACK2 = 2, BLACK3 = 3
typedef enum {BLACK[4]} color_set_3;
// RED0 = 5, RED1 = 6, RED2 = 7
typedef enum {RED[3] = 5} color_set_4;
// YELLOW3 = 0, YELLOW4 = 1, YELLOW5 = 2
typedef enum {YELLOW[3:5]} color_set_5;
// WHITE3 = 4, WHITE4 = 5, WHITE5 = 6
typedef enum {WHITE[3:5] = 4} color_set_6;
initial begin
color_set_1 color1;
color1 = YELLOW; $display("color1 = %0d, name = %s", color1, color1.name());
color_set_2 color2;
color2 = PURPLE; $display("color2 = %0d, name = %s", color2, color2.name());
color_set_3 color3;
color3 = BLACK3; $display("color3 = %0d, name = %s", color3, color3.name());
color_set_4 color4;
color4 = RED1; $display("color4 = %0d, name = %s", color4, color4.name());
color_set_5 color5;
color5 = YELLOW3; $display("color5 = %0d, name = %s", color5, color5.name());
color_set_6 color6;
color6 = WHITE4; $display("color6 = %0d, name = %s", color6, color6.name());
end
endmodule
Результат исполнения
color1 = 1, name = YELLOW
color2 = 8, name = PURPLE
color3 = 3, name = BLACK3
color4 = 6, name = RED1
color5 = 0, name = YELLOW3
color6 = 5, name = WHITE4
Last updated