-- -- (c) 2010 Igor Kalnitsky -- library ieee; use ieee.std_logic_unsigned.all; use ieee.std_logic_1164.all; use ieee.numeric_std.all; entity top_testbench is generic ( n : integer := 8 ); end top_testbench; architecture top_testbench_arch of top_testbench is component top is generic ( n : integer ); port ( clk : in std_logic; rst : in std_logic; d1 : in std_logic_vector (n-1 downto 0); d2 : in std_logic_vector (n-1 downto 0); operation : in std_logic; result : out std_logic_vector (2*n-1 downto 0) ); end component; signal clk : std_logic; signal rst : std_logic; signal operation : std_logic; signal d1 : std_logic_vector (n-1 downto 0); signal d2 : std_logic_vector (n-1 downto 0); signal result : std_logic_vector (2*n-1 downto 0); begin TESTUNIT : top generic map (n => n) port map (clk => clk, rst => rst, d1 => d1, d2 => d2, operation => operation, result => result); clock_process : process begin clk <= '0'; wait for 5 ns; clk <= '1'; wait for 5 ns; end process; data_process : process begin ------------------------------------------------------------------ -- Unsigned multiplication ------------------------------------------------------------------ -- test case #1 operation <= '0'; rst <= '1'; wait for 5 ns; rst <= '0'; wait for 5 ns; d1 <= std_logic_vector(to_unsigned(60, d1'length)); d2 <= std_logic_vector(to_unsigned(12, d2'length)); wait for 360 ns; assert (result = std_logic_vector(to_unsigned(720, result'length))) report "Test case #1 failed" severity error; -- test case #2 operation <= '0'; rst <= '1'; wait for 5 ns; rst <= '0'; wait for 5 ns; d1 <= std_logic_vector(to_unsigned(55, d1'length)); d2 <= std_logic_vector(to_unsigned(1, d2'length)); wait for 360 ns; assert (result = std_logic_vector(to_unsigned(55, result'length))) report "Test case #2 failed" severity error; -- test case #3 operation <= '0'; rst <= '1'; wait for 5 ns; rst <= '0'; wait for 5 ns; d1 <= std_logic_vector(to_unsigned(1, d1'length)); d2 <= std_logic_vector(to_unsigned(178, d2'length)); wait for 360 ns; assert (result = std_logic_vector(to_unsigned(178, result'length))) report "Test case #3 failed" severity error; -- test case #4 operation <= '0'; rst <= '1'; wait for 5 ns; rst <= '0'; wait for 5 ns; d1 <= std_logic_vector(to_unsigned(202, d1'length)); d2 <= std_logic_vector(to_unsigned(0, d2'length)); wait for 360 ns; assert (result = std_logic_vector(to_unsigned(0, result'length))) report "Test case #4 failed" severity error; -- test case #5 operation <= '0'; rst <= '1'; wait for 5 ns; rst <= '0'; wait for 5 ns; d1 <= std_logic_vector(to_unsigned(0, d1'length)); d2 <= std_logic_vector(to_unsigned(105, d2'length)); wait for 360 ns; assert (result = std_logic_vector(to_unsigned(0, result'length))) report "Test case #5 failed" severity error; ------------------------------------------------------------------ -- Signed multiplication ------------------------------------------------------------------ -- test case #6 operation <= '1'; rst <= '1'; wait for 5 ns; rst <= '0'; wait for 5 ns; d1 <= std_logic_vector(to_signed(60, d1'length)); d2 <= std_logic_vector(to_signed(12, d2'length)); wait for 360 ns; assert (result = std_logic_vector(to_signed(720, result'length))) report "Test case #6 failed" severity error; -- test case #7 operation <= '1'; rst <= '1'; wait for 5 ns; rst <= '0'; wait for 5 ns; d1 <= std_logic_vector(to_signed(55, d1'length)); d2 <= std_logic_vector(to_signed(1, d2'length)); wait for 360 ns; assert (result = std_logic_vector(to_signed(55, result'length))) report "Test case #7 failed" severity error; -- test case #8 operation <= '1'; rst <= '1'; wait for 5 ns; rst <= '0'; wait for 5 ns; d1 <= std_logic_vector(to_signed(-24, d1'length)); d2 <= std_logic_vector(to_signed(3, d2'length)); wait for 360 ns; assert (result = std_logic_vector(to_signed(-72, result'length))) report "Test case #8 failed" severity error; -- test case #9 operation <= '1'; rst <= '1'; wait for 5 ns; rst <= '0'; wait for 5 ns; d1 <= std_logic_vector(to_signed(202, d1'length)); d2 <= std_logic_vector(to_signed(0, d2'length)); wait for 360 ns; assert (result = std_logic_vector(to_signed(0, result'length))) report "Test case #9 failed" severity error; -- test case #10 operation <= '1'; rst <= '1'; wait for 5 ns; rst <= '0'; wait for 5 ns; d1 <= std_logic_vector(to_signed(0, d1'length)); d2 <= std_logic_vector(to_signed(105, d2'length)); wait for 360 ns; assert (result = std_logic_vector(to_signed(0, result'length))) report "Test case #10 failed" severity error; -- test case #11 operation <= '1'; rst <= '1'; wait for 5 ns; rst <= '0'; wait for 5 ns; d1 <= std_logic_vector(to_signed(-26, d1'length)); d2 <= std_logic_vector(to_signed(-10, d2'length)); wait for 360 ns; assert (result = std_logic_vector(to_signed(260, result'length))) report "Test case #11 failed" severity error; end process; end top_testbench_arch; configuration testbench_for_top of top_testbench is for top_testbench_arch for TESTUNIT : top use entity work.top(top_arch); end for; end for; end testbench_for_top;