Перечисления

Перечисление определяет набор именованных значений. Имена в перечислениях не могут начинаться с цифры. Можно задать целочисленные значения к именам перечисления на этапе объявления перечисления. Если значение имени на этапе объявления не определено явно, то ему будет назначено значение предыдущего имени в перечислении, увеличенное на 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