Access Type
  
    
    
   
   
   Formal Definition
  
   A type that provides access to an 
   object of a given type. Access to such an object is achieved by an 
   access value returned by an allocator; the access value is said to
   designate the object. 
  
   Simplified Syntax
  
   access subtype_indication 
  
   type identifier; 
  
   Description
  
   Access type allows to manipulate data, which are created dynamically 
   during simulation and which exact size is not known in advance. Any 
   reference to them is performed via allocators, 
   which work in a similar way as pointers in programming languages. 
  
   The subtype_indication in 
   the access type declaration 
   denotes the type of an object designated by a value of an access 
   type. It can be any scalar, composite or other access type (example 
   1). File type is not allowed here. 
  
   The only objects allowed to be of the access type are variables. 
  
   The default value of an access type is null
    which designates no object at all. To assign any other value 
   to an object of an access type an allocator
    has to be used (see allocator 
   for details). 
  
   The access type allows to 
   create recursive data structures (dynamic lists of objects created 
   during simulation) which consist of the records that contain elements 
   of access types - either the same or different than the actually 
   declared. In order to handle declarations of such recursive data 
   structures so called incomplete 
   type declaration is needed which plays a role of an 
   "announcement" of a type which will be declared later on. 
  
   For each incomplete type declaration there must be a corresponding 
   full type declaration with the same name. The complete declaration 
   must appear in the same declarative part. A type declared as 
   incomplete may not be used for any other purposes than to define an 
   access type before the complete type definition is accomplished. Such 
   an incomplete type declaration is presented in example 2 below. 
  
   Examples
  
   Example 1 
  
   -- declaration of record type Person: 
   type Person is record 
               address:ADRESS_TYPE; 
               age:DATE; 
   end record Person; 
   -- declaration of access type Person_Access: 
   type Person_Access is access Person; 
  
     
   The Person_Access type defines a pointer (dynamic link) to a record 
   declared earlier and called Person. 
  
   Example 2 
  
   -- declaration of an incomplete type Queue_Element: 
   type Queue_Element; 
   -- declaration of an access type Queue_Element_Ptr: 
   type Queue_Element_Ptr is access Queue_Element; 
   -- declaration of an full record type Queue_Element: 
   type Queue_Element is record 
                     name:STRING(1
    to 20); 
                     address:ADRESS_TYPE; 
                     age:DATE; 
                     succ:Queue_Element_Ptr; 
   end record Queue_Element; 
  
     
   The type Queue_Element contains the Queue_Element_Ptr field, which in 
   turns points to Queue_Element. In order to declare both types 
   sequentially, first the Queue_Element is declared in an incomplete 
   way, which allows declaring the access type Queue_Element_Ptr. 
   Finally, complete declaration of Queue_Element must be provided. 
  
   Important Notes
  
   - 
   
    Application of access types is restricted to variables: only 
    variables can be of an access value. Also, only variables can be 
    designated by an access value. 
    - 
   
    Although access types are very useful for modeling potentially large 
    structures, like memories or FIFOs, they are not supported by 
    synthesis tools. 
     
  
    
 
    |