#### Formal Definition

*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.*

#### Simplified Syntax

**type **type_name **is array** (range) **of **element_type

**type **type_name **is array** (type **range** **<>**) **of **element_type

#### Description

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 s*tring 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.

#### Examples

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.

#### Important Notes

· 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.

## No comments:

## Post a Comment