Anda di halaman 1dari 14

LAPORAN TUGAS PRAKTIKUM

PERANCANGAN SISTEM DIGITAL


(TEE217P)

Nama

: Ade Pratama S. K_12/333582/TK/39930


Mohamad Faiz H_ 12/333528/TK/39878
Bima Yudha P_ 12/
Unit
: Floating Point Unit
Judul unit
: Mendesain FPU untuk Mengerjakan
Menggunakan Bahasa Pemrograman Verilog HDL
Tgl. Praktikum : 2 Januari 2015

LABORATORIUM SISTEM DIGITAL


JURUSAN TEKNIK ELEKTRO & TEKNOLOGI INFORMASI
FAKULTAS TEKNIK UNIVERSITAS GADJAH MADA
YOGYAKARTA
2015

Abstrak
Manusia pada umumnya menggunakan sistem angka desimal (basis 10)
untuk menghitung dan melakukan pengukuran. Karena memori computer
terbatas, manusia tidak dapat menyimpan angka dengan presisi yang tak
terbatas (infinite precision), mengesampingkan menggunakan angka biner
atau desimal pada titik tertentu akan terpotong. Untuk memuaskan
kebutuhan desainer chip, format angka harus memberikan akurasi untuk
nilai pada besaran yang sangat berbeda. Namun, hanya akurasi relatif
yang dibutuhkan. Dan, solusinya adalah sebuah format dengan floating
point.

Pendahuluan
Sebuah angka floating-point (atau bilangan real) dapat mewakili nilai yang
sangat besar (1,23 x 10^88) atau sangat kecil (1,23 x 10^ -88). Hal ini
juga dapat mewakili jumlah nilai negatif yang sangat besar (-1,23 x

10^88) dan sangat kecil (-1,23 x 10^ -88) yang mendekati nol.
Sebuah angka floating-point biasanya dinyatakan dalam notasi ilmiah,
dangan fraction (F) dan exponent(E) dari radix tertentu (r), dalam bentuk
F x r ^ E. Desimal menggunakan angka radix dari 10 (F x 10 ^ E)
sementara angka biner menggunakan radix dari 2 (F x 2 ^ E)
Representasi floating point sama halnya seperti bilangan real. Sebagai
contoh, bilangan 55,66 dapat direpresentasikan sebagai 5,566 10 ^ 1
atau 0,5566 10 ^ 2 atau 0,05566 10 ^ 3, dan seterusnya. Bagian
pecahan dapat dinormalisasi. Dalam bentuk normalisasi, hanya ada angka
bukan nol tunggal sebelum titik radix. Sebagai contoh, bilangan desimal
123.4567 dapat dinormalisasi sebagai 1.234567 10 ^ 2; bilangan biner
1010.1011B dapat dinormalisasi sebagai 1.0101011B 2 ^ 3.
Dalam komputer, angka floating-point diwakili dalam notasi ilmiah fraction
(F) dan exponent (E) dengan radix dari 2, dalam bentuk F 2 ^ E. Kedua
E dan F dapat positif maupun negatif. Komputer modern mengadopsi
satandar IEEE 754 untuk mewakili angka floating-point. Ada dua skema

representasi: single precision 32-bit dan double precision 64-bit presisi


ganda.
IEEE-754 32-bit Single_Precision Floating-Ponit Numbers
Pada representasi 32-bit single-precision floating-point:
MSB adalah sign bit (S), dengan angka 0 untuk positif dan 1 untuk
negatif.
Lalu 8 bit berikutnya merupakan exponent (E)
Dan, sisa 23 bit mewakili fraction (F)

I. Bentuk Normalisasi
Anggaplah lustrasi dengan sebuah contoh pola 32 bit adalah 1 1000
0001 011 0000 0000 0000 0000 0000, dengan:
S=1
E = 1000 0001
F = 011 0000 0000 0000 0000 0000
Dalam bentuk normal, fraksi sebenarnya dinormalisasikan dengan sebuah
leading implisit 1 menjadi bentuk 1,(F). Dalam contoh ini, fraksi
sebenarnya 1,011 0000 0000 0000 0000 0000 = 1 + 1 2 ^ -2 + 1 2 ^
-3 = 1.375D. Sign bit merupakan tanda nomor, dengan S = 0 untuk positif
dan S = 1 untuk negatif. Dalam contoh ini dengan S = 1, ini adalah angka
negatif, yaitu, -1.375D. Dalam bentuk normal, eksponen sebenarnya E127 (yang disebut bias-127). Hal ini karena kita perlukan untuk mewakili
eksponen positif dan negatif. Dengan 8-bit E, mulai dari 0 sampai 255,
skema bias-127 dapat memberikan eksponen sebenarnya dari -127
sampai 128. Dalam contoh ini, E-127 = 129-127 = 2D. Oleh karena itu,
bilangan desimal yang diwakili adalah -1,375 2 ^ 2 = -5.5D.
II. Bentuk De-Normalisasi
Bentuk normalisasi memiliki masalah serius, dengan leading implisit 1
untuk fraksi, tidak mampu memunculkan nilai 0. Bentuk de-normalisasi
telah dibuat untuk mewakili nol dan nilai lainnya.
Untuk E = 0, angka angka tersebut di dalam area bentuk de-normalisasi.
Sebuah leading implisit nol digunakan untuk pecahan dan eksponen
sebenarnya selalu -126. Oleh karena itu, angka nol dapat
direpresentasikan dengan E = 0 dan F = 0 (karena 0,0 x 2 ^ -126 = 0).

Kita juga mampu memunculka angka positif dan negatif sangat kecil
dalam bentuk de-normalisasi dengan E= 0. Sebagai contoh, jika S = 1, E
= 0 dan F = 011 0000 0000 0000 0000 0000. Fraksi sebenarnya 0,011 =
1 2 ^ -2 + 1 2 ^ -3 = 0.375D. Karena S = 1, itu adalah angka negatif.
Dengan E = 0, eksponen sebenarnya -126. Oleh karena itu jumlahnya
-0,375 2 ^ -126 = -4,4 10 ^ -39, merupakan angka negatif yang
sangat kecil (mendekati nol).

III. Summary
Singkatnya, nilai (N) dihitung sebagai berikut:
Untuk 1 E 254, N = (-1) ^ S 1.F 2 ^ (E-127). Angka-angka ini
berada di area yang disebut bentuk normalisasi. Sign-bit merupakan
tanda nomor. Bagian pecahan (1.F) yang dinormalisasi dengan leading
implisit 1. Eksponen adalah bias dari 127, sehingga untuk mewakili
eksponen positif dan negatif. Jangkauan eksponen adalah -126 sampai
127.
Untuk E = 0, N = (-1) ^ S 0.F 2 ^ (- 126). Angka-angka ini berada
di area yang disebut bentuk de-normalisasi. Eksponen dari 2 ^ -126
mengevaluasi ke jumlah yang sangat kecil. Bentuk de-normalisasi
diperlukan untuk mewakili nol (dengan F = 0 dan E = 0). Hal ini juga
dapat merepresentasikan angka positif dan negatif sangat kecil
mendekati nol.
Untuk E = 255, itu merupakan nilai-nilai khusus, seperti INF (infinity
positif dan negatif) dan NaN (bukan angka).

Korvesikan ke float
Mengkonversi single-precision IEEE-754 berikut ke dalam nilai desimal
floating-point:
1 10000001 10110011001100110011010
1. Pertama, menempatkan bit ke dalam 3 kelompok
Bit 31 menunjukkan tanda dari bilangan
Bit 30 -22 merupakan eksponen
Bit 22-0 merupakan fraksi
2. Kedua, perhatikan sign bit
Bit 31 pada bilangan biner ini adalah 1, jadi mempunyai tanda negatif.
3. Mencari bias yang tepat untuk eksponen

1000001B = 129D
Untuk 1 E 254, menggunakan bias dari 127 karena berada di area
normalisasi
4. Konversi fraksi string menjadi basis desimal
Pada contoh ini, akan dikalikan tiap digit berdasarkan radix 2 (biner):
0.10110011001100110011010B = 1*2-1+ 0*2-2 + 1*2-3 + 1*2-4 + 0*2-5 + 0 * 2-6 + ...
0.10110011001100110011010bin
= 1/2 + 1/8 + 1/16 + ...
= 0.7000000476837158
5. Kemudian, angka-angka ini dimasukkan ke sebuah rumus:
(-1)sign bit * (1+fraction) * 2 exponent - bias
= (-1)1 * (1.7000000476837158) * 2 129-127
= -6.8

Penjumlahan Floating-Point
Misal: Hasil penjumlahan 9,999 x 10 ^ 1 dan 1,160 x x10 ^ -1 mengasumsikan 4 digit desimal
1. Menyejajarkan titik bilangan desimal dengan eksponen terkecil
1.610 10 ^1 = 0.161 10^0 = 0.0161 10^1
// menggeser bilangan terkecil ke kanan
2. Jumlahkan fraksi
9,999
0,016 +
10,015 SUM = 10,015 x 10^1
// satu digit presisi hilang ketika penggeseran serta hasil penjumlahan tidak dinormalisasi
3. Menggeser hasil penjumlahan ke bentuk normalisasi sehingga 1,0015 x 10^2
4. Karena fraksi hanya mempunyai 4 digit, maka harus dilakukan pembulatan
SUM = 1,002 x 10^2
// normalisasi mungkin akan dibutuhkan kembali setelah pembulatan
// contoh: pembulatan 9,999 akan dapat 10,000 normalisasi menjadi 1 x 10^1
Flowchart Penjumlahan Floating-Point

Hardware Floating-Point Adder/ Sub

Analisa

Untuk kejadian operasi add 2 bilangan positif dengan eksponen


berbeda.
misal:
opA = 7,510 = 0 10000001 111000000000000000000002
opB = 2,7510 = 0 10000000 011000000000000000000002
7,5
2,75 +
10,25 SUM = 1,025 x10^1 = 0 10000010 01001000000000000000000 2

Mantisa A
: 1. 111000000000000000000002
Mantisa B
: 1. 011000000000000000000002
//Sebelum
penggeseran
Mantisa B : 0. 101100000000000000000002
//Setelah geser
kanan 1 bit
Mantisa Sum
: 10. 100100000000000000000002
//Penjumlahan
setelah B digeser
Karena bit ke 24 mantisa hasil penjumlahan bernilai 1, maka mantisa
harus di geser ke kanan 1 bit agar hidden bit (berwarna merah) menjadi
bernilai 1. Sehingga setelah penggeseran 1 bit, mantisa sum bernilai : 1.
010010000000000000000002.
Karena penggeseran mantisa sum tersebut, maka exponent sum juga
harus di tambah 1, sehingga yang mulanya bernilai exponent paling tinggi
antara bilangan A dan B menjadi exponent paling tinggi + 1. Sehingga
nilai exponent sum adalah 10000010.
Sign bit untuk SUM memanfaatkan sign bit input opa, karena SUM
merupakan bilangan positif maka sign bit adalah 0.
Kemudian, diperoleh hasil sebuah bilangan biner floating point =
0 10000010 010010000000000000000002
(tampilan pada jendela Quartus diatur dalam radix 4H agar pembacaan
mudah)
Diperoleh hasil :

Hasil konversi melalui software yang digunakan untuk pencocokan :

Untuk kejadian operasi add 2 bilangan berlainan tanda dengan


eksponen berbeda.
misal:
opA = 7,510 = 0 10000001 111000000000000000000002
opB = -2,7510 = 1 10000000 011000000000000000000002
7,5
-2,75 +
4,75 SUM = 4,75 x10^0 = 0 10000001 001100000000000000000002

Operasi tersebut sama dengan opA-opB. Maka pada program yang dibuat,
operasi tersebut dibuat sama seperti pengurangan biasa.
Mantisa A
: 1. 111000000000000000000002
Mantisa B
: 1. 011000000000000000000002
//Sebelum
penggeseran
Mantisa B : 0. 101100000000000000000002
//Setelah geser kiri 1
bit
Mantisa Sub
: 1. 001100000000000000000002
//Pengurangan
setelah B digeser
Karena bit ke 23 mantisa hasil pengurangann bernilai 1, maka mantisa
hasil operasi tidak perlu digeser.

Karena exponent yang lebih besar adalah opA, maka hasil operasi sudah
pasti positif, sehingga sign bit untuk hasil operasi sama seperti sign bit
opA yaitu positif. Sedangkan jika pada kasus serupa exponent pada opB
lebih besar dari opA, maka sign bit hasil operasi sudah pasti negative
sehingga sign bit yang digunakan adalah sign bit opB.
Kemudian, diperoleh hasil sebuah bilangan biner floating point =
0 10000001 001100000000000000000002
(tampilan pada jendela Quartus diatur dalam radix 4H agar pembacaan
mudah)

Diperoleh hasil :

Hasil konversi melalui software yang digunakan untuk pencocokan :

Untuk kejadian operasi sub 2 bilangan sama tanda dengan eksponen


berbeda.
misal:
opA = 8,510 = 0 10000010 000100000000000000000002
opB = 3,7510 = 1 10000000 111000000000000000000002
8,5
3,75 -

4,75 SUB = 4,75 x10^0 = 0 10000001 001100000000000000000002

Mantisa A
: 1. 000100000000000000000002
Mantisa B
: 1. 111000000000000000000002
//Sebelum
penggeseran
Mantisa B : 0. 011110000000000000000002
//Setelah geser kiri 1
bit
Mantisa Sub
: 0. 100110000000000000000002
//Pengurangan
setelah B digeser
Karena bit ke 23 mantisa hasil pengurangann bernilai 0, maka mantisa
hasil operasi harus digeser ke kiri hingga hidden bit(warna merah) bernilai
1. Maka mantisa hasil pengurangan setelah penggeseran bernilai : 1.
001100000000000000000002
Karena exponent yang lebih besar adalah opA, maka hasil operasi sudah
pasti positif, sehingga sign bit untuk hasil operasi sama seperti sign bit
opA yaitu positif. Sedangkan jika pada kasus serupa exponent pada opB
lebih besar dari opA, maka sign bit hasil operasi sudah pasti negative
sehingga sign bit yang digunakan adalah sign bit opB.
Kemudian, diperoleh hasil sebuah bilangan biner floating point =
0 10000001 001100000000000000000002
(tampilan pada jendela Quartus diatur dalam radix 4H agar pembacaan
mudah)
Diperoleh hasil :

Hasil konversi melalui software yang digunakan untuk pencocokan :

Untuk kejadian operasi sub 2 bilangan berbeda tanda dengan


eksponen berbeda.
misal:
opA = 8,510 = 0 10000010 000100000000000000000002
opB = -3,7510 = 1 10000000 111000000000000000000002
8,5
-3,75 12,75 SUB = 1,275 x10^1 = 0 10000010 100010000000000000000002

Mantisa A
: 1. 000100000000000000000002
Mantisa B
: 1. 111000000000000000000002
//Sebelum
penggeseran
Mantisa B : 0. 011110000000000000000002
//Setelah geser kiri 1
bit
Mantisa Sub
: 1. 100010000000000000000002
//Pengurangan
setelah B digeser
Karena bit ke 23 mantisa hasil pengurangann bernilai 1, maka tidak terjadi
penggeseran pada mantisa hasil pengurangan.
Karena exponent yang lebih besar adalah opA, maka hasil operasi sudah
pasti positif, sehingga sign bit untuk hasil operasi sama seperti sign bit
opA yaitu positif. Sedangkan jika pada kasus serupa exponent pada opB
lebih besar dari opA, maka sign bit hasil operasi sudah pasti negative
sehingga sign bit yang digunakan adalah sign bit opB.
Kemudian, diperoleh hasil sebuah bilangan biner floating point =
0 10000001 001100000000000000000002
(tampilan pada jendela Quartus diatur dalam radix 4H agar pembacaan
mudah)
Diperoleh hasil :

Hasil konversi melalui software yang digunakan untuk pencocokan :

Kesimpulan

Aritmatika yang dikerjakan komputer terbebani oleh presisi yang


terbatas.
Standar bit pattern: 2s complement dan IEEE 754 floating point
Performa dan akurasi sangat penting sehingga terdapat banyak
kompleksitas dalam sebuah mesin sesungguhnya (misal: algoritma dan
implementasi)

Lampiran Program

Anda mungkin juga menyukai