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