2019-08-24 14:39:01 +02:00
|
|
|
library IEEE;
|
|
|
|
|
use IEEE.STD_LOGIC_1164.ALL;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
entity ZeroCheck is
|
2019-08-29 15:12:25 +02:00
|
|
|
|
2019-08-24 14:39:01 +02:00
|
|
|
port(
|
2019-08-29 15:12:25 +02:00
|
|
|
X, Y : in std_logic_vector(31 downto 0);
|
|
|
|
|
IS_ZERO : out std_logic
|
2019-08-24 14:39:01 +02:00
|
|
|
);
|
2019-08-29 15:12:25 +02:00
|
|
|
|
2019-08-24 14:39:01 +02:00
|
|
|
end ZeroCheck;
|
|
|
|
|
|
|
|
|
|
architecture ZeroCheckArch of ZeroCheck is
|
2019-08-29 15:12:25 +02:00
|
|
|
|
2019-08-24 14:39:01 +02:00
|
|
|
component EqualCheck is
|
2019-08-29 15:12:25 +02:00
|
|
|
|
|
|
|
|
generic(
|
|
|
|
|
BITCOUNT : integer := 8
|
|
|
|
|
);
|
|
|
|
|
|
2019-08-24 14:39:01 +02:00
|
|
|
port(
|
2019-08-29 15:12:25 +02:00
|
|
|
X, Y : in std_logic_vector((BITCOUNT-1) downto 0);
|
|
|
|
|
IS_EQUAL : out std_logic
|
2019-08-24 14:39:01 +02:00
|
|
|
);
|
2019-08-29 15:12:25 +02:00
|
|
|
|
2019-08-24 14:39:01 +02:00
|
|
|
end component;
|
|
|
|
|
|
2019-08-29 15:12:25 +02:00
|
|
|
signal S_SIGN : std_logic;
|
|
|
|
|
signal Y_SIGN : std_logic;
|
|
|
|
|
signal X_ABS : std_logic_vector(30 downto 0);
|
|
|
|
|
signal Y_ABS : std_logic_vector(30 downto 0);
|
|
|
|
|
signal IS_SAME_ABS_VALUE : std_logic;
|
|
|
|
|
signal IS_SAME_SIGN : std_logic;
|
|
|
|
|
|
2019-08-24 14:39:01 +02:00
|
|
|
begin
|
|
|
|
|
|
2019-08-29 15:12:25 +02:00
|
|
|
S_SIGN <= X(31);
|
|
|
|
|
Y_SIGN <= Y(31);
|
|
|
|
|
X_ABS <= X(30 downto 0);
|
|
|
|
|
Y_ABS <= Y(30 downto 0);
|
|
|
|
|
|
|
|
|
|
IS_SAME_SIGN <= S_SIGN xnor Y_SIGN;
|
|
|
|
|
|
2019-08-29 18:08:25 +02:00
|
|
|
ABS_CHECK : EqualCheck
|
2019-08-24 14:39:01 +02:00
|
|
|
generic map ( BITCOUNT => 31 )
|
2019-08-29 15:12:25 +02:00
|
|
|
port map (X => X_ABS, Y => Y_ABS, IS_EQUAL => IS_SAME_ABS_VALUE);
|
|
|
|
|
|
|
|
|
|
IS_ZERO <= (not IS_SAME_SIGN) and IS_SAME_ABS_VALUE;
|
2019-08-24 14:39:01 +02:00
|
|
|
|
|
|
|
|
end ZeroCheckArch;
|
|
|
|
|
|