36 lines
1.0 KiB
VHDL
Executable File
36 lines
1.0 KiB
VHDL
Executable File
library ieee;
|
|
use ieee.std_logic_1164.all;
|
|
use ieee.numeric_std.all;
|
|
|
|
entity add_sub is
|
|
port(
|
|
a : in std_logic_vector(31 downto 0);
|
|
b : in std_logic_vector(31 downto 0);
|
|
sub_mode : in std_logic;
|
|
carry : out std_logic;
|
|
zero : out std_logic;
|
|
r : out std_logic_vector(31 downto 0)
|
|
);
|
|
end add_sub;
|
|
|
|
architecture synth of add_sub is
|
|
|
|
signal bsub : std_logic_vector(31 downto 0);
|
|
signal temp : unsigned(32 downto 0);
|
|
signal addout : std_logic_vector(32 downto 0);
|
|
signal tempr : std_logic_vector(31 downto 0);
|
|
signal subvec : std_logic_vector(31 downto 0);
|
|
|
|
begin
|
|
subvec <= ((31 downto 1 => '0') & sub_mode);
|
|
bsub <= b xor (31 downto 0 => sub_mode);
|
|
temp <= unsigned('0' & a) + unsigned('0' & bsub)+ unsigned('0' & subvec);
|
|
addout <= std_logic_vector(temp);
|
|
tempr <= addout(31 downto 0);
|
|
|
|
carry <= addout(32);
|
|
zero <= '1' when unsigned(tempr) = 0 else '0';
|
|
r <= tempr;
|
|
|
|
end synth;
|