MODUL 3 RANGKAIAN LOGIKA KOMBINASIONAL

Iskandar Setiadi (13511073) Asisten: Nirmala Twinta V. / 13209031 Tanggal Percobaan: 09/10/2012 EL2195-Praktikum Sistem Digital

Laboratorium Dasar Teknik Elektro - Sekolah Teknik Elektro dan Informatika ITB
Abstrak Kita telah menganalisis beberapa permasalahan gerbang logika yang memberikan fungsi keluaran berbeda-beda. Pada realita, gerbang logika tidak memiliki sifat se-ideal simulasi yang telah kita lakukan. Pada percobaan ini, kita akan menganilisis salah satu sifat rangkaian, yaitu waktu tunda. Kita akan menggunakan rangkaian sederhana serta BCDto-7-segment untuk menganalisis waktu tunda dalam rangkaian logika kombinasional. Waktu tunda paling lama dalam suatu rangkaian disebut worst case delay. Kata kunci: rangkaian logika kombinasional, worst case delay, BCD-to-7-Segment. 1. PENDAHULUAN
tunda (delay time) dari gerbang logika. Selain itu, terdapat beberapa level abstraksi yang dapat digunakan seperti level abstraksi struktural maupun behavioral.

2.1

RANGKAIAN KOMBINASIONAL

Rangkaian kombinasional didefinisikan sebagai tipe rangkaian logika yang diimplementasikan menggunakan persamaan boolean, dengan keluaran adalah fungsi murni masukan,[7]. Rangkaian kombinasional tidak memiliki memori penyimpanan logika, sehingga hasil keluaran gerbang logika sebelumnya tidak akan berpengaruh pada fungsi logika rangkaian ini. Pada percobaan ini, kita akan menggunakan salah satu aplikasi dari rangkaian kombinasional, yaitu BCD-to-7-Segment, yang akan dijelaskan pada bagian berikut.

Implementasi fungsi gerbang logika pada rangkaian dapat dilakukan dengan berbagai cara, salah satunya adalah rangkaian logika kombinasional. Rangkaian logika kombinasional hanya melihat masukan yang diterima tanpa dipengaruhi keluaran fungsi gerbang logika sebelumnya, sehingga dapat dikatakan bahwa rangkaian ini merupakan salah satu rangkaian yang memiliki cara kerja paling sederhana. Pada percobaan sebelumnya, kita hanya memperhatikan fungsi masukan serta keluaran gerbang logika, tanpa mempertimbangkan realita yang tidak bersifat ideal. Salah satu bentuk ketidak-idealan tersebut adalah jeda waktu (delay) rangkaian logika. Percobaan ini akan mengimplementasikan BCDto-7-Segment, salah satu rangkaian kombinasional, serta akan diidentifikasikan jeda waktu paling lama (worst case delay path) pada rangkaian ini. Dua metoda berbeda akan digunakan, yaitu dengan level abstraksi struktural serta level abstraksi behavioral.

2.2

BCD-TO-7-SEGMENT

BCD-to-7-Segment adalah rangkaian kombinasional yang menerima 4 buah masukan (4 bit) dan menghasilkan keluaran berupa gambar visual yang merepresentasikan angka biner tersebut dalam basis desimal,[2]. Untuk lebih jelasnya, perhatikan Gambar 2-1 berikut,[8]:

Gambar 2-1 BCD-to-7-Segment

2.

STUDI PUSTAKA

Rangkaian gerbang logika dapat dibagi menjadi beberapa bagian, seperti rangkaian logika kombinasional maupun rangkaian logika sekuensial. Adder, encoder, decoder, dan substractor adalah contoh dari aplikasi rangkaian logika kombinasional. Pada praktiknya, terdapat sifatsifat gerbang logika yang tidak ideal seperti waktu

Setiap segment yang menyala (a-g) akan merepresentasikan sebuah gambar visual. Sebagai contoh, angka 0 (0000) memiliki keluaran ”1111110”, maka hanya segment g yang berbeda (sisanya membentuk angka ’0’).

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB

1

2.3

WORST C ASE DELAY

Worst case delay didefinisikan sebagai waktu tunda terlama yang terdapat pada suatu rangkaian gerbang logika.

Gambar 2-2 Waktu Tunda Rangkaian

Perhatikan gambar (Gambar 2-2) diatas. Waktu tunda dari masukan ke keluaran fungsi gerbang logika tersebut adalah jarak antara dua buah garis merah yang ditampilkan pada waveform tersebut.

2.4

LEVEL ABSTRAKSI

Dalam perancangan fungsi gerbang logika, ada tiga level abstraksi yang dapat digunakan, yaitu level abstraksi behavioral, struktural, serta physical,[6]. Level abstraksi behavioral adalah tingkat abstraksi yang mengimplementasikan sesuai dengan perilaku sistem, bukan interkoneksi antara komponen yang digunakan. Level abstraksi struktural adalah tingkat abstraksi dengan implementasi menggunakan fungsi gerbang logika, baik secara skematik maupun bahasa VHDL. Level abstraksi physical adalah implementasi langsung, seperti menggunakan FPGA maupun rangkaian digital lainnya.

Gambar 3-1 Script untuk CLOCKDIV

3.

METODOLOGI

Kode yang digunakan diatas berfungsi untuk memperlambat fungsi keluaran. Hal ini bertujuan untuk mempermudah analisis waktu tunda pada simulasi timing yang akan dilakukan nantinya. Secara skematik, kita akan membuat rangkaian seperti gambar 3-2 berikut ini:

Percobaan ini dapat dibagi menjadi 3 bagian, yaitu pembuatan rangkaian kombinasional sederhana, implementasi BCD-to-7-Segment dengan persamaan Boolean, serta implementasi menggunakan level abstraksi behavioral. Pada percobaan pertama, kita akan membuat sebuah rangkaian kombinasional sederhana dengan 1 masukan, 2 keluaran, serta CLOCKDIV, gerbang NAND dan gerbang NOT. Berikut ini adalah file konfigurasi CLOCKDIV yang digunakan (Gambar 3-1):

Gambar 3-2 Sketsa Rangkaian dengan Skematik

Meskipun demikian, kita tidak menggunakan pendekatan skematik, namun menggunakan pendekatan lainnya, yaitu menggunakan bahasa VHDL. Gambar berikut ini (Gambar 3-3) merepresentasikan kode yang digunakan:

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB

2

persamaan boolean diatas kedalam FPGA DE-1, kita menggunakan script berikut ini (Gambar 3-5):

Gambar 3-3 Script VH DL untuk Rangkaian Sederhana

Pada percobaan diatas, kita akan menganalisis perbedaan simulasi Functional serta simulasi Timing yang akan dieksekusi. Percobaan selanjutnya adalah mengimplementasi BCD-to-7-Segment dengan pendekatan struktural, yaitu menggunakan persamaan boolean (SOP) yang disederhanakan seperti kode pada gambar 34 berikut ini:
Gambar 3-5 Kode File Bcd_test.vhd

Gambar 3-4 Kode File Bcd_7seg.vhd

Setelah menggunakan pendekatan struktural (menggunakan persamaan Boolean), berikut ini kita akan menggunakan implementasi dengan level abstraksi behavioral. Berikut ini adalah kode / script yang digunakan dalam percobaan ketiga (Gambar 3-6):

Persamaan boolean yang akan kita gunakan adalah sebagai berikut:
A <= NOT (D1 OR D3 OR ((NOT D0) AND (NOT D2)) OR (D0 AND D2)); B <= NOT ((NOT D2) OR (D0 AND D1) OR ((NOT D0) AND (NOT D1))); C <= NOT (D0 OR (NOT D1) OR D2); D <= NOT (D3 OR (D1 AND (NOT D2)) OR ((NOT D0) AND (NOT D2)) OR (D0 AND (NOT D1) AND D2) OR (D1 AND (NOT D0))); E <= NOT (((NOT D0) AND (NOT D2)) OR ((NOT D0) AND D1)); F <= NOT (D3 OR ((NOT D0) AND (NOT D1)) OR ((NOT D0) AND D2) OR ((NOT D1) AND D2)); G <= NOT (D3 OR (D1 AND (NOT D2)) OR ((NOT D1) AND D2) OR ((NOT D0) AND D2)); Gambar 3-6 Script Pendekatan Abstraksi Behavioral

Persamaan logika tersebut didapatkan dari K-Map tabel kebenaran fungsi BCD-to-7-Segment referensi yang digunakan. Dalam menghubungkan fungsi

Kita akan mengimplementasikan kode tersebut dengan simulasi testbench, yang akan menggunakan kode berikut ini (Gambar 3-7):
3

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB

sederhana, rangkaian BCD, serta merancang rangkaian BCD menggunakan level abstraksi behavioral. Berikut ini adalah hasil serta analisis dari percobaan ini.

4.1

MEMBUAT RANGKAIAN SEDERHANA

Pada percobaan ini, kita akan menganalisis waktu jeda yang diberikan oleh rangkaian logika yang digunakan. Berikut ini adalah hasil simulasi gerbang logika secara Functional (Gambar 4-1):

Gambar 4-2 Hasil Functional Waveform

Pada waveform tersebut, ada 3 buah pin yang digunakan yaitu CLK[0], GPIO[15] / keluaran NAND gate, serta GPIO[16] / keluaran NOT gate. Fungsi logika yang digunakan pada GPIO[15] adalah CLK[0] NAND (NOT CLK[0]) sedangkan fungsi logika yang digunakan pada GPIO[16] adalah (NOT CLK[0]). Berikut ini adalah tabel kebenaran dari masukkan yang diberikan:
Tabel 4-1 Tabel Kebenaran Rangkaian Sederhana

Gambar 3-7 Script Testbench untuk Abstraksi Behavioral

Seperti yang telah dilakukan pada percobaan sebelumnya, kita dapat mensimulasikan kode diatas menggunakan script sim.do berikut ini (Gambar 3-8):

CLK[0] 0 1

GPIO[15] 1 1

GPIO[16] 1 0

Gambar 3-8 Script sim.do

Dari hasil percobaan ini, kita dapat menganalisis bahwa CLKDIV yang digunakan memberikan delay 50 kali lebih lama dibandingkan masukkan yang diberikan. Delay ini akan kita gunakan untuk menganalisis rangkaian menggunakan simulasi Timing berikut ini (Gambar 4-2).

Langkah akhir yang dilakukan adalah mengimplementasikan kode tersebut pada rangkaian FPGA DE-1 yang tersedia. Setelah itu, kita akan membandingkan hasil yang didapatkan dari percobaan kedua dengan percobaan ini. Komparasi yang akan dianalisis adalah perbedaan metode struktural dengan behavioral yang digunakan diatas.

4.

HASIL DAN ANALISIS

Percobaan ini dibagi menjadi 3 segmen utama, yaitu menggunakan rangkaian kombinasional
Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB

4

Gambar 4-2 Hasil Simulasi Timing Waveform (i)

Dari waveform tersebut, kita dapat mengamati perbedaan utama dari simulasi fungsional dengan timing adalah jeda waktu yang terdapat di waveform keluaran. Pada simulasi functional, waktu saat terjadinya perubahan logika 1 menjadi 0 pada GPIO[16] adalah 245 ns, sedangkan grafik diatas menunjukkan 252.8 ns.

Gambar 4-4 Hasil Simulasi Functional BCD-to-7-Segment Gambar 4-3 Hasil Simulasi Timing Waveform (ii)

Selain itu (masih menggunakan waveform yang sama), waktu saat terjadinya perubahan logika 1 menjadi 0 pada GPIO[16] adalah 495 ns, sedangkan grafik diatas menunjukkan 502.9 ns. Dari dua data tersebut, kita bisa mendapatkan waktu tunda: GPIO[16] = 252.8 ns – 245 ns = 7.8 ns GPIO[16] = 502.9 ns – 495 ns = 7.9 ns Dengan demikian, waktu tunda dari rangkaian kombinasional (NOT gate) yang digunakan adalah ± 7.9 ns. Berdasarkan referensi, waktu tunda yang dimiliki inverter / NOT gate adalah antara 3 – 15 ns,[4], sehingga hasil percobaan ini masih masuk dalam rentang waktu tersebut. Simulasi menggunakan Timing jelas lebih memodelkan situasi ideal yang ada di dunia nyata, karena memperhitungkan efek waktu tunda dari rangkaian yang digunakan. Hasil percobaan ini sesuai dengan landasan yang telah diuraikan sebelumnya, bahwa setiap rangkaian logika, dalam kasus ini rangkaian logika kombinasional, memiliki waktu tunda (delay time) yang tidak nol.

Dengan menggunakan simulasi Functional, kita dapat menguji kebenaran dari persamaan logika (SOP/POS) yang kita implementasikan seperti tabel kebenaran berikut:
Tabel 4-2 Tabel Kebenaran Rangkaian BCD-to-7-Segment

D3 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1

D2 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1

D1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1

D0 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1

A 1 0 1 1 0 1 1 1 1 1 ø ø ø ø ø ø

B 1 1 1 1 1 0 0 1 1 1 ø ø ø ø ø ø

C 1 1 0 1 1 1 1 1 1 1 ø ø ø ø ø ø

D 1 0 1 1 0 1 1 0 1 1 ø ø ø ø ø ø

E 1 0 1 0 0 0 1 0 1 0 ø ø ø ø ø ø

F 1 0 0 0 1 1 1 0 1 1 ø ø ø ø ø ø

G 0 0 1 1 1 1 1 0 1 1 ø ø ø ø ø ø

4.2

MEMBUAT RANGKAIAN BCD

Dengan menggunakan implementasi persamaan boolean dengan bahasa VHDL, kita akan mendapatkan hasil berikut (Gambar 4-4):

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB

5

Hasil simulasi functional yang kita implementasikan menunjukkan hasil yang sesuai dengan referensi BCD-to-7-Segment yang ada. Simulasi Timing pada rangkaian kombinasional BCD-to-7-Segment memberikan hasil keluaran / waveform berikut ini.
Gambar 4-7 Nilai Set Hasil Simulasi Timing Rangkaian

Gambar 4-5 Hasil Simulasi Timing BCD-to-7-Segment

Secara visual (Gambar 4-5), kita dapat melihat perbedaan mendasar dari simulasi Functional dengan Timing, yaitu dari waktu jeda yang dihasilkan oleh keluaran.

Gambar 4-7 diatas merupakan hasil pengamatan langsung yang kita dapatkan dari waveform, dengan nilai set (1,1,0) dan (0,0,1). Kita dapat mengamati langsung dari waveform keluaran saat t = 47.14 ns, nilai logika KeluaranDelay mengalami perubahan dari 1 menjadi 0, sedangkan saat t = 52.505 ns, nilai logika KeluaranDelay mengalami perubahan dari 0 menjadi 1, sesuai dengan referensi yang diharapkan. Berikut ini adalah tabel rekapitulasi hasil pengamatan diatas (Tabel 4-3):
Tabel 4-3 Nilai Set dan Waktu Jeda Rangkaian
Dari Logika 0110 Ke Logika 1110 Set Waktu Ekspektasi 35 ns Waktu Timing 47.14 ns 52.505 ns Delay Time 12.14 ns 12.505 ns

(1,1,0)

Gambar 4-6 Compilation Report dari Simulasi Timing

0001

1001

(0,0,1)

40 ns

Gambar 4-6 menunjukkan delay maksimum (worst delay time) yang dimiliki rangkaian kombinasional yang digunakan, yaitu 12.505 ns dengan MasukanDelay SW1[3] dan KeluaranDelay HEX1[3]. SW1[3] adalah representasi dari masukkan D3, sedangkan HEX1[3] adalah representasi dari keluaran D. Untuk mendapatkan representasi nilai set, kita akan mencari sebuah kondisi dimana masukan logika lainnya bernilai tetap, tetapi keluaran berubah ketika nilai D3 berubah. Ada beberapa kondisi yang memungkinkan hal tersebut terjadi, seperti saat nilai set (1,1,0) maupun (0,0,1). Saat nilai set (1,1,0), atau dapat dituliskan SW1[2] = 1, SW1[1] = 1, SW1[0] = 0, kita dapat melihat pada tabel kebenaran bahwa 0110 menghasilkan logika D bernilai 1, sedangkan 1110 menghasilkan logika D bernilai ø, yang direpresentasikan dengan logika 0 pada waveform diatas. Selain itu, saat nilai set (0,0,1), kita dapat melihat pada tabel kebenaran bahwa 0001 menghasilkan logika D bernilai 0, sedangkan 1001 menghasilkan logika D bernilai 1.

Delay maksimum yang tercatat pada rangkaian BCD-to-7-Segment yang digunakan adalah 12.505 ns, dengan nilai set (0,0,1). 0001 adalah saat BCDto-7-Segment menunjukkan angka 1, sedangkan 1001 adalah saat BCD-to-7-Segment menunjukkan angka 9.

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB

6

Hasil implementasi fungsi logika kedalam FPGA ditunjukkan pada gambar berikut ini (Gambar 48):

HEX1 <= “1111110” dalam mengimplementasikan angka 0. Hasil simulasi TestBench dalam ModelSim menghasilkan waveform berikut ini (Gambar 4-10):

Gambar 4-10 Simulasi BCD-to-7-Segment - ModelSim

Hasil sinyal keluaran dapat direpresentasikan dengan tabel kebenaran berikut ini (Tabel 4-4):
Tabel 4-4 Tabel Kebenaran dengan ModelSim

D3 0 0
Gambar 4-8 Implementasi BCD-to-7-Segment pada FPGA

D2 0 0 0 0 1 1 1 1 0 0

D1 0 0 1 1 0 0 1 1 0 0

D0 0 1 0 1 0 1 0 1 0 1

A 1 0 1 1 0 1 1 1 1 1

B 1 1 1 1 1 0 0 1 1 1

C 1 1 0 1 1 1 1 1 1 1

D 1 0 1 1 0 1 1 0 1 1

E 1 0 1 0 0 0 1 0 1 0

F 1 0 0 0 1 1 1 0 1 1

G 0 0 1 1 1 1 1 0 1 1

0 0 0 0 0 0 1

Pada contoh implementasi tersebut, switch menunjukkan 0111, yang artinya menampilkan angka 7. Rangkaian kombinasional ini diimplementasikan dengan basis active high, yang artinya lampu menyala ketika diberikan logika ’1’ (Hal ini dapat dilakukan dengan menggunakan fungsi NOT/inverter pada kode VHDL yang digunakan).

Gambar 4-9 Representasi BCD-to-7-Segment pada FPGA

1

Secara keseluruhan, implementasi fungsi gerbang logika pada FPGA menghasilkan gambar keluaran berikut diatas (Gambar 4-9,[5]).

4.3

MERANCANG BCD 7SEG DENGAN LEVEL ABSTRAKSI BEHAVIORAL

Dari tabel kebenaran diatas (Tabel 4-4), kita dapat menyimpulkan bahwa implementasi menggunakan persamaan logika boolean maupun abstraksi behavioral memberikan hasil keluaran yang sama.

Pada bagian 4.2, kita telah mengimplementasikan rangkaian BCD-to-7-Segment menggunakan persamaan logika Boolean (SOP/POS). Selain cara tersebut, kita dapat mengimplementasikan fungsi gerbang logika menggunakan level abstraksi behavioral, yang hasil implementasinya akan dibahas mendetail pada bagian ini. Pada bagian sebelumnya, mengimplementasikan angka 0, menggunakan fungsi logika A = untuk kita Dengan

D1 + D3 + D0 .D2 + D0 .D2

.

implementasi kali ini, kita cukup menggunakan
Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB

7

Pada percobaan di laboratorium, implementasi abstraksi behavioral pada FPGA mengalami sedikit kendala. Walaupun demikian, keluaran script DUT pada FPGA menghasilkan gambar berikut ini (Gambar 4-11):

mendetail, baik dengan pendekatan skematik maupun bahasa VHDL

menghasilkan 16 keluaran, maka kita harus mendefinisikan semua (16 keluaran)

5.

KESIMPULAN

Dalam menjalankan simulasi, ada 2 kategorial utama yang dapat digunakan, seperti simulasi fungsional (bagian awal setiap percobaan), serta simulasi timing (bagian akhir setiap percobaan). Simulasi Functional hanya menampilkan keluaran fungsi gerbang logika, sedangkan simulasi Timing memperhitungkan waktu tunda (delay) dari suatu rangkaian. Sebagai contoh (percobaan 4-1), memiliki waktu tunda selama ± 7.9 ns yang dapat dianalisis dari simulasi Timing.
Gambar 4-11 Implementasi Level Abstraksi Behavioral pada FPGA

Pada contoh implementasi diatas, switch SW[3] = 0 , SW[2] = 0, SW[1] = 0, dan SW[0] = 1, yang memberikan hasil keluaran 0001 atau ’1’. Seperti percobaan 4-2, implementasi ini bersifat active high, sehingga lampu menyala ketika diberikan logika ’1’. Contoh hasil implementasi diatas menunjukkan kesamaan dengan percobaan 4-2 serta referensi yang digunakan. Berikut ini adalah tabel analisis perbedaan dari tingkat abstraksi behavioral maupun struktural (percobaan 4-2) yang digunakan:
Tabel 4-5 Komparasi Behavioral dan Struktural

Setiap rangkaian gerbang logika memiliki waktu tunda (delay time) pada implementasinya di dunia nyata. Secara keseluruhan, waktu tunda paling lama yang terdapat dalam suatu rangkaian dapat disimulasikan dengan mengidentifikasi worst case delay path, seperti pada percobaan 2B diatas, didapatkan waktu tunda terlama BCD-to-7Segment yang digunakan adalah 12.505 ns dengan MasukanDelay SW1[3] (D3) dan KeluaranDelay HEX1[3] (D). Dalam mengimplementasikan gerbang logika, ada beberapa tingkatan yang dapat digunakan, seperti level abstraksi behavioral maupun struktural. Level abstraksi struktural (percobaan 4-2) serta level abstraksi behavioral (percobaan 4-3) memiliki kelebihan dan kekurangan masingmasing. Implementasi abstraksi behavioral memerlukan keluaran (output) langsung dari fungsi logika, sedangkan struktural membutuhkan masukan (input) dari fungsi logika seperti persamaan boolean logika tersebut.

Level Struktural
Menggunakan gerbang dan komponen logika yang memenuhi persamaan logika boolean

Level Behavioral
Menggunakan implementasi perilaku langsung suatu rangkaian, seperti 1 pada BCD-to-7-Segment direpresentasikan dengan “0110000” Dapat diimplementasikan tanpa merumuskan persamaan logika /masukkan sistem Semua keluaran harus dijabarkan. Contohnya: Sebuah persamaan 4 variabel

Pengertian

DAFTAR PUSTAKA [1] [2] [3] Brian Holdsworth and Clive Woods, Digital Logic Design Fourth Edition, N.wnes, 2002 R.H. Katz, Contemporary Logic Design Second Edition, Pearson Prentince-Hall, NJ, 2005 Stephen Brown and Zvonko Vranesic, Fundamentals of Digital Logic with VHDL Design Third Edition, McGraw-Hill, San Francisco, 2009 https://eeweb.ee.ucla.edu/images/upload/M 116L_4_EEM116L_4_Fall07_note.pdf, 10 Oktober 2012, pukul 2:05:12

Kelebihan

Dapat diimplementasikan tanpa melihat keluaran secara langsung Harus menformulasikan fungsi persamaan logika yang digunakan secara

[4]

Kekurangan

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB

8

[5]

http://www.eg.bucknell.edu/~wismer/ee101 /lab12/node4.html, 10 Oktober 2012, pukul 3:06:44 http://rizkia.wordpress.com/2011/01/08/vh dl-level-abstraksi/, 10 Oktober 2012, pukul 5:34:21 http://en.wikipedia.org/wiki/Combinational _logic, 10 Oktober 2012, pukul 5:39:55 http://www.thelearningpit.com/lp/doc/7seg /7truth.gif, 10 Oktober 2012, pukul 6:01:12

[6]

[7] [8]

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB

9

Sign up to vote on this title
UsefulNot useful