The integer type is a scalar whose set of values includes integer numbers of the specified range.
type type_name is integer_left_bound to integer_right_bound;
type type_name is integer_left_bound downto integer_right_bound;
An integer type is a numeric type which consists of integer numbers within the specified range. There is a predefined INTEGER type, which range depends on the implementation, however, must cover at least the range -2147483648 to +2147483647.
A user-defined integer type can be constructed on the basis of the predefined INTEGER type by constraining its range (example 1). The bounds of the range of a user-defined integer type should be in the form of a locally static expression. (In VHDL an expression is said to be locally static if it can be evaluated at compile time.) The value of an expression used as a range for an integer type must also be of integer type, not necessarily the same for both bounds (example 2). Negative bounds are allowed.
All integer types (including user-defined) have the same set of arithmetic operators, defined in the package STANDARD, namely: addition, subtraction, multiplication, division, modulus, and remainder. In all cases both operands and the result are of the integer type.
Besides arithmetic operations, relations can also be checked on such integer operands as: equal, unequal, greater than, less than, greater or equal than, and less or equal than. In all cases, the result is Boolean.
Example 1
type Voltage_Level is range
0 to 5;
type Int_64K is range
-65536 to 65535;
type WORD is range
31 downto 0;
An integer type can be defined either as an ascending or descending range.
Example 2
type MUX_ADDRESS is range (2**(N+1))- 1 downto 0;
The parameter N must have an explicitly stated value (e.g. as a constant).
It is an error to assign to an integer object a value which is from outside its range.