Files
IEEE754Adder/AddSub.vhd

59 lines
1.0 KiB
VHDL
Raw Permalink Normal View History

2019-08-28 21:50:05 +02:00
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
entity AddSub is
2019-08-29 18:08:25 +02:00
generic(
BITCOUNT : integer := 8
);
2019-08-28 21:50:05 +02:00
port(
2019-08-29 18:08:25 +02:00
X, Y : in std_logic_vector((BITCOUNT-1) downto 0);
IS_SUB : in std_logic := '0';
RESULT : out std_logic_vector((BITCOUNT-1) downto 0);
OVERFLOW : out std_logic
2019-08-28 21:50:05 +02:00
);
2019-08-29 18:08:25 +02:00
2019-08-28 21:50:05 +02:00
end AddSub;
architecture AddSubArch of AddSub is
2019-08-29 18:08:25 +02:00
component Adder is
2019-08-29 18:08:25 +02:00
generic(
BITCOUNT : integer := 8
);
port(
2019-08-29 18:08:25 +02:00
X, Y : in std_logic_vector((BITCOUNT-1) downto 0);
CARRY_IN : in std_logic;
RESULT : out std_logic_vector((BITCOUNT-1) downto 0);
CARRY_OUT : out std_logic
);
2019-08-29 18:08:25 +02:00
end component;
2019-08-29 18:08:25 +02:00
signal Y2 : std_logic_vector((BITCOUNT-1) downto 0);
signal C_OUT : std_logic;
2019-08-28 21:50:05 +02:00
begin
2019-08-29 18:08:25 +02:00
Y2_PROCESS : process(Y, IS_SUB)
begin
2019-08-29 18:08:25 +02:00
for i in Y2'range loop
2019-08-29 18:08:25 +02:00
Y2(i) <= Y(i) xor IS_SUB;
end loop;
2019-08-29 18:08:25 +02:00
end process;
2019-08-28 21:50:05 +02:00
2019-08-29 18:08:25 +02:00
ADD : Adder
generic map (BITCOUNT => BITCOUNT)
port map (X => X, Y => Y2, CARRY_IN => IS_SUB, RESULT => RESULT, CARRY_OUT => C_OUT);
2019-08-28 21:50:05 +02:00
2019-08-29 18:08:25 +02:00
OVERFLOW <= ((not IS_SUB) and C_OUT) or (IS_SUB and (not C_OUT));
end AddSubArch;