PACKAGE alu_pkg IS TYPE bit_16_array IS array (integer range <>) of bit_vector(31 DOWNTO 0); TYPE bit_4_array IS array (integer range <>) of bit_vector(3 DOWNTO 0); TYPE integer_array IS array (integer range <>) of integer; TYPE bit_8 IS ARRAY (integer range <>) OF bit_vector(7 DOWNTO 0); PROCEDURE sub(r : IN bit_vector(3 DOWNTO 0); s : IN bit_vector(3 DOWNTO 0); sum : OUT bit_vector(3 DOWNTO 0); v : OUT bit ); PROCEDURE add (r : IN bit_vector(3 DOWNTO 0); s : IN bit_vector(3 DOWNTO 0); cin : IN bit; sum : OUT bit_vector(3 DOWNTO 0); v : OUT bit ); END alu_pkg; PACKAGE BODY alu_pkg IS PROCEDURE sub(r : IN bit_vector(3 DOWNTO 0); s : IN bit_vector(3 DOWNTO 0); sum : OUT bit_vector(3 DOWNTO 0); v : OUT bit ) IS VARIABLE carry : bit; VARIABLE carry2 : bit; VARIABLE carry3 : bit; VARIABLE bv : bit_vector(3 DOWNTO 0); BEGIN carry := '1'; bv := NOT BIT_VECTOR(s); FOR i IN 0 to 3 LOOP sum(i) := r(i) XOR bv(i) XOR carry; carry := (r(i) AND bv(i)) OR (r(i) AND carry) OR (carry AND bv(i)); IF (i = 2) THEN carry2 := carry; END IF; IF (i = 3) THEN carry3 := carry; END IF; END LOOP; -- i v := carry2 XOR carry3; END sub; PROCEDURE add (r : IN bit_vector(3 DOWNTO 0); s : IN bit_vector(3 DOWNTO 0); cin : IN bit; sum : OUT bit_vector(3 DOWNTO 0); v : OUT bit ) IS VARIABLE carry : bit; VARIABLE carry2 : bit; VARIABLE carry3 : bit; BEGIN carry := cin; FOR i IN 0 to 3 LOOP sum(i) := r(i) XOR s(i) XOR carry; carry := (r(i) AND s(i)) OR (r(i) AND carry) OR (carry AND r(i)); IF (i = 2) THEN carry2 := carry; ELSIF (i = 3) THEN carry3 := carry; END IF; END LOOP; -- i v := carry2 XOR carry3; END add; END alu_pkg; <div align="center"><br /><script type="text/javascript"><!-- google_ad_client = "pub-7293844627074885"; //468x60, Created at 07. 11. 25 google_ad_slot = "8619794253"; google_ad_width = 468; google_ad_height = 60; //--></script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script><br /> </div>