====== Package body ====== ===== package_body ===== package body package _simple_name is package_body_declarative_part end [ package body ] [ package _simple_name ] ; ===== Further definitions ===== ==== simple_name ==== * [[.:bnf#identifier]] ==== package_body_declarative_part ==== ''{ [[.:bnf#package_body_declarative_item]] }'' ===== Examples ===== 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) ([[.:Constant declarations|deferred constant]]). USE work.pck_0.all; PACKAGE BODY pck IS CONSTANT cint : integer := f(6); END pck ; ---- 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 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 //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. 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 ;