Anda di halaman 1dari 12

LAPORAN PRAKTIKUM

PERANCANGAN SISTEM DIGITAL LANJUT

PERCOBAAN : P4-ADDER
KELOMPOK :I
NAMA ANGGOTA :
1. MARTIN (525070028)
TGL PERCOBAAN : 2 NOVEMBER 2010
NAMA ASISTEN : ANDRIAN S.P.

TGL KUMPUL :
__ __ __
1 2 3
NILAI AKHIR :

LABORATORIUM DIGITAL
JURUSAN TEKNIK ELEKTRO
FAKULTAS TEKNIK
UNIVERSITAS TARUMANAGARA
PERCOBAAN 4
ADDER

A. Teori Percobaan

Rangkaian adder atau penjumlah adalah rangkaian elektronik digital yang


digunakan untuk menjumlahkan dua atau lebih bilangan [1]. Dalam komputer dan
mikroprosesor, penjumlahan dilakukan dengan menggunakan bilangan biner
(binary number), dan biasanya merupakan bagian dari Arithmetic Logic Unit
(ALU). Proses menjumlahkan dua buah bilangan dilakukan dengan cara
menjumlahkan tiap bit pada kedua bilangan tersebut. Khusus untuk bilangan
negatif dapat dilakukan dengan format 2’s complement atau 1’s complement.
Untuk menjumlahkan dua bit bilangan biner dilakukan dengan
menggunakan rangkaian half adder. Pada rangkaian ini, carry yang digunakan
adalah carry out yang merupakan sisa hasil penjumlahan. Rangkaian half adder
didapatkan dari persamaan penjumlahan dua bit bilangan biner, yaitu sum = + dan
carry (c) = xy, dimana sum merupakan hasil jumlah, sedangkan x dan y adalah
input bit yang akan dijumlahkan. Persamaan tersebut didapatkan dari truth table
yang tertera pada Tabel 1.

Tabel 1. Truth Table Half Adder

Bila ada lebih dari satu bit yang akan dijumlahkan, maka dilakukan
dengan menggunakan rangkaian full adder. Pada rangkaian ini ada penggunaan bit
carry in yang merupakan carry out dari penjumlahan pada bit sebelumnya, seperti
yang terlihat pada persamaan berikut dan tabel 2.

Tabel 2. Truth Table Full Adder


Untuk melaksanakan penjumlahan dua buah bilangan biner n bit, maka
dapat dilakukan dengan menyusun n rangkaian full adder secara parallel. Carry-
out yang dihasilkan dari tiap rangkaian full adder akan menjadi carry-in bagi
rangkaian full adder selanjutnya, rangkaian ini disebut dengan rangkaian ripple
carry adder. Untuk kebutuhan proses penjumlahan yang lebih cepat rangkaian
ripple carry adder dapat digantikan dengan menggunakan rangkaian carry
lookahead adder.
B. HASIL PERCOBAAN

1. Rangkaian Half Adder

Source Code VHDL:


library ieee;
use ieee.std_logic_1164.all;

entity half_adder is
port(
x,y: in std_logic;
sum,c: out std_logic
);
end half_adder;

architecture half_adder_arch of half_adder is


begin
process (x,y)

begin
sum<=x XOR y;
c<=x AND y;
end process;
end half_adder_arch;

Timing Diagram:

2. Rangkaian Full Adder

Source Code VHDL :


library ieee;
use ieee.std_logic_1164.all;
entity full_adder is
port(
x,y,ci: in std_logic;
sum,co: out std_logic
);
end full_adder;

architecture full_adder_arch of full_adder is


begin
process (x,y)

begin
sum<=x XOR y XOR ci;
co<=(x AND ci) OR (x AND Y) OR (y AND ci);
end process;
end full_adder_arch;

Timing Diagram:

Tabel Hasil Tampilan LED


INPUT OUTPUT
Ci X Y Sum C0
1 1 1 1 1
1 1 0 0 1
1 0 1 0 1
1 0 0 1 0
0 1 1 0 1
0 1 0 1 0
0 0 1 1 0
0 0 0 0 0

3. Rangkaian Ripple Carry Adder 4 bit

Source Code VHDL :


library ieee;
use ieee.std_logic_1164.all;

entity ripcarry_adder is
port(
A0,A1,A2,A3,cin: in std_logic;
B0,B1,B2,B3: in std_logic;
c1,c2,c3,c4: buffer std_logic;
sum0,sum1,sum2,sum3: out std_logic
);
end ripcarry_adder;

architecture ripcarry_adder_arch of ripcarry_adder is


begin
process (A0,A1,A2,A3,cin,B0,B1,B2,B3)

begin
sum3<=A3 XOR B3 XOR c3;
c4<=(A3 AND c3) OR (A3 AND B3) OR (B3 AND c3);
sum2<=A2 XOR B2 XOR c2;
c3<=(A2 AND c2) OR (A2 AND B2) OR (B2 AND c2);
sum1<=A1 XOR B1 XOR c1;
c2<=(A1 AND c1) OR (A1 AND B1) OR (B1 AND c1);
sum0<=A0 XOR B0 XOR cin;
c1<=(A0 AND cin) OR (A0 AND B0) OR (B0 AND cin);
end process;
end ripcarry_adder_arch;

Timing Diagram:
Tabel Hasil Tampilan LED:
C
Input A Input B Output Carry Out
0
b b b b sum sum sum sum
a3 a2 a1 a0 c1 c2 c3 c4
3 2 1 0 3 2 1 0
0 0 0 1 1 1 1 0 0 1 1 1 1 0 0 0 0
0 0 1 0 1 1 0 1 0 1 1 1 1 0 0 0 0
0 1 0 1 1 0 1 0 0 1 1 1 1 0 0 0 0
0 1 1 0 1 0 0 1 0 1 1 1 1 0 0 0 0
1 0 0 1 0 1 1 0 0 1 1 1 1 0 0 0 0
1 0 1 0 0 1 0 1 0 1 1 1 1 0 0 0 0
1 1 0 1 0 0 1 0 0 1 1 1 1 0 0 0 0
1 1 1 1 1 1 1 1 0 1 1 1 0 1 1 1 1

C. TUGAS
1. Rangkaian Ripple Carry Adder 8 bit

Source Code VHDL:


library ieee;
use ieee.std_logic_1164.all;

entity adder8bit is
port(
a0,a1,a2,a3,a4,a5,a6,a7,b0,b1,b2,b3,b4,b5,b6,b7,c0
: in std_logic;
sum0,sum1,sum2,sum3,sum4,sum5,sum6,sum7,c8 : out
std_logic;
c1,c2,c3,c4,c5,c6,c7 : buffer
std_logic
);
end adder8bit;

architecture adder8bit_arch of adder8bit is


begin
process(a0,a1,a2,a3,a4,a5,a6,a7,b0,b1,b2,b3,b4,b5,b6,b7,c0,c
1,c2,c3,c4,c5,c6,c7)
begin
sum7<=a7 xor b7 xor c7;
c8<=(a7 and c7) or (a7 and b7) or (b7 and c7);

sum6<=a6 xor b6 xor c6;


c7<=(a6 and c6) or (a6 and b6) or (b6 and c6);

sum5<=a5 xor b5 xor c5;


c6<=(a5 and c5) or (a5 and b5) or (b5 and c5);

sum4<=a4 xor b4 xor c4;


c5<=(a4 and c4) or (a4 and b4) or (b4 and c4);
sum3<=a3 xor b3 xor c3;
c4<=(a3 and c3) or (a3 and b3) or (b3 and c3);

sum2<=a2 xor b2 xor c2;


c3<=(a2 and c2) or (a2 and b2) or (b2 and c2);

sum1<=a1 xor b1 xor c1;


c2<=(a1 and c1) or (a1 and b1) or (b1 and c1);

sum0<=a0 xor b0 xor c0;


c1<=(a0 and c0) or (a0 and b0) or (b0 and c0);
end process;
end adder8bit_arch;

Timing Diagram:

2. Rangkaian Ripple Carry Adder 2 bit


Sum0
a0 Sum1
a1
b0
b1
cin

Carry
out

3. Rangkaian Carry Lookahead Adder n bit

Source Code VHDL :


c:buffer std_logic_vector(1 to
library ieee; 4);
use ieee.std_logic_1164.all; s,pi,gi:buffer
entity rcan is std_logic_vector(0 to 3));
port( end rcan;
c0:in std_logic; architecture rcan_arch of rcan
a,b:in std_logic_vector(0 to is
3); begin
process(a,b,c0)
begin end if;
pi(0)<=a(0) or b(0); if (a(1)='0') then
gi(0)<=a(0) and b(0); s(2)<=b(1) xor c(1);
c(1) <=gi(0) or (pi(0) elsif (a(1)='1') then
and c0); s(2)<=not(b(1) xor
pi(1)<=a(1) or b(1); c(1));
gi(1)<=a(1) and b(1); end if;
c(2) <=gi(1) or (pi(1) and if (a(2)='0') then
c(1)); s(1)<=b(2) xor c(1);
pi(2)<=a(2) or b(2); elsif (a(2)='1') then
gi(2)<=a(2) and b(2); s(1)<=not(b(2) xor
c(3) <=gi(2) or (pi(2) and c(2));
c(2)); end if;
pi(3)<=a(3) or b(3); if (a(3)='0') then
gi(3)<=a(3) and b(3); s(0)<=b(3) xor c(1);
c(4) <=gi(3) or (pi(3) and elsif (a(3)='1') then
c(3)); s(0)<=not(b(3) xor
if (a(0)='0') then c(3));
s(3)<=b(0) xor c0; end if;
elsif (a(0)='1') then end process;
s(3)<=not(b(0) xor c0); end rcan_arch;

Timing Diagram:

4. Carry Lookahead 2 bit menggunakan gerbang logika dasar


5. Rangkaian Half Subtractor

Source Code VHDL :


library ieee;
use ieee.std_logic_1164.all;

entity halfsubtractor is
port(
x,y : in std_logic;
d,b : out std_logic
);
end halfsubtractor;

architecture halfsubtractor_arch of halfsubtractor is


begin
process(x,y)
begin
d<=x xor y;
b<=(not x) and y;
end process;
end halfsubtractor_arch;

Timing Diagram:
Rangkaian Full Subtractor

Source Code VHDL :


library ieee;
use ieee.std_logic_1164.all;

entity fullsubtractor is
port(
x,y,z : in std_logic;
a,c : buffer std_logic;
d,b : out std_logic
);
end fullsubtractor;

architecture fullsubtractor_arch of fullsubtractor is


begin
process(x,y,z)
begin
d<=x xor y xor z;
a<=((not x)and y);
c<=(not(x xor y));
b<=(z and c) or a;
end process;
end fullsubtractor_arch;

Timing Diagram:
D. KESIMPULAN

1. Sebuah Ripple Carry Adder n bit terdiri dari n buah Full Adder.
2. Untuk pemrograman Rangkaian Ripple Carry Adder 4 bit atau n bit maka
pemrograman dimulai dari arah carry out (Cout) menuju carry in (Cin) atau
dari sum ke n ke sum 0, seperti pada contoh rangkaian Ripple Carry 4 bit,
pemrograman dimulai dari C4 yang dihubungkan ke Cout dan sum 3 menuju
ke C1 dan sum 0. Jika pemrograman tidak sesuai dengan urutan seperti itu
maka hasil yang diperoleh akan tidak valid alias hasil perhitungan akan salah.
3. Jika nilai variabel yang digunakan ingin ditampilkan maka digunakan tipe
buffer, dan jika apabila nilai variabel tidak ingin ditampilkan bisa
menggunakan signal. Pada percobaan Ripple Carry Adder 4 bit menggunakan
tipe buffer karena nilai variabelnya ingin ditampilkan ( C1,C2,C3,dan C4).

Anda mungkin juga menyukai