Enumeration Type
  
    
    
     
   
   Formal Definition
  
   The Enumeration
   type is a type whose values are defined by listing (enumerating) them
   explicitly. This type values are represented by enumeration literals
   (either identifiers or character literals). 
  
   Syntax:
  
   type type_name is
    (type_element, type_element, ...); 
  
   Description
  
   The enumeration type is a 
   type with an ordered set of values, called enumeration literals, and 
   consisting of identifiers and character literals. Each of enumeration 
   literals must be unique within the given declaration type, but 
   different enumeration types 
   may use the same literals (example 1). In this case, it is said that 
   such literals are overloaded. When such a literal is referenced in 
   the source code, its is determined from the context, in which enumeration 
   this literal has occurred. 
  
   All enumerated values are ordered and each of them has a numeric 
   (integer) value assigned to it. The number indicates the position of 
   the literal. The very first literal in the definition has position 
   number zero and each subsequent has the number increased by one from 
   its predecessor (example 2). 
  
   Each enumeration type 
   defined has implicitly defined relational operators that can be used 
   on the type values. 
  
   The package Standard 
   contains declarations of several predefined enumeration types: BIT, 
   BOOLEAN, CHARACTER, SEVERITY_LEVEL, FILE_OPEN_KIND and 
   FILE_OPEN_STATUS. Apart from that the package Std_Logic_1164 
   defines another enumeration type, STD_ULOGIC. 
  
   Examples
  
   Example 1 
  
   type NotGood is 
   (X, '0', '1', X); -- illegal 
   type MyBit is 
   (L, H); 
   type Test is 
   ('0', '1', L, H); 
  
     
   The type NotGood is an illegal declaration as the literal X appears 
   twice in the same declaration. On the other hand there is nothing 
   incorrect in using L (LOW) and H (HIGH) twice because they are used 
   in two different declarations. 
  
   Example 2 
  
   type FSM_States is 
   (Init, Read, Decode, Execute, Write); 
  
   The type FSM_States defines five possible values, which are numbered 
   from 0 to 4: the position number of Init is 0, position of Read is 1, 
   Decode - 2, Execute - 3, and Write - 4. 
  
   Important Notes
  
   - 
   
    It is illegal to define an enumeration type with a range. 
    - 
   
    It is assumed that the values are defined in ascending order. For 
    this reason it is recommended to order the literals in such a way 
    that the default value is the first one (it is referred to through 
    the attribute 'left'). 
    - 
   
    Objects of enumeration types are typically synthesizeable. 
     
  
    
 
    |