alu: besseres geruest
[hwmod.git] / src / alu_tb.vhd
1 library ieee;
2 use ieee.std_logic_1164.all;
3 use ieee.numeric_std.all;
4 use work.gen_pkg.all;
5
6 entity alu_tb is
7         end entity alu_tb;
8
9 architecture sim of alu_tb is
10         component alu is
11                 port
12                 (
13                         sys_clk : in std_logic;
14                         sys_res_n : in std_logic;
15                         opcode : in alu_ops;
16                         op1 : in csigned;
17                         op2 : in csigned;
18                         op3 : out csigned;
19                         do_calc : in std_logic;
20                         ack : in std_logic;
21                         calc_done : out std_logic
22                 );
23         end component alu;
24
25         signal sys_clk, sys_res_n, do_calc, calc_done, ack : std_logic;
26         signal opcode : alu_ops;
27         signal op1, op2, op3, optmp : csigned;
28         signal stop : boolean := false;
29 begin
30         bla : alu
31         port map
32         (
33                 sys_clk => sys_clk,
34                 sys_res_n => sys_res_n,
35                 do_calc => do_calc,
36                 ack => ack,
37                 calc_done => calc_done,
38                 op1 => op1,
39                 op2 => op2,
40                 op3 => op3,
41                 opcode => opcode
42         );
43
44         process
45         begin
46                 sys_clk <= '0';
47                 wait for 15 ns;
48                 sys_clk <= '1';
49                 if stop = true then
50                         wait;
51                 end if;
52                 wait for 15 ns;
53         end process;
54
55         process
56         begin
57                 sys_res_n <= '0';
58                 wait for 50 ns;
59                 sys_res_n <= '1';
60                 wait for 100 ns;
61
62                 op1(31 downto 0) <= (0 => '1', 1 => '1', 2 => '1', others => '0');
63                 op2(31 downto 0) <= (0 => '1', 2 => '1', others => '0');
64                 opcode <= ADD;
65
66                 wait for 10 ns;
67                 -- berechnung kann los gehen
68                 do_calc <= '1';
69                 ack <= '0';
70
71                 -- warten auf die alu einheit
72                 wait on calc_done;
73
74                 -- ack it!
75                 do_calc <= '0';
76                 ack <= '1';
77
78                 wait for 20 ns;
79
80                 stop <= true;
81                 wait;
82         end process;
83 end architecture sim;