Home > VHDL > Arithmetic Circuits > Full adder
Full Adder 1) Full Adder using Concurrent Signal Assignments :
library IEEE;
use IEEE.std_logic_1164.all;

entity adder is
      port (a : in std_logic;
               b : in std_logic;
               cin : in std_logic;
               sum : out std_logic;
               cout : out std_logic);
end adder;

architecture rtl of adder is
begin
       sum <= (a xor b) xor cin;
       cout <= (a and b) or (cin and a) or (cin and b);
end rtl;

2) Full Adder using Component Instantiation Statements :
library IEEE;
use IEEE.std_logic_1164.all;
use work.gates.all;
entity adder is
      port (a : in std_logic;
               b : in std_logic;
               cin : in std_logic;
               sum : out std_logic;
               cout : out std_logic);
end adder;

architecture structural of adder is
signal xor1_out, and1_out, and2_out, or1_out : std_logic;
 begin
     xor1:   xorg port map(in1 => a, in2 => b, out1 => xor1_out);
     xor2:   xorg port map(in1 => xor1_out, in2 => cin, out1 => sum);
     and1: andg port map(in1 => a, in2 => b, out1 => and1_out); 
     or1:       org port map(in1 => a, in2 => b, out1 => or1_out);
     and2: andg port map(in1 => cin, in2 => or1_out, out1 => and2_out);
     or2:       org port map(in1 => and1_out, in2 => and2_out, out1 => cout);
end structural;
3) VHDL Code for "Full Adder" declaring "Half Adder" as Component : (a)Half Adder (b) OR Gate (c) Full Adder using Half Adder
library IEEE;
	use IEEE.std_logic_1164.all;

	entity FA is
		port	(X,Y,CIN : in std_logic 
			SUM, COUT: out std_logic);
	end FA;
           architecture structural of FA is
	component HA is
		port	(A,B : in std_logic;
			S,C : out std_logic););
	end component;
	component OR2 is
		port	(P,Q : in std_logic;
			R : out std_logic););
	end component;

	signal TEMP1, TEMP2, TEMP3:std_logic;
	begin
	        HA1 : HA port map (A=>X, B=>Y, S=>TEMP2, C=>TEMP1);
	        HA2 : HA port map (A=>TEMP2, B=>CIN, S=>SUM, C=>TEMP3);
                   OR1 : OR2 port map (P=>TEMP1, Q=>TEMP3, R=>COUT);
	end structural;