adder5f.vhd
--
-- full adder
--
library ieee;
use ieee.std_logic_1164.all;
entity fa is
port( a : in std_logic;
b : in std_logic;
ci : in std_logic;
co : out std_logic;
s : out std_logic);
end fa;
architecture rtl of fa is
begin
co <= (a and b) or ( (a or b) and ci);
s <= a xor b xor ci;
end rtl;
--
-- 5-bit adder (use for-generate loop)
--
library ieee;
use ieee.std_logic_1164.all;
entity adder5f is
port( a : in std_logic_vector(4 downto 0);
b : in std_logic_vector(4 downto 0);
ci : in std_logic;
co : out std_logic;
s : out std_logic_vector(4 downto 0) );
end adder5f;
architecture rtl of adder5f is
component fa
port( a : in std_logic;
b : in std_logic;
ci : in std_logic;
co : out std_logic;
s : out std_logic);
end component;
signal interCarry : std_logic_vector(4 downto 1);
begin
mod4 : fa port map(
a => a(4),
b => b(4),
ci => interCarry(4),
co => co,
s => s(4) );
gen : for j in 3 downto 1 generate
mod1 : fa port map(
a => a(j),
b => b(j),
ci => interCarry(j),
co => interCarry(j+1),
s => s(j) );
end generate;
mod0 : fa port map(
a => a(0),
b => b(0),
ci => ci,
co => interCarry(1),
s => s(0) );
end rtl;