| 
  
   | 
   | 
  
  
  
   Resolution Function
  
    
    
     
   
   Formal Definition
  
   A resolution function is a
   function that defines how the values of multiple sources of a given
   signal are to be resolved into a single value for that signal. 
  
   Simplified Syntax
  
   function function_name 
   (parameters) return type; 
  
   function function_name 
   (parameters) return type is 
  
     declarations 
  
     begin 
  
      sequential statements 
  
     end function function_name; 
  
   Description
  
   The resolution function allows multiple values to drive a single 
   signal at the same time. This is particularly important for buses, 
   which are connecting multiple sources of data. 
  
   The specification of a resolution function is the same as for 
   ordinary functions with one requirement: the resolution function must 
   be pure. 
  
   Resolution functions are associated with signals that require 
   resolution by including the name of the resolution function in the 
   declaration of signals or in the declaration of the signal subtype. 
  
   Examples
  
   Example 1 
  
   TYPE std_ulogic IS ( 'U', -- Uninitialized 
                        'X',
    -- Forcing Unknown 
                        '0',
    -- Forcing 0 
                        '1',
    -- Forcing 1 
                        'Z',
    -- High Impedance 
                        'W',
    -- Weak Unknown 
                        'L',
    -- Weak 0 
                        'H',
    -- Weak 1 
                        '-' 
    -- Don't care 
                       ); 
   TYPE std_ulogic_vector IS ARRAY 
   ( NATURAL RANGE <> ) OF std_ulogic; 
   FUNCTION resolved ( s : 
   std_ulogic_vector ) RETURN std_ulogic; 
   SUBTYPE std_logic IS 
   resolved std_ulogic; 
   TYPE std_logic_vector IS ARRAY 
   ( NATURAL RANGE <>) OF std_logic; 
   TYPE stdlogic_table IS ARRAY(std_ulogic,
    std_ulogic) OF std_ulogic; 
   CONSTANT resolution_table : 
   stdlogic_table := ( 
   --   --------------------------------------------------------- 
   --   |  U    X    0    1    Z    W    L    H    -        |   | 
   --   --------------------------------------------------------- 
        ( 'U', 'U', 'U', 'U', 'U', 'U', 'U', 
   'U', 'U' ), -- | U | 
        ( 'U', 'X', 'X', 'X', 'X', 'X', 'X', 
   'X', 'X' ), -- | X | 
        ( 'U', 'X', '0', 'X', '0', '0', '0', 
   '0', 'X' ), -- | 0 | 
        ( 'U', 'X', 'X', '1', '1', '1', '1', 
   '1', 'X' ), -- | 1 | 
        ( 'U', 'X', '0', '1', 'Z', 'W', 'L', 
   'H', 'X' ), -- | Z | 
        ( 'U', 'X', '0', '1', 'W', 'W', 'W', 
   'W', 'X' ), -- | W | 
        ( 'U', 'X', '0', '1', 'L', 'W', 'L', 
   'W', 'X' ), -- | L | 
        ( 'U', 'X', '0', '1', 'H', 'W', 'W', 
   'H', 'X' ), -- | H | 
        ( 'U', 'X', 'X', 'X', 'X', 'X', 'X', 
   'X', 'X' )  -- | - | 
     ); 
   FUNCTION resolved ( s : 
   std_ulogic_vector ) RETURN 
   std_ulogic IS 
     VARIABLE result 
   : std_ulogic := 'Z'; -- weakest state default 
   BEGIN 
   -- the test for a single driver is essential otherwise the 
   -- loop would return 'X' for a single driver of '-' and that 
   -- would conflict with the value of a single driver unresolved 
   -- signal. 
     IF (s'LENGTH = 
   1) THEN RETURN s(s'LOW); 
       ELSE 
         FOR 
   i IN s'RANGE LOOP 
           result := 
   resolution_table(result, s(i)); 
         END LOOP; 
     END IF; 
     RETURN result; 
   END resolved; 
  
     
   The example is a part of the Std_Logic_1164 Package specification. 
   The name of the resolution function called Resolved is included into 
   the declaration of the subtype Std_Logic (highlighted by boldface). 
   The resolution function itself is declared at the end of the example. 
  
   Important Notes
  
   - 
   
    Standard types (BIT and BIT_VECTOR) are not resolved and it is not 
    possible to specify multiple-source buses with these types. This is 
    quite restrictive for typical applications, which use buses. 
    - 
   
    Because Std_Logic and Std_Logic_Vector 
    are resolved and can handle buses, they became the de facto 
    industrial standard types. 
     
  
    
 
    |