| 
   | 
  
   | 
  
   | 
  
   | 
  
A package body defines the bodies of subprograms and the values of deferred constants declared in the interface to the package.
package body package_name is
package_body_declarations
subprogram bodies declarations
deferred constants declarations
end package body package_name;
The package body includes complete definitions of subprogram body declarations as well as values of deferred constants declared in corresponding package declarations. Other declarations (similar to those of package declaration) are also allowed here, but are visible only inside the package body.
The deferred constant, which has been declared in a package declaration, may be used before its full declaration only in a default expression for a local generic parameter, local port or formal parameter of subprogram.
Example 1
   library IEEE;
   use IEEE.STD_LOGIC_1164.all;
   package AUXILIARY is
     type MUX_input 
   is array (INTEGER 
   range<>) of STD_LOGIC_VECTOR (0 
   to 7);
     type operation_set 
   is (SHIFT_LEFT, ADD);
     subtype MUX_Address 
   is POSITIVE;
     function Compute_Address
    (IN1 : MUX_input) return MUX_address;
     constant Deferred_Con
    : Integer;
   end AUXILIARY;
   package body AUXILIARY is
     function Compute_Address
    (IN1 : MUX_input) return MUX_address is
     begin
     ............
     end;
     constant Deferred_Con
    : Integer := 177;
   end package body AUXILIARY;
    
   First, the package is specified here and then the accompanying 
   package body. Note that both have the same name.
Declarations other than values of deferred constants and subprogram bodies are not visible outside the package body and can be used only locally, inside it.
Each package can have only one body.
| 
   | 
  
   | 
  
   | 
  
   |