2 use ieee.std_logic_1164.all;
3 use ieee.std_logic_arith.all;
4 use ieee.std_logic_signed.all;
6 entity tb_multiplier is
9 --------------------------------------------------------------------------------
11 architecture testbench of tb_multiplier is
13 constant period : time := 2 us;
14 constant offset : time := 0 us;
17 signal clk : std_logic;
18 signal reset : std_logic;
20 signal A : std_logic_vector (15 downto 0);
21 signal B : std_logic_vector (15 downto 0);
22 signal prod : std_logic_vector (31 downto 0);
24 signal test_vector_no : integer := 0;
27 type test_vector_t is record
28 A : std_logic_vector (15 downto 0);
29 B : std_logic_vector (15 downto 0);
30 prod : std_logic_vector (31 downto 0);
33 type test_vector_array is array (natural range<>) of test_vector_t;
35 constant test_vectors : test_vector_array := (
36 (X"0000", X"0000", X"00000000"),
37 (X"0000", X"FFFF", X"00000000"),
38 (X"0001", X"0001", X"00000001"),
39 (X"7FFF", X"7FFF", X"3FFF0001"),
40 (X"FFFF", X"0001", X"FFFFFFFF"),
41 (X"FFFF", X"FFFF", X"00000001"),
42 (X"8000", X"7FFF", X"C0008000"),
43 (X"8000", X"FFFF", X"00008000"),
44 (X"8001", X"8001", X"BFFEFFFF"),
45 (X"8000", X"8000", X"C0000000"));
47 --------------------------------------------------------------------------------
51 uut : entity work.multiplier
75 wait for 1.5 * period;
83 TEST_VECTOR_PROC : process
91 for i in test_vectors'RANGE loop
94 A <= test_vectors(i).A;
95 B <= test_vectors(i).B;
98 assert prod = test_vectors(i).prod
99 report "Invalid product - test vector no. " & integer'image(i)