Files
IEEE754Adder/SpecialCasesTest.vhd

166 lines
4.9 KiB
VHDL

LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
ENTITY SpecialCasesTest IS
END SpecialCasesTest;
ARCHITECTURE behavior OF SpecialCasesTest IS
-- Component Declaration for the Unit Under Test (UUT)
COMPONENT SpecialCasesCheck
PORT(
X : IN std_logic_vector(31 downto 0);
Y : IN std_logic_vector(31 downto 0);
isNaN : OUT std_logic;
isZero : OUT std_logic
);
END COMPONENT;
--Inputs
signal X : std_logic_vector(31 downto 0) := (others => '0');
signal Y : std_logic_vector(31 downto 0) := (others => '0');
--Outputs
signal isNaN : std_logic;
signal isZero : std_logic;
-- No clocks detected in port list. Replace clock below with
-- appropriate port name
signal clock : std_logic;
signal expectedNaN : std_logic;
signal expectedZero : std_logic;
signal error : std_logic;
constant clock_period : time := 1 ns;
BEGIN
-- Instantiate the Unit Under Test (UUT)
uut: SpecialCasesCheck PORT MAP (
X => X,
Y => Y,
isNaN => isNaN,
isZero => isZero
);
-- Clock process definitions
clock_process :process
begin
clock <= '0';
wait for clock_period/2;
clock <= '1';
wait for clock_period/2;
end process;
test_process :process
begin
X <= "01111111111111111111111111111111"; -- NaN
Y <= "01111111111111111111111111111111"; -- NaN
expectedNaN <= '1';
expectedZero <= '0';
wait for clock_period;
X <= "01111111111111111111111111111111"; -- NaN
Y <= "01000101100101100111100101001100"; -- 4815.162342
expectedNaN <= '1';
expectedZero <= '0';
wait for clock_period;
X <= "01000101100101100111100101001100"; -- 4815.162342
Y <= "01111111111111111111111111111111"; -- NaN
expectedNaN <= '1';
expectedZero <= '0';
wait for clock_period;
X <= "01111111111111111111111111111111"; -- NaN
Y <= "01111111100000000000000000000000"; -- +Inf
expectedNaN <= '1';
expectedZero <= '0';
wait for clock_period;
X <= "01111111100000000000000000000000"; -- +Inf
Y <= "01111111100000000000000000000000"; -- +Inf
expectedNaN <= '0';
expectedZero <= '0';
wait for clock_period;
X <= "01111111100000000000000000000000"; -- +Inf
Y <= "11111111100000000000000000000000"; -- -Inf
expectedNaN <= '1';
expectedZero <= '1';
wait for clock_period;
X <= "11111111100000000000000000000000"; -- -Inf
Y <= "01111111100000000000000000000000"; -- +Inf
expectedNaN <= '1';
expectedZero <= '1';
wait for clock_period;
X <= "01000101100101100111100101001100"; -- 4815.162342
Y <= "01111111100000000000000000000000"; -- +Inf
expectedNaN <= '0';
expectedZero <= '0';
wait for clock_period;
X <= "11111111100000000000000000000000"; -- -Inf
Y <= "01000101100101100111100101001100"; -- 4815.162342
expectedNaN <= '0';
expectedZero <= '0';
wait for clock_period;
X <= "01000101100101100111100101001100"; -- 4815.162342
Y <= "01000101100101100111100101001100"; -- 4815.162342
expectedNaN <= '0';
expectedZero <= '0';
wait for clock_period;
X <= "01000101100101100111100101001100"; -- 4815.162342
Y <= "01111101001101101011100011111101"; -- 1.518e+37
expectedNaN <= '0';
expectedZero <= '0';
wait for clock_period;
X <= "01000101100101100111100101001100"; -- 4815.162342
Y <= "11000101100101100111100101001100"; -- -4815.162342
expectedNaN <= '0';
expectedZero <= '1';
wait for clock_period;
X <= "11000101100101100111100101001100"; -- -4815.162342
Y <= "01000101100101100111100101001100"; -- 4815.162342
expectedNaN <= '0';
expectedZero <= '1';
wait for clock_period;
X <= "01111101001101101011100011111101"; -- 1.518e+37
Y <= "11000101100101100111100101001100"; -- -4815.162342
expectedNaN <= '0';
expectedZero <= '0';
wait for clock_period;
X <= "11000101100101100111100101001100"; -- -4815.162342
Y <= "11000101100101100111100101001100"; -- -4815.162342
expectedNaN <= '0';
expectedZero <= '0';
wait for clock_period;
X <= "11000101100101100111100101001100"; -- -4815.162342
Y <= "11111101001101101011100011111101"; -- -1.518e+37
expectedNaN <= '0';
expectedZero <= '0';
wait for clock_period;
X <= "01000101100101100111100101001100"; -- 4815.162342
Y <= "01111101001101101011100011111101"; -- 1.518e+37
expectedNaN <= '0';
expectedZero <= '0';
wait for clock_period;
X <= "00000000000000000000000000000000"; -- 0
Y <= "00000000000000000000000000000000"; -- 0
expectedNaN <= '0';
expectedZero <= '0';
wait for clock_period;
X <= "00000000000000000000000000000000"; -- +0
Y <= "10000000000000000000000000000000"; -- -0
expectedNaN <= '0';
expectedZero <= '1';
wait for clock_period;
X <= "00000000000000000000000000000000"; -- 0
Y <= "01000101100101100111100101001100"; -- 4815.162342
expectedNaN <= '0';
expectedZero <= '0';
wait for clock_period;
end process;
error <= (expectedNaN xor isNaN) or (expectedZero xor isZero);
END;