ENTITY talu IS END talu; ARCHITECTURE one OF talu IS -- Declare and configure DUT COMPONENT alu IS PORT (a,b : IN BIT_VECTOR (7 downto 0); cin : IN BIT; addsub,arlo : IN BIT; csel : IN BIT_VECTOR(1 downto 0); func : IN BIT_VECTOR(3 downto 0); r : OUT BIT_VECTOR(7 downto 0); n,z : OUT BIT; cout : OUT BIT); END COMPONENT; FOR all : alu USE ENTITY work.alu(one); -- Declare signals to stimulate DUT SIGNAL a,b,r : BIT_VECTOR(7 downto 0); SIGNAL cin : BIT; SIGNAL addsub,arlo,n,z,cout : BIT; SIGNAL csel : BIT_VECTOR(1 downto 0); SIGNAL func : BIT_VECTOR(3 downto 0); BEGIN -- instantiate DUT dut : alu PORT MAP (a,b,cin,addsub,arlo,csel,func,r,n,z,cout); -- PROCESS to generate stimulus PROCESS --------- PROCEDURE bseq IS BEGIN b <= "00000000"; WAIT for 25 ns; b <= "11111111"; WAIT for 25 ns; b <= "01010101"; WAIT for 25 ns; b <= "10101010"; WAIT for 25 ns; b <= "11101110"; WAIT for 25 ns; b <= "00010001"; WAIT for 25 ns; b <= "01110111"; WAIT for 25 ns; b <= "10001000"; WAIT for 25 ns; END bseq; --------- BEGIN -- Test add + cin a <= "00000000"; cin <= '0'; addsub<='0';arlo<='0'; csel<="00"; func<="1000"; bseq; a <= "11111111"; cin <= '0'; addsub<='0';arlo<='0'; csel<="00"; func<="0000"; bseq; a <= "01010101"; cin <= '0'; addsub<='0';arlo<='0'; csel<="00"; func<="1111"; bseq; a <= "10101010"; cin <= '0'; addsub<='0';arlo<='0'; csel<="00"; func<="1110"; bseq; a <= "01010101"; cin <= '1'; addsub<='0';arlo<='0'; csel<="00"; func<="1111"; bseq; -- Test subtract - cin a <= "00000000"; cin <= '0'; addsub<='1';arlo<='0'; csel<="01"; func<="1000"; bseq; a <= "11111111"; cin <= '0'; addsub<='1';arlo<='0'; csel<="01"; func<="0000"; bseq; a <= "01010101"; cin <= '0'; addsub<='1';arlo<='0'; csel<="01"; func<="1111"; bseq; a <= "10101010"; cin <= '0'; addsub<='1';arlo<='0'; csel<="01"; func<="1110"; bseq; a <= "01010101"; cin <= '1'; addsub<='1';arlo<='0'; csel<="01"; func<="1111"; bseq; -- Test add without carry a <= "00000000"; cin <= '0'; addsub<='0';arlo<='0'; csel<="10"; func<="1000"; bseq; a <= "11111111"; cin <= '0'; addsub<='0';arlo<='0'; csel<="10"; func<="0000"; bseq; a <= "01010101"; cin <= '0'; addsub<='0';arlo<='0'; csel<="10"; func<="1111"; bseq; a <= "10101010"; cin <= '0'; addsub<='0';arlo<='0'; csel<="10"; func<="1110"; bseq; a <= "01010101"; cin <= '1'; addsub<='0';arlo<='0'; csel<="10"; func<="1111"; bseq; -- Test subtract without borrow a <= "00000000"; cin <= '0'; addsub<='0';arlo<='0'; csel<="11"; func<="1000"; bseq; a <= "11111111"; cin <= '0'; addsub<='0';arlo<='0'; csel<="11"; func<="0000"; bseq; a <= "01010101"; cin <= '0'; addsub<='0';arlo<='0'; csel<="11"; func<="1111"; bseq; a <= "10101010"; cin <= '0'; addsub<='0';arlo<='0'; csel<="11"; func<="1110"; bseq; a <= "01010101"; cin <= '1'; addsub<='0';arlo<='0'; csel<="11"; func<="1111"; bseq; -- Test logic AND a <= "00000000"; cin <= '0'; addsub<='0';arlo<='1'; csel<="00"; func<="1000"; bseq; a <= "11111111"; cin <= '0'; addsub<='0';arlo<='1'; csel<="00"; func<="1000"; bseq; a <= "01010101"; cin <= '0'; addsub<='0';arlo<='1'; csel<="00"; func<="1000"; bseq; a <= "10101010"; cin <= '0'; addsub<='0';arlo<='1'; csel<="00"; func<="1000"; bseq; a <= "01010101"; cin <= '1'; addsub<='0';arlo<='1'; csel<="00"; func<="1000"; bseq; -- Test logic OR a <= "00000000"; cin <= '0'; addsub<='0';arlo<='1'; csel<="00"; func<="1110"; bseq; a <= "11111111"; cin <= '0'; addsub<='0';arlo<='1'; csel<="00"; func<="1110"; bseq; a <= "01010101"; cin <= '0'; addsub<='0';arlo<='1'; csel<="00"; func<="1110"; bseq; a <= "10101010"; cin <= '0'; addsub<='0';arlo<='1'; csel<="00"; func<="1110"; bseq; a <= "01010101"; cin <= '1'; addsub<='0';arlo<='1'; csel<="00"; func<="1110"; bseq; -- Test logic XOR a <= "00000000"; cin <= '0'; addsub<='0';arlo<='1'; csel<="00"; func<="0110"; bseq; a <= "11111111"; cin <= '0'; addsub<='0';arlo<='1'; csel<="00"; func<="0110"; bseq; a <= "01010101"; cin <= '0'; addsub<='0';arlo<='1'; csel<="00"; func<="0110"; bseq; a <= "10101010"; cin <= '0'; addsub<='0';arlo<='1'; csel<="00"; func<="0110"; bseq; a <= "01010101"; cin <= '1'; addsub<='0';arlo<='1'; csel<="00"; func<="0110"; bseq; WAIT; END PROCESS; END one;