41 lines
895 B
VHDL
41 lines
895 B
VHDL
|
|
library IEEE;
|
||
|
|
use IEEE.STD_LOGIC_1164.ALL;
|
||
|
|
|
||
|
|
|
||
|
|
entity ZeroCheck is
|
||
|
|
port(
|
||
|
|
X, Y: in std_logic_vector(31 downto 0);
|
||
|
|
isZero: out std_logic
|
||
|
|
);
|
||
|
|
end ZeroCheck;
|
||
|
|
|
||
|
|
architecture ZeroCheckArch of ZeroCheck is
|
||
|
|
component EqualCheck is
|
||
|
|
generic( BITCOUNT: integer := 8 );
|
||
|
|
port(
|
||
|
|
X, Y: in std_logic_vector( (BITCOUNT-1) downto 0 );
|
||
|
|
isEqual: out std_logic
|
||
|
|
);
|
||
|
|
end component;
|
||
|
|
|
||
|
|
signal xSign: std_logic;
|
||
|
|
signal ySign: std_logic;
|
||
|
|
signal xAbs: std_logic_vector(30 downto 0);
|
||
|
|
signal yAbs: std_logic_vector(30 downto 0);
|
||
|
|
signal isSameAbsValue: std_logic;
|
||
|
|
signal isSameSign: std_logic;
|
||
|
|
begin
|
||
|
|
xSign <= X(31);
|
||
|
|
ySign <= Y(31);
|
||
|
|
xAbs <= X(30 downto 0);
|
||
|
|
yAbs <= Y(30 downto 0);
|
||
|
|
|
||
|
|
isSameSign <= xSign xnor ySign;
|
||
|
|
AbsCheck: EqualCheck
|
||
|
|
generic map ( BITCOUNT => 31 )
|
||
|
|
port map (X => xAbs, Y => yAbs, isEqual => isSameAbsValue);
|
||
|
|
|
||
|
|
isZero <= (not isSameSign) and isSameAbsValue;
|
||
|
|
end ZeroCheckArch;
|
||
|
|
|