vhdl_processor/src/alu_tb.vhd

54 lines
1.9 KiB
VHDL

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.NUMERIC_STD.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity test_alu is
end test_alu;
architecture bench of test_alu is
component alu is
port(
a: in STD_LOGIC_VECTOR(7 downto 0);
b: in STD_LOGIC_VECTOR(7 downto 0);
op: in STD_LOGIC_VECTOR(2 downto 0);
s: out STD_LOGIC_VECTOR(7 downto 0);
flags : out STD_LOGIC_VECTOR(3 downto 0)
);
end component;
for all : alu use entity work.alu;
signal in1, in2, out1 : STD_LOGIC_VECTOR(7 downto 0);
signal out2 : STD_LOGIC_VECTOR(3 downto 0);
signal operation : STD_LOGIC_VECTOR(2 downto 0);
-- Test ADD -> 4+(-16)/4+240, then 128+156 -> C = 1
-- Test SUB -> 32-6 then 4-10 -> N =1
-- Test AND -> 0b00001111 & 0b11110000 then 0b01010000 & 0b11110001
-- Test OR -> 0b00001111 | 0b11110000 then 0b01010000 | 0b11110001
-- Test XOR -> 0b00001111 ^ 0b11110000 then 0b01010000 ^ 0b11110001
-- Test NOT -> 0b00001111
-- Test MUL -> 6*3 then 128*3 O = 1
begin
testeur: alu PORT MAP(in1, in2, operation, out1, out2);
in1 <= "00000100", "10000000" after 2 ns,
"00100000" after 4 ns, "00000100" after 6 ns,
"00001111" after 8 ns, "01010000" after 10 ns,
"00001111" after 12 ns, "01010000" after 14 ns,
"00001111" after 16 ns, "01010000" after 18 ns,
"00001111" after 20ns,
"00000110" after 24ns, "10000000" after 26ns;
in2 <= "11110000", "10011100" after 2 ns,
"00000110" after 4 ns, "00001010" after 6 ns,
"11110000" after 8 ns, "11110001" after 10 ns,
"11110000" after 12 ns, "11110001" after 14 ns,
"11110000" after 16 ns, "11110001" after 18 ns,
-- in2 is not used for not
"00000011" after 24ns, "00000011" after 26ns;
operation <= "000", "001" after 4ns, "010" after 8ns, "011" after 12ns, "100" after 16ns, "101" after 20ns, "110" after 24ns;
end bench;