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).
type type_name is
(type_element, type_element, ...);
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.
type NotGood is
(X, '0', '1', X); -- illegal
type MyBit is
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.
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.
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.