Operator Overloading
  
    
    
     
   
   Definition:
  
   Operator overloading is a
   declaration of a function whose designator is an operator symbol. 
  
   Simplified Syntax
  
   function "operator"
    (parameters) return type is 
  
   function "operator"
    (parameters) return type is 
  
   declarations 
  
     begin 
  
       sequential statements 
  
     end function; 
  
   Description
  
   The operator is called overloaded 
   if there is more than one function specifying it for different data 
   and result types. VHDL allows defining operators of the same names as 
   predefined operators, but for different operand types. Both can exist 
   together in one specification, offering greater versatility to the user. 
  
   Such functions can be invoked both with prefix notation (Example 1) 
   and usual infix notation (Example 2). 
  
   In the case when the operator is called and the operand values belong 
   to different types, it is necessary to use the type
    conversion or the qualified expression in order to select 
   appropriate operator (Example 3). 
  
   Examples
  
   Example 1 
  
   type Log4 is 
   ('0', '1', 'Z', 'X'); 
   function "nand" 
   (Left, Right: Log4) return Log4; 
   function "or" 
   (Left, Right: Log4) return Log4; 
   signal S1, S2: Log4; 
   S1 <= "or" ('1', 'Z'); 
   S2 <= "nand"(S1, 'X'); 
  
     
   Functions or and nand implement basic logic operations for operands 
   of type Log4 overloading the predefined operations of the same names. 
   In the above example these functions are called using the standard 
   call syntax function (prefix). 
  
   Example 2 
  
   signal S3, S4: Log4; 
   S3 <= (S1 nand S2) or 'X'; 
  
     
   The operators or and nand are overloaded through the declarations as 
   in the Example 1. Here the overloaded operators are used in the infix 
   form, i.e. with the operator name between the operands. 
  
   Example 3 
  
   function "or" 
   (Left, Right: Log4) return Bit; 
   signal S4: Bit; 
   S4 <= log4('1') or Log4('0'); 
  
     
   The or operator is used here in a 4-value logical expression by 
   connecting '1' and '0' operands with the or symbol. The qualified
    expression was used here to indicate the type of operands 
   (which otherwise would be considered to be of the type BIT). 
  
   Important Notes
  
   - 
   
    Operators "+" and "-" can be defined both as 
    binary operators (with two operands) or unary operators (with one operand). 
    - 
   
    Invoking a user-defined overloaded operator always requires 
    evaluation of both operands before the operation is executed (some 
    predefined operators do not evaluate the right operand if the result 
    can be decided from the left operand only). 
     
  
    
 
    |