2 use ieee.std_logic_1164.all;
3 use ieee.numeric_std.all;
9 architecture sim of alu_tb is
13 sys_clk : in std_logic;
14 sys_res_n : in std_logic;
19 do_calc : in std_logic;
20 calc_done : out std_logic
24 signal sys_clk, sys_res_n, do_calc, calc_done : std_logic;
25 signal opcode : alu_ops;
26 signal op1, op2, op3 : csigned;
27 signal stop : boolean := false;
33 sys_res_n => sys_res_n,
35 calc_done => calc_done,
54 type alu_testv is record
61 -- ggf. groesse des arrays erhoehen
62 type alu_testv_array is array (natural range 0 to 20) of alu_testv;
64 variable testmatrix : alu_testv_array :=
65 ( 0 => (7, ADD, 3, 10),
71 6 => (-7, MUL, 3, -21),
72 7 => (268435456, MUL, -2, -536870912),
73 8 => (268435456, MUL, 2**5, 0), -- um fuenf nach links shiften
74 9 => (268435456 + 5, MUL, 2**5, 160), -- = 5 * (2^5)
75 others => (0, ADD, 0, 0)
83 for i in testmatrix'range loop
85 op1 <= to_signed(testmatrix(i).o1,CBITS);
86 opcode <= testmatrix(i).o;
87 op2 <= to_signed(testmatrix(i).o2,CBITS);
89 -- berechnung kann los gehen
92 -- warten auf die alu einheit
95 assert op3 = to_signed(testmatrix(i).expected,CBITS)
96 report "" & cinteger'image(testmatrix(i).o1) &
97 " " & alu_ops'image(opcode) &
98 " " & cinteger'image(testmatrix(i).o2) &
99 "/= " & integer'image(to_integer(op3)) &
100 " -- erwartet: " & cinteger'image(testmatrix(i).expected);
108 report "alle testfaelle der ALU waren erfolgreich!";
112 end architecture sim;