Record Type
Formal Definition
A composite type whose values
consist of named elements.
Simplified Syntax
type record_type_name is
record
element_name : element type;
element_name : element type;
. . .
end record record_type_name;
Description
The record type allows
declaring composite objects whose elements can be of different types.
This is the main difference from arrays,
which must have all elements of the same type. All elements are
declared with individual names together with subtype indication. If
two or more elements are of the same subtype they can be declared
together (Example 1). The names of elements in each record must be
distinct. The same element name, however, can be used in different records.
The value of an object of type record
is a composite value, consisting of the values of its elements. The
assignment of a value to an object of the type record
can be realized either through an aggregate
or through individual assignments to elements (selected names).
Aggregate-based assignment to a record, either positional
or named association, can
be used (Example 2). If the positional association is used, it is
assumed that the elements are listed in the order defined in the
record declaration. If the others
choice is used, it must represent at least one element. If there are
two or more elements assigned by the others
choice, then all these elements have to be of the same type.
When individual assignment to elements are used then each element id
referenced by the record object name followed by a dot and element's
name (example 3).
Expression assigned to an element of a record must result in a value
of the same type as the element.
Examples
Example 1
type RegName is
(AX, BX, CX, DX);
type Operation is record
Mnemonic : String (1 to 10);
OpCode : Bit_Vector(3 downto 0);
Op1, Op2, Res : RegName;
end record;
The record type defined above represents an information from an
instruction list of a processor. There are five elements here:
mnemonic code (a string), operation code (four bit), two operands and
the destination. Note that the last three elements are declared
together as they are of the same type.
Example 2
-- type declarations are given in Example 1
variable Instr1, Instr2: Operation;
. . .
Instr1:= ("ADD AX, BX", "0001", AX, BX, AX);
Instr2:= ("ADD AX, BX", "0010", others
=> BX);
Here, the two assignments to variables of the record type (Operation)
are performed with aggregates. Note the way the choice others was
used in the second example.
Example 3
-- type declarations are given in Example 1
variable Instr3 : Operation;
. . .
Instr3.Mnemonic := "MUL AX, BX";
Instr3.Op1 := AX;
In this case direct assignments to individual elements of a record
object are performed. Note the way an element is referenced: record
name, dot, and element name.
Important Notes
-
Linear records (i.e. record, where elements are of not of composite
type) are generally synthesizable.
-
Files are not allowed as elements of records.
|