0% found this document useful (0 votes)
50 views

Experiment: 1: Name: Retaish Raman Enrol. No.: 15534013 Sub: Simulation Lab 1 Class: M.Tech (Mev)

1. The document describes the implementation of half adders and full adders using logic gates. A half adder can add two single bits and produces a sum and carry output. A full adder can add three bits including an input carry and produces a sum and output carry. 2. Half adders are implemented using an XOR gate for the sum and an AND gate for the carry. Full adders are implemented by using two half adders - one to generate a partial sum and another to generate the final sum by adding the input carry to the partial sum. The output carry is generated by an OR function of the half adder carry outputs. 3. VHDL code is provided to model half adders

Uploaded by

mtnlbb777
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
50 views

Experiment: 1: Name: Retaish Raman Enrol. No.: 15534013 Sub: Simulation Lab 1 Class: M.Tech (Mev)

1. The document describes the implementation of half adders and full adders using logic gates. A half adder can add two single bits and produces a sum and carry output. A full adder can add three bits including an input carry and produces a sum and output carry. 2. Half adders are implemented using an XOR gate for the sum and an AND gate for the carry. Full adders are implemented by using two half adders - one to generate a partial sum and another to generate the final sum by adding the input carry to the partial sum. The output carry is generated by an OR function of the half adder carry outputs. 3. VHDL code is provided to model half adders

Uploaded by

mtnlbb777
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 6

Experiment: 1

Name: Retaish Raman


Enrol. No.: 15534013
Sub: Simulation Lab 1
Class: M.Tech(MeV)

Half Adder
With the help of half adder, we can design circuits that are capable of performing simple addition with the
help of logic gates.
Let us first take a look at the addition of single bits.
0+0 = 0
0+1 = 1
1+0 = 1
1+1 = 10
These are the least possible single-bit combinations. But the result for 1+1 is 10. Though this problem can
be solved with the help of an EXOR Gate, if you do care about the output, the sum result must be re-
written as a 2-bit output.
Thus the above equations can be written as
0+0 = 00
0+1 = 01
1+0 = 01
1+1 = 10
Here the output ‘1’of ‘10’ becomes the carry-out. The result is shown in a truth-table below. ‘SUM’ is the
normal output and ‘CARRY’ is the carry-out.
INPUTS OUTPUTS
A B SUM CARRY
0 0 0 0
0 1 1 0
1 0 1 0
1 1 0 1
From the equation it is clear that this 1-bit adder can be easily implemented with the help of EXOR Gate
for the output ‘SUM’ and an AND Gate for the carry. Take a look at the implementation below.
Half Adder Circuit
For complex addition, there may be cases when you have to add two 8-bit bytes together. This can be done
only with the help of full-adder logic.

Program:-
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;
entity half_adder is
port(a,b:in std_logic;
sum:out std_logic;
carry:out std_logic);
end half_adder;
architecture data_flow of half_adder is
begin
sum<=a xor b;
carry<=a and b;
end data_flow;
architecture behavioral of half_adder is
begin
process(a,b)
begin
if a=b
then sum<='0';
else sum<='1';
end if;
if a='1' and b='1'
then carry<='1';
else carry<='0';
end if;
end process;
end behavioral;
Full Adder
This type of adder is a little more difficult to implement than a half-adder. The main difference between a
half-adder and a full-adder is that the full-adder has three inputs and two outputs. The first two inputs are
A and B and the third input is an input carry designated as CIN. When a full adder logic is designed we
will be able to string eight of them together to create a byte-wide adder and cascade the carry bit from one
adder to the next.
The output carry is designated as COUT and the normal output is designated as S. Take a look at the truth-
table.
INPUTS OUTPUTS
A B CIN COUT S
0 0 0 0 0
0 0 1 0 1
0 1 0 0 1
0 1 1 1 0
1 0 0 0 1
1 0 1 1 0
1 1 0 1 0
1 1 1 1 1
From the above truth-table, the full adder logic can be implemented. We can see that the output S is an
EXOR between the input A and the half-adder SUM output with B and CIN inputs. We must also note that
the COUT will only be true if any of the two inputs out of the three are HIGH.
Thus, we can implement a full adder circuit with the help of two half adder circuits. The first will half
adder will be used to add A and B to produce a partial Sum. The second half adder logic can be used to add
CIN to the Sum produced by the first half adder to get the final S output. If any of the half adder logic
produces a carry, there will be an output carry. Thus, COUT will be an OR function of the half-adder
Carry outputs. Take a look at the implementation of the full adder circuit shown below.

Full Adder Circuit


Though the implementation of larger logic diagrams is possible with the above full adder logic a simpler
symbol is mostly used to represent the operation. Given below is a simpler schematic representation of a
one-bit full adder.
Single-bit Full Adder

Program:-

library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_arith.all;

Entity full_adder is

port(a,b,c:in BIT ; sum,cout: out BIT);

end full_adder;

architecture structure of full_adder is

component XOR2

port(x,y:in BIT; z: out BIT);

end component;

component AND2

port(p, q: in BIT; r:out BIT);

end component;

component OR2

port(d,e:in BIT;f:out BIT);

end component;

signal s1,s2,s3,s4, s5: BIT;

BEGIN

X1:XOR2 PORT MAP(a,b,s1);


X2:XOR2 PORT MAP(s1,c,sum);

A1: AND2 PORT MAP (a,b,s3) ;

A2: AND2 port map(s1,c,s4);

O1: or2 port map (s1,s4,cout);

end structure;

architecture behavioral of full_adder is

begin

process(a,b,c)

begin

if(a='1' and b='1' and c='1')

then sum<='1' ; cout<='1';

elsif((a='1' and b='1' and c='0')or (a='1' and b='0' and c='1')or (a='0' and b='1' and
c='1'))

then sum<='0'; cout<='1';

elsif((a='1' and b='0' and c='0')or (a='0' and b='0' and c='1')or (a='0' and b='1' and
c='0'))

then sum<='1'; cout<='0';

elsif(a='0' and b='0' and c='0')

then sum<='0';cout<='0';

end if;

end process;

end behavioral;

You might also like