A type, the value of which consists of elements that are all of the same subtype (and hence, of the same type). Each element is uniquely distinguished by an index (for a one-dimensional array) or by a sequence of indexes (for a multidimensional array). Each index must be a value of a discrete type and must lie in the correct index range.
type type_name is array (range) of element_type
type type_name is array (type range <>) of element_type
The array is a composite object, which elements are of the same subtype. Each of the elements is indexed by one or more indices belonging to specified discrete types. The number of indices is the number of dimensions, i.e. one-dimensional array has one index, two-dimensional has two indices, etc. The order of indices is significant and follows the order of dimensions in the type declaration (example 1).
An array may be either constrained or unconstrained. The array is constrained if the size of the array is constrained. The size of the array can be constrained using a discrete type mark or a range. In both cases, the number of the elements in the array is known during the compilation. Several declarations of constrained arrays are presented in example 1.
The array is said to be unconstrained if its size is unconstrained: the size of the unconstrained array is declared in the form of the name of the discrete type, which range is unconstrained. The number of elements of unconstrained array type is unknown. The size of a particular object is specified only when it is declared. Example 2 presents several declarations of unconstrained arrays.
Package STANDARD contains declarations of two one-dimensional unconstrained predefined array types: STRING and BIT_VECTOR. The elements of the STRING type are of the type CHARACTER and are indexed by positive values (i.e. counted from 1), and the elements of the BIT_VECTOR type are of the type BIT and are indexed by natural values (i.e. counted from 0). See string type and Bit_Vector for details.
Array elements are referenced by indices and can be assigned values individually or using concatenation, aggregates, slices or any mixture of those methods. See respective topics for details.
Example 1
type Real_Matrix
is array (1 to 10)
of REAL;
type BYTE is array
(0 to 7) of BIT;
type Log_4_Vector
is array (POSITIVE range 1
to 8, POSITIVE
range 1 to 2) of Log_4;
type X
is (LOW, HIGH);
type DATA_BUS
is array (0 to 7, X)
of BIT;
The type Real_Matrix is an array consisting of 10 elements, each of
which is of the type REAL. Log_4_Vector is a two-dimensional array 82
and its elements are of type Log_4 (which must have been declared
earlier). Also the type DATA_BUS is a two-dimensional array of the
same size, but note that one of the dimensions is defined as
enumeration type.
Example 2
-- unconstrained array of element of Real type:
type Real_Matrix is array
(POSITIVE range <>) of Real;
variable Real_Matrix_Object
: Real_Matrix (1 to 8);
-- unconstrained array of elements of Log_4 type:
type Log_4_Vector is array
(NATURAL range <>,
POSITIVE range<>) of Log_4;
variable L4_Object :
Log_4_Vector (0 to 7, 1 to 2);
Examples of unconstrained types: Real_Matrix is when an unconstrained
type and an object of this type is declared (Real_Matrix_Object) it
is restricted to 8 elements. In similar way L4_Object is constrained
from an unconstrained two-dimensional type Log_4_Vector.
Synthesis tools do generally not support multidimensional arrays. The only exceptions to this are two-dimensional "vectors of vectors". Some synthesis tools allow two-dimensional arrays.
Arrays may not be composed of files.