2.6 Package body

...
ENTITY e IS
    ...
BEGIN
    ...
END e ;

...
ARCHITECTURE a OF e IS
    ...
BEGIN
    ...
END a ;

...
CONFIGURATION c
        OF e IS
    ...
    ...
    ...
END


...
PACKAGE pkg IS
    ...
    ...
    ...
END pkg ;

package_body ::=

package body
package _simple_name is
     package_body_declarative_part
end [ package body ]
        [ package _simple_name ] ;


..
PACKAGE BODY pck
        IS
    ...
    ...
    ...
END pck ;

...
b: BLOCK IS
    ...
BEGIN
    ...
END BLOCK b ;

FUNCTION f (...)
    RETURN r IS
    ...
BEGIN
    ...
END f ;

PROCEDURE p (...) IS
    ...
BEGIN
    ...
END p ;

p : PROCESS
    ...
BEGIN
    ...
END PROCESS p ;

2.6.1 Further definitions

simple_name ::= identifier

package_body_declarative_part ::=
    { package_body_declarative_item }

2.6.2 Examples

USE work.pck_0.all;
PACKAGE BODY pck IS
   CONSTANT
cint : integer := f(6);
END pck ;

The objects from the library pck_0 are integrated.
In the package body the constant cint , which has to be
declared in the package header, is declared as integer
and initialized with the result value from function call
f(6) (deferred constant).


PACKAGE BODY
pck_1 IS

   FUNCTION G ( A, B : Bit )
      RETURN Bit IS
   BEGIN
      RETURN NOT ( A XOR B );
   END ;

   FUNCTION F ( S1, S2 : Bit )
      RETURN Bit IS
   VARIABLE V : Bit;
   BEGIN
      V := S1 NAND S2;
      RETURN G(V, S2);
   END ;

END
pck_1 ;


Definition of the package body pck_1
in which the two functions G and F
are declared.

In the function G the value of the equation
A XOR B is returned as a result (as Bit).


In the function F a variable V
is declared as Bit which then receives
the value from S1 NAND S2 .
The function F delivers the bit-value from
the function call G(V, S2) as a result value.

PACKAGE BODY tristate IS

   FUNCTION
BitVal ( Value : Tri )
      RETURN Bit IS
   CONSTANT
Bits : Bit_Vector
                   := "0100";
   BEGIN
      RETURN
Bits(Tri'Pos(Value))
   END ;

   FUNCTION
TriVal ( Value : Bit )
         RETURN Tri IS
   VARIABLE
V : Tri := 'Z';
   BEGIN
      FOR
i IN Sources'Range LOOP
         IF
Sources(i) /= 'Z' THEN
            IF
V = 'Z' THEN
               V := Sources(i);
            ELSE
               RETURN
'E';
            END IF ;
         END IF ;
      END LOOP ;
   RETURN V ;
   END ;

END
tristate ;

Definition of the package body tristate
in which the two functions BitVal and
TriVal are declared.

In the function BitVal a constant Bits
is declared and initialized with the value "0100".
As a result, the value of the bit in the position
Tri'Pos ( Value ) of Bits is returned.


In the function TriVal a variable V of the type Tri is
declared and initialized with the value Z .


In LOOP either the value of Source(i) is transferred to
V or E is returned as a result value, depending on the
individual value of Source(i) and V . In the first case V is
returned as a result value afterwards.