Anda di halaman 1dari 11

MODUL 6 PROYEK PERANCANGAN SISTEM DIGITAL (TIMER COUNTDOWN)

Mochammad Arief (13210044)


Asisten: Luqman Muh Zagi (13208032)
Tanggal Percobaan: 03/12/2012
EL2195-Sistem Digital

Laboratorium Dasar Teknik Elektro - Sekolah Teknik Elektro dan Informatika ITB
Abstrak
Proyek ini merupakan akhir dari praktikum Sistem Digital.
Pada percobaan ini, praktikan mengimplementasikan hal
yang telah dipelajari selama menjalani praktikum Sistem
Digital. Proyek yang dipilih oleh praktikan untuk proyek
akhir adalah Timer Countdown. Timer countdown
merupakan system yang menerima masukan untuk
menambahkan detik dan menit. Setelah detik dan menit
yang ingin tercapai, diberikan input start yang akan memulai
hitung mundur sesuai dengan jumlah detik dan menit hingga
nol. Detik dan menit akan ditampilkan dalam 4 digit 7
segment. Ketika detik dan menit mencapai nol, maka pada
layar akan ditampilkan warna yang akan berkedap-kedip.
Praktikan tidak dapat menyelesaikan proyek ini karena
beberapa kegagalan dalam FSM yang dibuat.

2.
2.1

STUDI PUSTAKA
FINITE STATE MACHINE

Rangkaian sekuensial dapat dirancang dengan


berbagai cara. Salah satu cara tersebut adalah
Finite State Machine (FSM). Dinamakan FSM
karena jumlah state yang mungkin terbatas dan
rangkaian sekuensial bekerja mirip dengan mesin
yang beroperasi dengan urutan state.
Level abstraksi perancangan FSM pun bertingkattingkat. Salah satunya adalah level abstraksi
behavioral.
Pada
level
ini,
sebelum
mengimplementasikan menggunakan VHDL,
desain harus dibuat dalam state diagram.

Kata kunci: Timer, Countdown, FSM, Laporan.


1.

2.2

PENDAHULUAN

Proyek ini merupakan tugas akhir dari praktikum


Sistem Digital. Dengan dilakukan proyek ini
diharapkan praktikan telah mengerti seluruh
percobaan dan praktikum yang telah dilakukan
sebelumnya. Proyek Timer Countdown dipilih
karena diharapkan proyek ini akan merangkum
seluruh percobaan percobaan sebelum ini. Timer
Countdown
dipilih
karena
juga
akan
menggunakan output dari FPGA berupa VGA.
Tujuan :
1) Menspesifikasikan
sederhana.

suatu

system

digital

2) Membagi system menjadi satu atau lebih jalur


data dan kendali.
3) Mendesain jalur data untuk system.
4) Mendesain kendali untuk system.
5) Mengintegrasikan jalur data dan kendali ke
dalam system secara keseluruhan.

VGA

VGA merupakan interface yang paling popular


untuk sebuah tampilan. VGA sekarang banyak
ditemukan pada mobile device. Interface ke VGA
menggunakan 2 jenis sinyal. Yaitu : sinyal warna
dan sinyal sinkorn. Berikut penjelasan beberapa
sinyal yang digunakan. Horizontal sync ini akan
aktif pada range piksel kolom 0 hingga 639. Bila
sinyal ini tidak aktif, maka pindah menuju baris
selanjutnya. Vertical Sync ini akan aktif pada pixel
0 hingga 479. Bila tidak aktif, maka akan terjadi
pergantian layar atau kembali ke baris pertama.
Sinyal RGB merupakan representasi intensitas
untuk masing masing komponen warna merah,
hijau, dan biru untuk setiap pixel yang saat itu
aktif. Sehingga yang terjadi ketiga sinyal ini akan
berubah ubah sesuai dengan pixel yang sedang
aktif.
Proses scanning pada VGA dilakukan sesuai
dengan gambar dibawah ini.

6) Melakukan tes menyeluruh terhadap system.


7) Menguji dan menganalisa system yang sudah
dibangun.

Laporan Praktikum - Laboratorium Dasar Teknik Elektro STEI ITB

Gambar 3-1 Diagram Proyek Timer Countdown

4.

HASIL DAN ANALISIS

4.1

3.

METODOLOGI

Peralatan yang digunakan :


1) Komputer/PC yang telah terinstal program
Quartus II 9.0
2) Monitor LCD
3) FPGA development board tipe DE1
Proyek Timer Countdown
Tentukan spesifikasi dari proyek Timer Countdown

Buat block diagram yang sesuai dengan kondisi


proyek
Tentukan juga input dan output dari masing-masing
block tersebut
Buat FSM untuk bagian dari block diagram yang
membutuhkan

SPESIFIKASI

Deskripsi : Terdapat 5 input dalam project ini.


Input ini terdari 1 switch button dan 4 push
button. Ketika switch button bernilai 1, maka
seluruh system akan aktif dan pada 7segment
akan menampilkan angka 0 0 0 0 yang
merepresentasikan 2 digit menit dan 2 digit menit.
Dalam kondisi aktif maka nilai dari menit dan
detik dapat ditambahkan. Hal ini dapat dilakukan
menekan push button yang masing masing
mewakili detik dan menit. Angka maksimum
untuk detik adalah 59 dan angka maksimum dari
menit adalah 99. Ketika ditambahkan terus
menerus hingga sampai angka maksimum maka
penambahan tidak akan dilakukan baik untuk
menit maupun detik.
Bila timer ingin diulang pengisiannya hal ini
dapat dilakukan dengan menekan push button
yang mewakili reset. Ketika reset berubah menjadi
low, maka nilai dari menit dan detik akan kembali
menjadi 0.
Bila menit dan detik telah diisi hingga waktu yang
diharapkan, timer countdown dapat dijalankan
dengan menekan push button yang mewakili
tombol start. Waktu akan berkurang 1 detik secara
berulang ulang hingga mencapai detik dan
menit 0. Ketika waktu telah habis, maka layar
LCD akan berubah dari hitam menjadi warna
merah putih yang akan berkedip kedip. Dengan
menekan push button reset, layar LCD akan
kembali menjadi hitam dan menit serta detik
menjadi 0 kembali.
Input/Output :
Input :

Buat state - state pada FSM sesuai dengan kebutuhan

Implementasikan FSM tersebut ke dalam VHDL

Siapkan driver VGA untuk output pada layar

4 Push Button

1 Switch Button

Output :

7-Segment

Layar LCD

Blok Diagram :

Port FSM yang dibuat pada driver VGA

Atur tiap piksel untuk menentukan warna yang


dibutuhkan
Laporan Praktikum - Laboratorium Dasar Teknik Elektro STEI ITB

FSM :
Decoder State Diagram

Gambar 4-1 Gambar Blok Diagram Proyek Timer


Countdown

Decoder :
Pada bagian ini system akan menerima input
langsung dari luar, input ini berupa push button
dan switch button. Bila switch button bernilai 1
maka akan aktif. Pada bagian ini lah menit dan
detik ditambahkan. Penambahan dilakukan
berdasarkan masing masing button yang
mewakili detik dan menit. Nilai detik dan menit
ini memiliki batas atas. Nilai maksimal dari detik
adalah 59 sedangkan nilai maksimal dari menit
adalah 99. Ketika penambahan sampai pada nilai
maksimal, walaupun push button ditekan nilai
dari detik dan menit tidak akan berubah. Ketika
push button start ditekan maka akan masuk pada
blok selanjutnya yaitu Countdown.
Countdown :
Ketika pushbutton start ditekan maka detik dan
menit yang telah diisi akan mulai berkurang.
Waktu akan berkurang 1 detik hingga menjadi 0
kembali. Ketika waktu telah mencapat 0, maka
blok ini akan memberikan keluaran pada blok
VGA untuk diproses.
VGA :
Pada blok ini, output akan memberikan keluaran
pada layar LCD. Output dari VGA baru terjadi
ketika Countdown memberikan keluaran yang
akan diterima sebagai input pada VGA. Hasil
yang dikeluarkan pada layarnya berupa warna
merah putih yang akan berkedip-kedip dengan
periode 1 detik. Ketika push button reset ditekan,
maka VGA akan kembali mengeluarkan warna
hitam pada layar.

Penjelasan : Bila input pushbutton detik ditekan


maka variable count_us ,yang mewakili satuan
dari detik, bertambah satu. Dan bila input
pushbutton menit ditekan maka variable
count_um, yang mewakili nilai satuan dari menit,
akan
bertambah
satu.
Ketika
count_us
ditambahkan terus menerus hingga lebih dari 9,
maka akan masuk state S1. Pada state ini count_us
akan menjadi 0 lagi dan count_ts, yang mewakili
nilai puluhan dari detik, akan bertambah 1.
Setelah itu maka akan kembali ke state S0. Bila
count_ts telah bertambah hingga melebihi 5, maka
akan masuk state S2. Pada state S2 ini, count_ts
akan menjadi 0 kembali dan count_um akan
bertambah 1. Dari state ini akan kembali ke state
S0.
Bila count_um telah bertambah hingga melebihi 9
maka akan masuk pada state S4. Pada state ini
count_um akan kembali menjadi 0 dan count_tm,
yang mewakili nilai puluhan dari menit, akan
bertambah 1. Dari state ini akan kembali ke state
S0. Bila count_tm bertambah hingga lebih dari 9
namun count_ts dan count_us masih dibawah
nilai maksimalnya maka akan masuk pada state S5.
Pada state ini, nilai count_tm akan dikurangi 1
agar tetap dibawah nilai maksimum. Dalam
kondisi dimana semua variable waktu telah
maksimum namun tetap terjadi penambahan
maka akan masuk pada state S3. State ini akan
menjaga nilai semua variable tetap diambang
batas maksimum dan tidak melebihinya.
Nilai dari count_us, count_ts, count_um dan
count_tm akan dikeluarkan dan digunakan pada
FSM selanjutnya agar berkurang seperti timer.

Laporan Praktikum - Laboratorium Dasar Teknik Elektro STEI ITB

4.2.1

Decoder

Hasil Simulasi untuk penambahan detik


Countdown State Diagram

Penjelasan : Variabel count yang telah diisi pada


Decoder akan diproses disini bila start Event dan
start sama dengan 0. Bila hal ini terjadi maka akan
masuk pada state S0. Pada state ini count_us akan
berkurang 1. Hal ini merepresentasikan detik yang
dikurangi 1 secara berulang. Bila count_us
dikurangi secara berulang hingga bernilai 0 maka
akan masuk pada state S1. Pada state ini, count_us
akan menjadi bernilai 9 dan count_ts akan
berkurang 1. Dari state ini akan kembali pada state
S0 dimana count_us akan berkurang 1. Bila
count_ts dan count_us bernilai 0 maka akan
masuk pada state S2. Pada state ini, count_ts
diberikan nilai 5 dan count_us akan bernilai 9
sedangkan count_um akan dikurangi satu. Dari
state ini akan kembali ke state S0.

Analisis : Pada simulasi ini praktikan mencoba


membuat kondisi yang menyerupai kondisi
dimana pushbutton yang menambah detik ditekan
secara berulang. Untuk membuat kondisi yang
menyerupai
kondisi
dilakukan
dengan
memberikan sinyal clock sehingga sinyal detik
akan berubah ubah antara 1 dan 0. Ketika sinyal
detik berubah dari 1 menjadi 0, cdus juga akan
bertambah. Cdus mewakili nilai satuan dari detik.
Ketika cdus telah bertambah sebanyak 10 kali,
maka cdts akan bertambah. Cdts digunakan untuk
mewakili nilai puluhan dari detik. Bila Cdts telah
bertambah sebanyak 6 kali maka cdum akan
bertambah. Cdum mewakili nilai satuan dari
menit. Nilai cdts, cdus, cdum, dan cdtm ini
merupakan
nilai
hexadecimal
yang
bila
diimplementasikan pada 7seg akan berbentuk
akan yang merepresentasikan waktu menit dan
detik.
Hasil Simulasi untuk Penambahan Menit

Bila tercapai kondisi dimana count_us, count_ts


dan count_um bernilai 0 maka akan masuk ke
state S3. Pada state ini, count_us dan count_um
akan diberikan nilai 9 dan count_ts akan diberikan
nilai 5 sedangkan count_tm akan berkurang 1. Bila
semua nilai count telah bernilai 0, maka akan
masuk pada state S4. Pada state ini, akan
membuat v_out, yang merupakan penanda blok
VGA bekerha, bernilai 1. Keluaran v_out ini juga
merupakan keluaran dari Countdown.

4.2

SIMULASI FUNGSIONAL

Kami mengalami kegagalan dalam menyelesaikan


proyek akhir ini sehingga kami akan memberikan
hasil simulasi fungsional dari masing masing
FSM.

Analisis : Pada simulasi ini praktikan mencoba


membuat kondisi dimana pushbutton yang
menambahkan menit ditekan secara berulang.
Untuk membuat kondisi seperti ini dapat
dilakukan dengan cara memberikan sinyal clock
pada sinyal input menit yang seharusnya berasal
dari pushbutton. Ketika sinyal menit berubah dari

Laporan Praktikum - Laboratorium Dasar Teknik Elektro STEI ITB

1 menjadi 0, maka cdum akan bertambah. Cdum


mewakili nilai dari digit satuan menit. Ketika
Cdum bertambah hingga 10 kali, maka Cdtm akan
bertambah satu dan cdum akan kembali ke 0. Hal
ini terus berulang selama sinyal menit aktif
berubah. Cdtm sendiri mewakili nilai digit
puluhan dari menit. Cdtm dan cdum merupakan
hexadecimal yang bila ditampilkan pada 7segment akan membentuk digit angka yang
mewakili menit.

4.2.2

Countdown

Hasil simulasi untuk Countdown

Analisis : Untuk mensimulasi Countdown,


praktikan memberikan terlebih dahulu nilai awal
waktu yang akan dihitung mundur. Hal ini
dilakukan karena Countdown dan decoder
disimulasi secara terpisah sehingga pengisian nilai
awal yang akan dihitung mundur tidak dapat
dilakukan melalui decoder. Pengesetan awal
untuk waktu diberikan nilai 1 menit dan 32 detik.
Ketika simulasi dimulai, pada bagian awal terlihat
dimana cdus berkurang sebanyak 3 kali dan
kemudian cdts mulai berkurang satu. Hal ini
sesuai dimana bila 32 detik berkurang sebanyak 3
detik akan berubah menjadi 29. Hal ini
menunjukan cdts berubah karena mewakili nilai
puluhan dari detik. Ketika cdts dan cdus
mencapai angka 0, maka cdum akan berkurang 1.
Dan kemudian cdts menjadi bernilai 5 dan cdus
akan bernilai 9. Hal ini akan terus berulang hingga
keempat variable mencapai angka 0 yang menjadi
penanda untuk mengaktifkan sinyal menuju VGA.

4.3

ANALISIS KEGAGALAN

1) Pada gambar diatas merupakan error yang


terus berulang ketika praktikan mencoba
memperbaiki error error yang terjadi dan
error ini tidak berhasil praktikan perbaiki
hingga praktikum berakhir. Saat praktikan
mencoba mensimulasikan sendiri FSM yang
ada, error akhirnya dapat ditemukan
penyebabnya. Kondisi ini terjadi bila dalam
satu file vhdl terdapat beberapa PROCESS
berbeda yang memberikan nilai pada sinyal
atau variable yang sama. Kondisi ini
tampaknya memberikan kebingungan dalam
file vhdl diproses untuk memberikan nilai
bagi sinyal tersebut karena masuk dalam
beberapa PROCESS yang berbeda sehingga
hal ini menyebabkan nilai dari sinyal tidak
dapat ditentukan oleh compiler.
2) Hal kedua yang menjadi kesalahan dalam
pembuatan implementasi vhdl adalah
penggunaan
pengkondisian
IF-ELSE.
Praktikan
banyak
menggunakan
pengkondisian IF-ENDIF yang dilanjutkan
dengan IF-ENDIF lagi secara berulang. Hal
ternyata menyebabkan kegagalan compile
bila signal yang diproses adalah sama. Hal ini
menyebabkan kebingungan bagi compiler
untuk memberikan nilai bagi sinyal bila pada
kondisi dari tiap IF memberikan nilai pada
sinyal tersebut. Untuk menghindari hal
tersebut, disarankan penggunaan IF-ELSIFELSE untuk pemprosesan sinyal yang sama.
Hal ini lebih baik karena pada pengkondisian
IF-ELSIF-ELSE hanya akan masuk pada salah
satu dari kondisi yang telah dinyatakan. Bila
sudah masuk pada salah satu kondisi, kondisi
yang lain tidak akan dilakukan.

5.

KESIMPULAN

Proyek Timer Countdown yang coba dibuat oleh


praktikan mengalami kegagalan. Kegagalan ini
terjadi pada implementasi VHDL dari FSM
Laporan Praktikum - Laboratorium Dasar Teknik Elektro STEI ITB

decoder dan countdown. Kegagalan terjadi


dikarenakan oleh beberapa hal. Kesalahan
pertama adalah penggunaan PROCESS pada vhdl.
Praktikan menggunakan beberapa PROCESS
dalam satu file vhdl yang memberikan nilai pada
sinyal atau variable yang sama. Hal ini ternyata
tidak dapat dilakukan karena compiler akan
mengalami kebingungan untuk memberi nilai
bagi signal yang diproses. Hal kedua yang
menjadi kendala penggunaan pengkondisian IF.
Praktikan banyak menggunakan kondisi IF yang
langsung ditutup ENDIF dan membuat kondisi IF
yang memproses sinyal yang sama pada kondisi
IF sebelumnya. Hal ini menyebabkan kegagalan
compiler untuk memberikan nilai pada signal
tersebut bila pada tiap kondisi IF memberikan
nilai pada sinyal tersebut. Maka lebih baik
penggunaan
IF-ELSIF-ELSE
karena
pada
pengkondisian ini hanya akan masuk salah satu
dari kondisi yang dinyatakan. Hal ini akan
mencegah pemberian nilai berulang pada signal
yang sama dalam satu pemrosesan.

DAFTAR PUSTAKA
[1]

Jackstar H. S., Panduan Penulisan Laporan, Jacks


Publishing, Bandung, 2008.

[2]

Adel S. Sedra dan Kennet C. Smith,


Microelectronic Circuits, Oxford University Press,
USA, 1997.

[3]

Brown, dkk, Fundamentals of Digital Logic with


VHDL Design, Hal. 297, McGraw Hill, New
York, 2005

Laporan Praktikum - Laboratorium Dasar Teknik Elektro STEI ITB

LAMPIRAN
Analisis Script decoder.vhd (Yang digunakan pada simulasi) :
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.all;
USE IEEE.STD_LOGIC_ARITH.all;
USE IEEE.NUMERIC_STD.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.all;

Analisis : Bagian diatas merupakan library apa saja yang digunakan pada percobaan kali ini.
ENTITY decoder IS
PORT (

SW, start, detik, menit, reset : IN STD_LOGIC;


cdus : OUT STD_LOGIC_VECTOR (6 DOWNTO 0);
cdts : OUT STD_LOGIC_VECTOR (6 DOWNTO 0);
cdum : OUT STD_LOGIC_VECTOR (6 DOWNTO 0);
cdtm : OUT STD_LOGIC_VECTOR (6 DOWNTO 0)

);
END decoder;

Analisis : Bagian diatas merupakan pendeklarasian input dan output dari decoder.vhd. SW merupakan
switch yang bila bernilai 1 maka seluruh system berjalan. Detik digunakan untuk menambahkan waktu
untuk detik, sedangkan menit digunakan untuk menambahkan bagian waktu untuk menit. Keluaran
cdus, cdts, cdum dan cdtm merupakan keluaran hexadecimal yang terhubung dengan 7segment sehingga
bagian 7segment yang bekerja akan menyala sesuai dengan angka dari detik atau menit.
ARCHITECTURE behavioral OF decoder IS
signal count_tma: integer range 0 to 10;
signal count_uma: integer range 0 to 10;
signal count_tsa: integer range 0 to 10;
signal count_usa: integer range 0 to 10;

Analisis : Bagian diatas merupakan sinyal yang dideklarasikan secara local pada file vhdl ini saja.
Count_usa mewakili nilai satuan detik, count_tsa mewakili nilai puluhan dari nilai puluhan detik,
count_uma mewakili nilai satuan menit dan count_tma mewakili nilai puluhan menit.
BEGIN
-- Process Counting
PROCESS (detik,menit,reset,SW)
variable count_tm: integer range 0 to 10:=0;
variable count_um: integer range 0 to 10:=1;
variable count_ts: integer range 0 to 10:=10;
variable count_us: integer range 0 to 10:=2;

Analisis : Bagian diatas merupakan deklarasi variable secara local dalam PROCESS ini saja. Nilai dari
variable ini nantinya akan diberikan kepada sinyal count yang telah dideklarasikan sebelumnya.
BEGIN
IF (reset = '0')
THEN
count_us := 0;
count_ts := 0;
count_um := 0;
count_tm := 0;

Analisis : Bagian diatas menyatakan bila Switch aktif dan reset ditekan maka semua nilai dari count akan
menjadi 0 kembali.
ELSIF (detik = '0' AND SW = 1) THEN
count_usa <= count_us;
count_tsa <= count_ts;
count_uma <= count_um;
count_tma <= count_tm;

Analisis : Bagian diatas menyatakan bila switch aktif dan detik ditekan maka nilai count dari variable
local akan diberikan kepada count yang dideklarasikan diluar proses.
IF (count_us /= 9) THEN
count_us := count_us + 1;

Analisis : Bila digit satuan detik belum mencapai 9, maka digit satuan detik akan ditambahkan 1 lagi,
ELSIF (count_us = 9 AND count_ts /= 5) THEN
count_us := 0;
count_ts := count_ts + 1;

Analisis : Bila digit satuan detik telah mencapai 9 dan digit puluhan detik belum mencapai 5, maka
satuan detik akan kembali 0 dan puluhan detik akan ditambahkan.
Laporan Praktikum - Laboratorium Dasar Teknik Elektro STEI ITB

ELSIF (count_us = 9 AND count_ts = 5 AND count_um /= 9) THEN


count_us := 0;
count_ts := 0;
count_um := count_um + 1;

Analisis : Bila satuan detik telah mencapai 9 dan puluhan detik telah mencapai 5 serta satuan menit
belum mencapai 9, maka satuan detik dan puluhan detik akan menjadi 0 dan satuan menit akan ditambah
1.
ELSIF (count_tm /= 9 AND count_um = 9 AND count_ts = 5 AND count_us = 9) THEN
count_us := 0;
count_ts := 0;
count_um := 0;
count_tm := count_tm + 1;

Analisis : Bila semua telah mencapai maksimal selain puluhan menit maka variable selain puluhan menit
akan menjadi 0 dan puluhan menit akan bertambah satu.
ELSIF (count_tm = 9 AND count_um = 9 AND count_ts = 5 AND count_us = 9) THEN
count_us := 9;
count_ts := 5;
count_um := 9;
count_tm := 9;
END IF;

Analisis : Bila semua telah mencapai nilai maksimal, maka tidak akan ada yang ditambahkan.
ELSIF (menitEVENT AND menit = '0' AND SW = 1) THEN
count_usa <= count_us;
count_tsa <= count_ts;
count_uma <= count_um;
count_tma <= count_tm;

Analisis : Bila switch aktif dan menit aktif maka nilai variable local count akan diberikan pada signal
count yang akan diproses.
IF (count_um /= 9) THEN
count_um := count_um + 1;

Analisis : Pada bagian diatas, bila satuan menit belum bernilai 9 maka satuan menit akan ditambah 1.
ELSIF (count_um = 9 AND count_tm /= 9) THEN
count_um := 0;
count_tm := count_tm + 1;

Analisis : Pada bagian diatas, bila satuan menit bernilai 9 dan puluhan menit belum bernilai 9, maka
satuan menit akan menjadi 0 dan puluhan menit akan bertambah 1.
ELSIF (count_um = 9 AND count_tm = 9 AND count_ts /= 5 AND count_us /= 9) THEN
count_um := 9;
count_tm := 9;

Analisis : Pada bagiaan diatas, bila satuan dan puluhan menit telah mencapai maksimal sedangkan detik
belum, maka puluhan dan satuan menit akan tetap bernilai maksimal.
ELSIF (count_tm = 9 AND count_um = 9 AND count_ts = 5 AND count_us = 9) THEN
count_us := 9;
count_ts := 5;
count_um := 9;
count_tm := 9;
END IF;

Analisis : Pada bagian diatas, bila semua variable count telah mencapai nilai maksimal maka variable
count akan tetap bernilai maksimal.
END IF;
END PROCESS;

Analisis : Pada bagian bawah, merupakan implementasi dari signal count dikonversi menjadi
hexadecimal agar dapat memberikan keluaran pada 7segment.
-- Output BCD 7-Seg
PROCESS(count_usa)
BEGIN
CASE (count_usa) IS
WHEN 0 =>
cdus <= "1000000";
WHEN 1 =>
cdus <= "1111001";
WHEN 2 =>
cdus <= "0100100";
WHEN 3 =>
cdus <= "0110000";
WHEN 4 =>
cdus <= "0011001";
WHEN 5 =>
cdus <= "0010010";
WHEN 6 =>
cdus <= "0000010";
WHEN 7 =>
cdus <= "1111000";
WHEN 8 =>
cdus <= "0000000";
WHEN 9 =>
cdus <= "0010000";
WHEN OTHERS =>
cdus <= "1111111";
END CASE;
END PROCESS;
PROCESS(count_tsa)
BEGIN
CASE (count_tsa) IS
WHEN 0 =>
cdts <= "1000000";
WHEN 1 =>
cdts <= "1111001";
WHEN 2 =>
cdts <= "0100100";

Laporan Praktikum - Laboratorium Dasar Teknik Elektro STEI ITB

WHEN 3 =>
cdts <= "0110000";
WHEN 4 =>
cdts <= "0011001";
WHEN 5 =>
cdts <= "0010010";
WHEN OTHERS =>
cdts <= "1111111";
END CASE;
END PROCESS;
PROCESS(count_uma)
BEGIN
CASE (count_uma) IS
WHEN 0 =>
cdum <= "1000000";
WHEN 1 =>
cdum <= "1111001";
WHEN 2 =>
cdum <= "0100100";
WHEN 3 =>
cdum <= "0110000";
WHEN 4 =>
cdum <= "0011001";
WHEN 5 =>
cdum <= "0010010";
WHEN 6 =>
cdum <= "0000010";
WHEN 7 =>
cdum <= "1111000";
WHEN 8 =>
cdum <= "0000000";
WHEN 9 =>
cdum <= "0010000";
WHEN OTHERS =>
cdum <= "1111111";
END CASE;
END PROCESS;
PROCESS(count_tma)
BEGIN
CASE (count_tma) IS
WHEN 0 =>
cdtm <= "1000000";
WHEN 1 =>
cdtm <= "1111001";
WHEN 2 =>
cdtm <= "0100100";
WHEN 3 =>
cdtm <= "0110000";
WHEN 4 =>
cdtm <= "0011001";
WHEN 5 =>
cdtm <= "0010010";
WHEN 6 =>
cdtm <= "0000010";
WHEN 7 =>
cdtm <= "1111000";
WHEN 8 =>
cdtm <= "0000000";
WHEN 9 =>
cdtm <= "0010000";
WHEN OTHERS =>
cdtm <= "1111111";
END CASE;
END PROCESS;
END behavioral;

Analisis counter.vhd (Yang digunakan pada simulasi) :


LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.all;
USE IEEE.STD_LOGIC_ARITH.all;
USE IEEE.NUMERIC_STD.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.all;

Analisis : Bagian diatas merupakan library apa saja yang digunakan pada percobaan kali ini.
ENTITY countdown IS
PORT (
SW, start, detik, menit, reset, clk : IN STD_LOGIC;
cdus : OUT STD_LOGIC_VECTOR (6 DOWNTO 0);
cdts : OUT STD_LOGIC_VECTOR (6 DOWNTO 0);
cdum : OUT STD_LOGIC_VECTOR (6 DOWNTO 0);
cdtm : OUT STD_LOGIC_VECTOR (6 DOWNTO 0);
v_out : OUT STD_LOGIC
);
END countdown;

Analisis : Bagian diatas merupakan pendeklarasian input dan output dari decoder.vhd. SW merupakan
switch yang bila bernilai 1 maka seluruh system berjalan. Detik digunakan untuk menambahkan waktu
untuk detik, sedangkan menit digunakan untuk menambahkan bagian waktu untuk menit. Keluaran
cdus, cdts, cdum dan cdtm merupakan keluaran hexadecimal yang terhubung dengan 7segment sehingga
bagian 7segment yang bekerja akan menyala sesuai dengan angka dari detik atau menit.
ARCHITECTURE behavioral OF countdown IS
signal count_tma: integer range 0 to 10;
signal count_uma: integer range 0 to 10;
signal count_tsa: integer range 0 to 10;
signal count_usa: integer range 0 to 10;

Analisis : Bagian diatas merupakan sinyal yang dideklarasikan secara local pada file vhdl ini saja.
Count_usa mewakili nilai satuan detik, count_tsa mewakili nilai puluhan dari nilai puluhan detik,
count_uma mewakili nilai satuan menit dan count_tma mewakili nilai puluhan menit.
BEGIN
-- Process Counting
PROCESS (detik,menit,reset,SW)
variable count_tm: integer range 0 to 10:=0;

Laporan Praktikum - Laboratorium Dasar Teknik Elektro STEI ITB

variable count_um: integer range 0 to 10:=1;


variable count_ts: integer range 0 to 10:=3;
variable count_us: integer range 0 to 10:=2;

Analisis : Pada bagian atas, menyatakan variable local count untuk dihitung mundur. Nilainya sudah
diberikan karena tidak dapat diisi melalui decoder. Count diatas menunjukan 1 menit 32 detik.
BEGIN
IF SW = '1' AND start = '0' THEN
IF (reset = '0')
THEN
count_us := 0;
count_ts := 0;
count_um := 0;
count_tm := 0;

Analisis : Bila switch aktif, start ditekan dan reset ditekan maka semua variable count akan menjadi 0.
ELSIF (clk'EVENT AND clk = '0') THEN
count_usa <= count_us;
count_tsa <= count_ts;
count_uma <= count_um;
count_tma <= count_tm;
IF (count_us /= 0) THEN
count_us := count_us - 1;

Analisis : Bila satuan detik tidak 0, maka akan dikurangi 1.


ELSIF (count_us = 0 AND count_ts /= 0) THEN
count_us := 9;
count_ts := count_ts - 1;

Analisis : Bila satuan detik 0 dan puluhan detik tidak, maka satuan detik akan menjadi 9 dan puluhan
akan dikurangi 1.
ELSIF (count_us = 0 AND count_ts = 0 AND count_um /= 0) THEN
count_us := 9;
count_ts := 5;
count_um := count_um - 1;

Analisis : Bila detik telah 0 maka nilai detik akan dikembalikan menjadi maksimal dan satuan menit
berkurang.
ELSIF (count_tm /= 0 AND count_um = 0 AND count_ts = 0 AND count_us = 0) THEN
count_us := 9;
count_ts := 5;
count_um := 9;
count_tm := count_tm - 1;

Analisis : Bila semua variable count selain puluhan menit telah 0, maka variable tersebut dikembalikan ke
nilai maksimal dan puluhan menit akan dikurangi 1.
ELSIF (count_tm = 0 AND count_um = 0 AND count_ts = 0 AND count_us = 0) THEN
v_out := 1;
END IF;

Analisis : Bila semua telah menjadi 0, maka sinyal yang menandakan VGA aktif akan menjadi 1.
END IF;
END IF;
END PROCESS;

Analisis : Pada bagian bawah, merupakan implementasi dari signal count dikonversi menjadi
hexadecimal agar dapat memberikan keluaran pada 7segment.
-- Output BCD 7-Seg
PROCESS(count_usa)
BEGIN
CASE (count_usa) IS
WHEN 0 =>
cdus <= "1000000";
WHEN 1 =>
cdus <= "1111001";
WHEN 2 =>
cdus <= "0100100";
WHEN 3 =>
cdus <= "0110000";
WHEN 4 =>
cdus <= "0011001";
WHEN 5 =>
cdus <= "0010010";
WHEN 6 =>
cdus <= "0000010";
WHEN 7 =>
cdus <= "1111000";
WHEN 8 =>
cdus <= "0000000";
WHEN 9 =>
cdus <= "0010000";
WHEN OTHERS =>
cdus <= "1111111";
END CASE;
END PROCESS;
PROCESS(count_tsa)
BEGIN

Laporan Praktikum - Laboratorium Dasar Teknik Elektro STEI ITB

1
0

CASE (count_tsa) IS
WHEN 0 =>
cdts <= "1000000";
WHEN 1 =>
cdts <= "1111001";
WHEN 2 =>
cdts <= "0100100";
WHEN 3 =>
cdts <= "0110000";
WHEN 4 =>
cdts <= "0011001";
WHEN 5 =>
cdts <= "0010010";
WHEN OTHERS =>
cdts <= "1111111";
END CASE;
END PROCESS;
PROCESS(count_uma)
BEGIN
CASE (count_uma) IS
WHEN 0 =>
cdum <= "1000000";
WHEN 1 =>
cdum <= "1111001";
WHEN 2 =>
cdum <= "0100100";
WHEN 3 =>
cdum <= "0110000";
WHEN 4 =>
cdum <= "0011001";
WHEN 5 =>
cdum <= "0010010";
WHEN 6 =>
cdum <= "0000010";
WHEN 7 =>
cdum <= "1111000";
WHEN 8 =>
cdum <= "0000000";
WHEN 9 =>
cdum <= "0010000";
WHEN OTHERS =>
cdum <= "1111111";
END CASE;
END PROCESS;
PROCESS(count_tma)
BEGIN
CASE (count_tma) IS
WHEN 0 =>
cdtm <= "1000000";
WHEN 1 =>
cdtm <= "1111001";
WHEN 2 =>
cdtm <= "0100100";
WHEN 3 =>
cdtm <= "0110000";
WHEN 4 =>
cdtm <= "0011001";
WHEN 5 =>
cdtm <= "0010010";
WHEN 6 =>
cdtm <= "0000010";
WHEN 7 =>
cdtm <= "1111000";
WHEN 8 =>
cdtm <= "0000000";
WHEN 9 =>
cdtm <= "0010000";
WHEN OTHERS =>
cdtm <= "1111111";
END CASE;
END PROCESS;
END behavioral;

Laporan Praktikum - Laboratorium Dasar Teknik Elektro STEI ITB

11

Anda mungkin juga menyukai