14
MODUL 6 PROYEK PERANCANGAN RANGKAIAN DIGITAL Riandy Rahman Nugraha (13511014)/[email protected] Mukhlish Ghany Al-Fatah (13211022)/[email protected] Asisten: Nirmala Twinta V (13209031) Tanggal Percobaan: 04/12/2012 EL2195-Praktikum Sistem Digital Laboratorium Dasar Teknik Elektro - Sekolah Teknik Elektro dan Informatika ITB Abstrak Pada percobaan kali ini dilakukan penyempurnaan terhadap proyek tugas besar yang sudah dijelaskan pada laporan sebelumnya. Penyempurnaan dilakukan pada entity fsm_state dan entity color_rom_vhd. Pada entity fsm_state yang disempurnakan adalah penanganan waktu jeda dan clock divider yang dipercepat. Penyempurnaan color_rom_vhd dilakukan pada bagian interface dari game tabrak kotak, pembuatan mode: mode game ”Tabrak Kotak” dan mode Karen, serta perubahan konstanta clock divider menjadi lebih kecil sehingga clock yang dipakai menjadi lebih cepat. Kata kunci: Penyempurnaan, fsm_state, color_rom_vhd, mode. 1. PENDAHULUAN Impian besar bagi seorang insinyur adalah untuk membuat suatu mesin yang dapat memiliki perilaku serta kecerdasan sama seperti manusia(bahkan mengunggulinya). Secara perlahan impian tersebut kini semakin lama semakin dekat untuk menjadi kenyataan. Bagaimana teknologi robot dikembangkan, bagaimana teknologi smart phone serta komputer yang ada saat ini meningkat secara eksponensial kemutakhirannya yang merupakan tanda bahwa impian membuat mesin yang berperilaku dan berpikir seperti manusia semakin dekat untuk dicapai. Berangkat dari mimpi yang sama (membuat sebuah mesin cerdas) pada proyek tugas besar rangkaian digital ini kami berusaha merealisasikan mimpi kami tersebut walaupun dalam bentuk yang sangat sederhana, yakni: permainan dan smiley. Permainan yang kami rancang kami beri nama “Tabrak Kotak” yang intinya player diharuskan untuk menabrak kotak target. Smiley (kami beri nama myPC Smile) yang kami buat terinspirasi dari ekspresi anak- anak, Karen istri Plankton di serial kartun SpongeBob Squarepants, dan aplikasi android MiraiClock3 (software yang diprogram oleh culturejapan) yang akan menghasilkan respon tertentu(namun bagian yang kami ambil hanya ekspresi wajah) jika diberi suatu rangsangan tertentu. Proyek digital ini secara keseluruhan kami namakan “Fun Box”. Dinamakan seperti ini karena proyek yang kami bangun adalah bagian dari impian kami sehingga kami dengan senang hati dalam proses pengerjaan dan penyempurnaannya. Gambar 1-1 Karen (sedang tertawa) Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 1

TUBES SISDIGlabdasar.ee.itb.ac.id/lab/EL2102 - Sistem Digital/2012... · Web viewBerangkat dari mimpi yang sama (membuat sebuah mesin cerdas) pada proyek tugas besar rangkaian digital

Embed Size (px)

Citation preview

Page 1: TUBES SISDIGlabdasar.ee.itb.ac.id/lab/EL2102 - Sistem Digital/2012... · Web viewBerangkat dari mimpi yang sama (membuat sebuah mesin cerdas) pada proyek tugas besar rangkaian digital

MODUL 6 PROYEK PERANCANGAN RANGKAIAN DIGITAL

Riandy Rahman Nugraha (13511014)/[email protected] Ghany Al-Fatah (13211022)/[email protected]

Asisten: Nirmala Twinta V (13209031)Tanggal Percobaan: 04/12/2012EL2195-Praktikum Sistem Digital

Laboratorium Dasar Teknik Elektro - Sekolah Teknik Elektro dan Informatika ITB

AbstrakPada percobaan kali ini dilakukan penyempurnaan terhadap proyek tugas besar yang sudah dijelaskan pada laporan sebelumnya. Penyempurnaan dilakukan pada entity fsm_state dan entity color_rom_vhd. Pada entity fsm_state yang disempurnakan adalah penanganan waktu jeda dan clock divider yang dipercepat. Penyempurnaan color_rom_vhd dilakukan pada bagian interface dari game tabrak kotak, pembuatan mode: mode game ”Tabrak Kotak” dan mode Karen, serta perubahan konstanta clock divider menjadi lebih kecil sehingga clock yang dipakai menjadi lebih cepat.Kata kunci: Penyempurnaan, fsm_state, color_rom_vhd, mode.

1. PENDAHULUAN Impian besar bagi seorang insinyur adalah untuk membuat suatu mesin yang dapat memiliki perilaku serta kecerdasan sama seperti manusia(bahkan mengunggulinya). Secara perlahan impian tersebut kini semakin lama semakin dekat untuk menjadi kenyataan. Bagaimana teknologi robot dikembangkan, bagaimana teknologi smart phone serta komputer yang ada saat ini meningkat secara eksponensial kemutakhirannya yang merupakan tanda bahwa impian membuat mesin yang berperilaku dan berpikir seperti manusia semakin dekat untuk dicapai.Berangkat dari mimpi yang sama (membuat sebuah mesin cerdas) pada proyek tugas besar rangkaian digital ini kami berusaha merealisasikan mimpi kami tersebut walaupun dalam bentuk yang sangat sederhana, yakni: permainan dan smiley. Permainan yang kami rancang kami beri nama “Tabrak Kotak” yang intinya player diharuskan untuk menabrak kotak target. Smiley (kami beri nama myPC Smile) yang kami buat terinspirasi dari ekspresi anak-

anak, Karen istri Plankton di serial kartun SpongeBob Squarepants, dan aplikasi android MiraiClock3 (software yang diprogram oleh culturejapan) yang akan menghasilkan respon tertentu(namun bagian yang kami ambil hanya ekspresi wajah) jika diberi suatu rangsangan tertentu.Proyek digital ini secara keseluruhan kami namakan “Fun Box”. Dinamakan seperti ini karena proyek yang kami bangun adalah bagian dari impian kami sehingga kami dengan senang hati dalam proses pengerjaan dan penyempurnaannya.

Gambar 1-1 Karen (sedang tertawa)

Gambar 1-2 Aplikasi MiraiClock3 (sedang tertidur)

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB1

Page 2: TUBES SISDIGlabdasar.ee.itb.ac.id/lab/EL2102 - Sistem Digital/2012... · Web viewBerangkat dari mimpi yang sama (membuat sebuah mesin cerdas) pada proyek tugas besar rangkaian digital

2. STUDI PUSTAKA

Berikut ini adalah studi pustaka tentang FSM, VGA, dan warna-warna.

2.1 RANGKAIAN SEKUENSIAL

Rangkaian sekuensial adalah rangkaian yang keluarannya bergantung pada keluaran proses sebelumnya. Rangkaian sekuensial terbagi dua, yaitu rangkaian Mealy(keluarannya bergantung pada state dan masukan) dan rangkaian Moore(keluaran hanya bergantung pada state).Perbedaan mendasar rangkaian kombinasional dengan rangkaian sekuensial adalah ada tidaknya memori statenya. Keluaran rangkaian sekuensial bergantung pada state dan bergantung pada masukannya(rangkaian Mealy) atau hanya bergantung pada statenya(rangkaian Moore). Terdapat beberapa model yang digunakan dalam perancangan rangkaian sekuensial. Salah satunya yang paling banyak digunakan adalah FSM(Finite State Machine)[1].

2.2 FINITE STATE MACHINE (FSM)Berikut ini adalah penjelasan mengenai FSM:“A finite state machine (FSM) or simply a state machine, is a model of behavior composed of a finite number of states, transitions between those states, and actions.It is like a "flow graph" where we can see how the logic runs when certain conditions are met”[2].Dari pernyataan diatas dapat diambil kesimpulan bahwa FSM adalah model perilaku dari n banyaknya state yang mengandung transisi dan apa yang dilakukan pada saat transisi tersebut.

2.3 TENTANG VGAInterface ke VGA menggunakan 2 jenis sinyal, yaitu sinyal warna(Merah, hijau, dan Biru) dan sinyal sinkron (horizontal dan vertical). Berikut ini adalah penjelasan beberapa sinyal yang digunakan:

A. Horizontal Sync(TTL Level)Sinyal ini akan aktif pada range piksel kolom 0 sampai dengan 639. Sehingga kalau sinyal ini tidak aktif, yang terjadi adalah pergantian baris.B. Vertical Sync(TTL Level)Sinyal ini akan aktif pada range piksel baris 0 sampai dengan 479. Sehingga kalau sinyal ini tidak aktif, yang terjadi

adalah pergantian layar atau kembali ke baris pertama.C. Sinyal RGB(Analog 3 pin: 0,7-1V)Sinyal ini merepresentasikan intensitas untuk masing-masing komponen warna merah, hijau, dan biru untuk setiap pixel yang saat itu aktif. Sehingga yang terjadi ketiga sinyal ini berubah-ubah sesuai pixel yang sedang aktif dalam proses scanning (dari kiri ke kanan untuk setiap baris, selanjutnya dari baris paling atas dampai baris paling bawah.[3]

Fungsi-fungsi yang berkaitan dengan inisialisasi LCD menggunakan VGA dilakukan pada file vga.vhd.

2.4 TABEL WARNA

Berikut ini adalah tabel warna yang digunakan pada percobaan:

Color Red-Green-Blue

#Hex

White 255-255-255 ffffff

Red 255-0-0 ff0000

Tabel 2-1 Tabel Warna RGB dan Hexa[4]

3. METODOLOGI

Aplikasi “Fun Box” dibagi menjadi dua sub-aplikasi, yakni aplikasi permainan “Tabrak Kotak” dan aplikasi myPC Smile. Secara umum dua sub-aplikasi ini terdapat dalam satu aplikasi, sehingga blok diagramnya pun satu. Berikut ini adalah blok diagram dari aplikasi “Fun Box”:

Gambar 3-1 Blok Diagram ”Fun Box”

Input dan output dari aplikasi menggunakan input dan output entity top_level_vhd dari

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB2

Page 3: TUBES SISDIGlabdasar.ee.itb.ac.id/lab/EL2102 - Sistem Digital/2012... · Web viewBerangkat dari mimpi yang sama (membuat sebuah mesin cerdas) pada proyek tugas besar rangkaian digital

modul vga. Namun pada permainan dan smiley input untuk mengendalikan keadaan adalah switch. Berikut ini adalah penjelasan fungsional mengenai sub-aplikasi-sub-aplikasi tersebut.

3.1 PERMAINAN “TABRAK KOTAK”Inti dari permainan ini adalah menggerakan kotak kecil agar berada di dalam kotak besar(pada versi sebelumnya player menggerakkan kotak besar dan diharuskan menabrak kotak kecil, namun pada versi ini dibalik). Jika player berhasil menabrak (menaruh kotak kecil dalam kotak besar) kotak besar, maka akan warna latar yang semula putih akan berubah menjadi warna hijau(pada versi sebelumnya direncanakan jika kotak target berhasil ditabrak akan muncul smiley, namun pada versi ini diganti dengan ganti warna latar). Kesulitan pada permainan ini terletak pada masukan kendali dan kelajuan dari kotak.Masukan untuk kendali permainan Tabrak Kotak ini berupa switch, yakni SW(0), SW(1), SW(2), dan SW(3). Pertimbangan digunakannya switch sebagai kendali agar pengguna akan semakin sulit mengendalikan, karena harus digeser-geser bukan ditekan yang akan membuat permainan ini lebih seru tentunya.Berikut ini adalah diagram kerja singkat dari pembuatan sub-aplikasi permainan ”Tabrak Kotak”:

Gambar 3-2 Diagram Pengerjaan Permainan

Berikut ini adalah kode VHDL pada entity color_rom_vhd yang akan memunculkan sub-aplikasi permainan “Tabrak Kotak”:

--START KODE GAME--

--gambar player--

IF ((i_pixel_row > horizontal) AND (i_pixel_row < horizontal+5) AND (i_pixel_column > vertikal) AND (i_pixel_column < vertikal+5)) THEN

M_TF1 <= '1';

ELSE

M_TF1 <= '0';

END IF;

--gambar dot--

if ((i_pixel_row > pos_dot_y) AND (i_pixel_row < pos_dot_y+50) AND (i_pixel_column > pos_dot_x) AND (i_pixel_column < pos_dot_x+50)) then

DOT <='1';

else

DOT <='0';

end if;

--gambar grid--

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB3

Uji coba permainan

Compile, download program pada FPGA

modifikasi file display_vhd.vhd untuk mengupdate pin baru dari entity color_rom_vhd dan menyambungkan clock display ke color_rom_vhd

modifikasi file color_rom_vhd.vhd, pada bagian entity ditambahkan clock yang akan berperan dalam gerak dari kotak pengguna selain itu

ditambahkan juga kode untuk kontrol, dan batas daerah kotak target. Intinya pada file ini adalah penggambaran stage game.

gunakan perangkat modul VGA yang sudah disediakan sebagai bahan praktikum

Page 4: TUBES SISDIGlabdasar.ee.itb.ac.id/lab/EL2102 - Sistem Digital/2012... · Web viewBerangkat dari mimpi yang sama (membuat sebuah mesin cerdas) pada proyek tugas besar rangkaian digital

if((i_pixel_column=grid_kiri) or (i_pixel_column=grid_kanan) or (i_pixel_row=grid_atas) or (i_pixel_row=grid_bawah)) then

grid<='1';

else

grid<='0';

end if;

--gambar win--

if((i_pixel_column>0) and (i_pixel_row>0)) then

hit<='1';

else

hit<='0';

end if;

if ((clk_out'event) and (clk_out='1')) then

if (i_M_US ='1') then --gerak atas

if ((horizontal-2)<grid_atas) then

horizontal<=horizontal+2;

else

horizontal<=horizontal-2;

end if;

end if;

if (i_K_US='1') then --gerak bawah

if ((horizontal+2)>grid_bawah) then

horizontal<=horizontal-2;

else

horizontal<=horizontal+2;

end if;

end if;

if (i_H_US='1') then --gerak kiri

if ((vertikal-2)<grid_kiri) then

vertikal<=vertikal+2;

else

vertikal<=vertikal-2;

end if;

end if;

if (i_M_BT='1') then --gerak kanan

if ((vertikal+2)>grid_kanan) then

vertikal<=vertikal-2;

else

vertikal<=vertikal+2;

end if;

end if;

end if;

--ini tu buat passing "switch" di dalem vhd-nya

IF (M_TF1 = '1') THEN o_red <= X"FF"; o_green <= X"00"; o_blue <= X"00";

ELSIF (DOT='1') THEN o_red <= X"00"; o_green <= X"00"; o_blue <= X"FF";

ELSIF (grid = '1') THEN o_red <= X"EE"; o_green <= X"EE"; o_blue <= X"EE";

ELSIF ((hit='1') and (signal_win='1')) then o_red <= X"00"; o_green <= X"FF"; o_blue <= X"00";

ELSE o_red <= X"FF"; o_green <= X"FF"; o_blue <= X"FF";

END IF;

--kalau player berada di dot, maka signal_win --

--dipakai yang vertikal dan horizontal karena itulah yang menandakan posisi player, bukan i_pixel_row atau i_pixel_column)

if ((vertikal > pos_dot_x) and (vertikal < pos_dot_x+50)) and ((horizontal> pos_dot_y) and (horizontal<pos_dot_y+50)) then

signal_win<='1';

else

signal_win<='0';

end if;

--AKHIR KODE GAME--

3.2 MYPC SMILE

Sub-aplikasi ini adalah “wajah” dari aplikasi “Fun Box”. Cara kerja dari aplikasi ini pada dasarnya memunculkan berbagai macam ekspresi bergantung pada state dan masukan. State yang terdapat pada aplikasi ini, yaitu: senyum, kedipkiri, kedipkanan, dan cemberut. Berikut ini adalah ilustrasi dari masing-masing state:

Gambar 3-3 Berbagai Macam Ekspresi LCDLaporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB

4

Page 5: TUBES SISDIGlabdasar.ee.itb.ac.id/lab/EL2102 - Sistem Digital/2012... · Web viewBerangkat dari mimpi yang sama (membuat sebuah mesin cerdas) pada proyek tugas besar rangkaian digital

Untuk mengatur state dari aplikasi ini digunakan sebuah komponen yang bernama fsm_state yang terdiri dari clock internal, 3 masukan, dan 4 keluaran. Berikut ini adalah entity dari komponen fsm_state:ENTITY fsm_state IS

PORT(

clk, in_kedipkiri, in_kedipkanan : IN STD_LOGIC;

out_senyum, out_cemberut, out_kedipkiri, out_kedipkanan : OUT STD_LOGIC);

END fsm_state;

Berikut ini adalah diagram dari fsm_state:

Gambar 3-4 State Diagram Komponen fsm_state

Berikut ini adalah diagram singkat mengenai pengerjaan aplikasi ini:

Gambar 3-5 Diagram Pengerjaan Smiley

Berikut ini adalah kode VHDL dari entity fsm_state:

--AWAL KODE--

ENTITY fsm_state IS

PORT(

clk, in_kedipkiri, in_kedipkanan : IN STD_LOGIC;

out_senyum, out_cemberut, out_kedipkiri, out_kedipkanan : OUT STD_LOGIC);

END fsm_state;

ARCHITECTURE structural OF fsm_state IS

signal clk_out : std_logic;

signal sec : integer:=0;

signal isreset : bit := '0';

type state is (state_senyum, state_kedipkiri, state_kedipkanan, state_cemberut);

signal curState: state := state_senyum;

signal nextState: state;

--deklarasi konstanta untuk mempermudah pembacaan kode--

--urutan vektor : senyum, kedipkiri, kedipkanan, cemberut

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB5

Uji coba smiley

Compile, download program pada FPGA

modifikasi file display_vhd.vhd untuk mengupdate pin baru dari entity color_rom_vhd dan menyambungkan fsm ke

color_rom_vhd

modifikasi file color_rom_vhd.vhd agar dapat memunculkan berbagai macam ekspresi yang nantinya akan dikontrol oleh

FSM. Input pada entity pun ditambah 4 buah untuk menerima hasil output dari FSM.

gunakan perangkat modul VGA yang sudah disediakan sebagai bahan praktikum

Page 6: TUBES SISDIGlabdasar.ee.itb.ac.id/lab/EL2102 - Sistem Digital/2012... · Web viewBerangkat dari mimpi yang sama (membuat sebuah mesin cerdas) pada proyek tugas besar rangkaian digital

constant c_senyum : std_logic_vector(0 to 3) := "1000";

constant c_kedipkiri : std_logic_vector(0 to 3) := "0100";

constant c_kedipkanan : std_logic_vector(0 to 3) := "0010";

constant c_cemberut : std_logic_vector(0 to 3) := "0001";

--signal penampung nilai konstanta--

signal signal_out : std_logic_vector(0 to 3);

component CLOCKDIV is

port(

CLK: IN std_logic;

DIVOUT: buffer std_logic

);

end component;

Begin

clock0: CLOCKDIV port map(clk, clk_out);

Process

Begin

wait until (clk_out'Event) and (clk_out='1');

if (isreset='0') then

sec<=sec+1;

else

sec<=0;

curState<=nextState;

end if;

End Process;

Process(curState)

begin

case curState is

when state_senyum=>

isreset<='0';

signal_out<=c_senyum;

if (in_kedipkiri='0' and in_kedipkanan='0' and sec>5) then

nextState <= state_cemberut;

isreset<='1';

elsif (in_kedipkiri='1' and in_kedipkanan='0') then

nextState <= state_kedipkiri;

isreset<='1';

elsif (in_kedipkiri='0' and in_kedipkanan='1') then

nextState <= state_kedipkanan;

isreset<='1';

else

nextState<=curState;

end if;

when state_kedipkiri=>

isreset<='0';

signal_out<=c_kedipkiri;

if (in_kedipkiri='0') then

nextState <= state_senyum;

isreset<='1';

elsif (in_kedipkiri='0' and in_kedipkanan='1') then

nextState <= state_kedipkanan;

isreset<='1';

else

nextState<=curState;

end if;

when state_kedipkanan=>

isreset<='0';

signal_out<=c_kedipkanan;

if (in_kedipkanan='0') then

nextState <= state_senyum;

isreset<='1';

elsif (in_kedipkiri='1' and in_kedipkanan='0') then

nextState <= state_kedipkiri;

isreset<='1';

else

nextState<=curState;

end if;

when state_cemberut=>

isreset<='0';

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB6

Page 7: TUBES SISDIGlabdasar.ee.itb.ac.id/lab/EL2102 - Sistem Digital/2012... · Web viewBerangkat dari mimpi yang sama (membuat sebuah mesin cerdas) pada proyek tugas besar rangkaian digital

signal_out<=c_cemberut;

if (in_kedipkiri='1' and in_kedipkanan='0') then

nextState <= state_kedipkiri;

isreset<='1';

elsif (in_kedipkiri='0' and in_kedipkanan='1') then

nextState <= state_kedipkanan;

isreset<='1';

else

nextState<=curState;

end if;

end case;

out_senyum <= signal_out(0);

out_kedipkiri <= signal_out(1);

out_kedipkanan <= signal_out(2);

out_cemberut <= signal_out(3);

end process;

End structural;

--AKHIR KODE—

Berikut ini adalah kode VHDL untuk memunculkan smiley pada layar(ditaruh dalam entitiy color_rom_vhd) :

--START KODE SMILEY--

IF (COLOR_BLACK = '1') THEN o_red <= X"00"; o_green <= X"00"; o_blue <= X"00";

ELSE o_red <= X"11"; o_green <= X"11"; o_blue <= X"11";

END IF;

--mata kiri

IF ((i_pixel_row > 110)AND(i_pixel_row < 190)AND(i_pixel_column > 150)AND(i_pixel_column < 170)) THEN mata_kiri <= '1';

ELSE mata_kiri <= '0';

END IF;

--kedip mata kiri

IF ((i_pixel_row > 140)AND(i_pixel_row < 160)AND(i_pixel_column > 120)AND(i_pixel_column < 200)) THEN kedip_kiri <= '1';

ELSE kedip_kiri <= '0';

END IF;

--mata kanan

IF ((i_pixel_row > 110) AND (i_pixel_row < 190) AND (i_pixel_column > 470) AND (i_pixel_column < 490)) THEN mata_kanan <= '1';

ELSE mata_kanan <= '0';

END IF;

--kedip mata kanan

IF ((i_pixel_row > 140)AND(i_pixel_row < 160)AND(i_pixel_column > 440)AND(i_pixel_column < 520)) THEN kedip_kanan <= '1';

ELSE kedip_kanan <= '0';

END IF;

--smiley

IF ((i_pixel_row > 280)AND(i_pixel_row < 320)AND(i_pixel_column > 110)AND(i_pixel_column < 130)) THEN smiley_1 <= '1';

ELSE smiley_1 <= '0';

END IF;

IF ((i_pixel_row > 320)AND(i_pixel_row < 340)AND(i_pixel_column > 130)AND(i_pixel_column < 170)) THEN smiley_2 <= '1';

ELSE smiley_2 <= '0';

END IF;

IF ((i_pixel_row > 340)AND(i_pixel_row < 370)AND(i_pixel_column > 170)AND(i_pixel_column < 470)) THEN smiley_3 <= '1';

ELSE smiley_3 <= '0';

END IF;

IF ((i_pixel_row > 320)AND(i_pixel_row < 340)AND(i_pixel_column > 470)AND(i_pixel_column < 510)) THEN smiley_4 <= '1';

ELSE smiley_4 <= '0';

END IF;

IF ((i_pixel_row > 280)AND(i_pixel_row < 320)AND(i_pixel_column > 510)AND(i_pixel_column < 530)) THEN smiley_5 <= '1';

ELSE smiley_5 <= '0';

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB7

Page 8: TUBES SISDIGlabdasar.ee.itb.ac.id/lab/EL2102 - Sistem Digital/2012... · Web viewBerangkat dari mimpi yang sama (membuat sebuah mesin cerdas) pada proyek tugas besar rangkaian digital

END IF;

--smiley terbalik

IF ((i_pixel_row > 330)AND(i_pixel_row < 370)AND(i_pixel_column > 110)AND(i_pixel_column < 130)) THEN smiley_6 <= '1';

ELSE smiley_6 <= '0';

END IF;

IF ((i_pixel_row > 310)AND(i_pixel_row < 330)AND(i_pixel_column > 130)AND(i_pixel_column < 170)) THEN smiley_7 <= '1';

ELSE smiley_7 <= '0';

END IF;

IF ((i_pixel_row > 280)AND(i_pixel_row < 310)AND(i_pixel_column > 170)AND(i_pixel_column < 470)) THEN smiley_8 <= '1';

ELSE smiley_8 <= '0';

END IF;

IF ((i_pixel_row > 310)AND(i_pixel_row < 330)AND(i_pixel_column > 470)AND(i_pixel_column < 510)) THEN smiley_9 <= '1';

ELSE smiley_9 <= '0';

END IF;

IF ((i_pixel_row > 330)AND(i_pixel_row < 370)AND(i_pixel_column > 510)AND(i_pixel_column < 530)) THEN smiley_10 <= '1';

ELSE smiley_10 <= '0';

END IF;

--senyum

if (state_senyum='1') then

IF (mata_kiri = '1') THEN COLOR_BLACK <= '1';

ELSIF (mata_kanan = '1') THEN COLOR_BLACK <= '1';

ELSIF (smiley_1 = '1') THEN COLOR_BLACK <= '1';

ELSIF (smiley_2 = '1') THEN COLOR_BLACK <= '1';

ELSIF (smiley_3 = '1') THEN COLOR_BLACK <= '1';

ELSIF (smiley_4 = '1') THEN COLOR_BLACK <= '1';

ELSIF (smiley_5 = '1') THEN COLOR_BLACK <= '1';

ELSE COLOR_BLACK <= '0';

END IF;

end if;

--kedip kiri

if (state_kedipkiri='1') then

IF ((i_M_US='1') AND (kedip_kiri = '1')) THEN COLOR_BLACK <= '1';

ELSIF (mata_kanan = '1') THEN COLOR_BLACK <= '1';

ELSIF (smiley_1 = '1') THEN COLOR_BLACK <= '1';

ELSIF (smiley_2 = '1') THEN COLOR_BLACK <= '1';

ELSIF (smiley_3 = '1') THEN COLOR_BLACK <= '1';

ELSIF (smiley_4 = '1') THEN COLOR_BLACK <= '1';

ELSIF (smiley_5 = '1') THEN COLOR_BLACK <= '1';

ELSE COLOR_BLACK <= '0';

END IF;

end if;

--kedip kanan

if (state_kedipkanan='1') then

IF ((i_K_US='1') AND (kedip_kanan = '1')) THEN COLOR_BLACK <= '1';

ELSIF (mata_kiri = '1') THEN COLOR_BLACK <= '1';

ELSIF (smiley_1 = '1') THEN COLOR_BLACK <= '1';

ELSIF (smiley_2 = '1') THEN COLOR_BLACK <= '1';

ELSIF (smiley_3 = '1') THEN COLOR_BLACK <= '1';

ELSIF (smiley_4 = '1') THEN COLOR_BLACK <= '1';

ELSIF (smiley_5 = '1') THEN COLOR_BLACK <= '1';

ELSE COLOR_BLACK <= '0';

END IF;

end if;

--cemberut

if (state_cemberut='1') then

IF (cemberut = '1') THEN COLOR_BLACK <= '1';

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB8

Page 9: TUBES SISDIGlabdasar.ee.itb.ac.id/lab/EL2102 - Sistem Digital/2012... · Web viewBerangkat dari mimpi yang sama (membuat sebuah mesin cerdas) pada proyek tugas besar rangkaian digital

ELSIF (mata_kiri = '1') THEN COLOR_BLACK <= '1';

ELSIF (mata_kanan = '1') THEN COLOR_BLACK <= '1';

ELSIF (smiley_6 = '1') THEN COLOR_BLACK <= '1';

ELSIF (smiley_7 = '1') THEN COLOR_BLACK <= '1';

ELSIF (smiley_8 = '1') THEN COLOR_BLACK <= '1';

ELSIF (smiley_9 = '1') THEN COLOR_BLACK <= '1';

ELSIF (smiley_10 = '1') THEN COLOR_BLACK <= '1';

ELSE COLOR_BLACK <= '0';

END IF;

end if;

--AKHIR KODE SMILEY--

3.3 PEMBAGIAN KERJA

Riandy Rahman Nugraha mengerjakan proses-proses yang terdapat dalam aplikasi (fsm_state, mekanisme game, mekanisme smile, debugging, dan enhancing proses).Mukhlish Ghany Al-Fatah mengerjakan desain aplikasi sehingga aplikasi indah dipandang mata(perancangan smiley per ekspresi, pemilihan warna, dll)

3.4 PROSES PERANCANGAN

Proses perancangan permainan dimulai dari penetapan mindset permainan, yakni sederhana bagi developer namun menantang bagi pengguna. Dipilih konsep sederhana karena keinginan developer untuk memberikan game yang berfungsi dengan baik dalam waktu yang cukup singkat(agar bisa di-debug berulang-ulang hingga hasilnya sesuai). Dipilih konsep menantang karena tentu kami ingin permainan ini membuat orang asyik di dalamnya namun permainannya sederhana. Setelah penetapan mindset, ditetapkan ide secara keseluruhan dengan menggambar sketsa prototipe di kertas. Pada akhirnya ide yang kami pilih adalah ide permainan tabrak kotak.

Gambar 3-6 Prototipe selain Tabrak Kotak

Gambar 3-7 Prototipe selain Tabrak Kotak

Permainan ini cukup sederhana bagi developer karena developer dapat menggunakan konsep proyek 5C sebagai dasarnya, kemudian tinggal ditambahkan prosedur jika target berhasil dikenai, penyempurnaan kendali, dan pemberian animasi pantul tembok jika pengguna hendak melewati garis grid. Permainan ini menantang pengguna (terbukti karena kakak asisten, memainkan permainan ini tiga kali), karena kendalinya bukanlah push-button, melainkan switch, dan juga kecepatan kotak pengguna yang sangat cepat. Pada struktur permainan ini tidak digunakan komponen fsm. Hal ini disebabkan karena kasus ini dapat diselesaikan hanya dengan menggunakan signal yang menyimpan nilai dari horizontal dan vertikal yang akan berubah-ubah sesuai masukan dari pengguna. Untuk melihat langsung bagaimana struktur permainan ini dapat dilihat langsung di entity color_rom_vhd.Proses perancangan smiley dimulai dari penetapan mindset. Mindset ini sama seperti

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB9

Page 10: TUBES SISDIGlabdasar.ee.itb.ac.id/lab/EL2102 - Sistem Digital/2012... · Web viewBerangkat dari mimpi yang sama (membuat sebuah mesin cerdas) pada proyek tugas besar rangkaian digital

yang sudah dijelaskan panjang lebar pada bagian pendahuluan. Setelah penetapan mindset selesai, dilakukan penggambaran state diagram seperti pada gambar 3-4 setelah itu sketsa ekspresi state dibuat di microsoft excel kemudian dipindahkan ke dalam kode VHDL dibarengi dengan pembuatan entity fsm_state. Berikut ini adalah sketsa ekspresi :

Gambar 3-8 Sketsa Ekspresi State

Setelah entity fsm_state dan kode VHDL ekspresi selesai, keduanya digabungkan. Meskipun kedua sub-aplikasi ini seolah-olah tidak memiliki hubungan, namun pada proses perancangan awal kami ingin setelah pengguna memenangkan game akan muncul smiley, namun hingga akhir, fitur ini tetap tidak berfungsi (padahal nilai signal sudah di set secara tegas) sehingga pada akhirnya kami memutuskan untuk menjadikan aplikasi ini menjadi dua bagian yang berbeda, bagian permainan dan smiley.

4. HASIL DAN ANALISIS

Berikut ini adalah hasil dari kode VHDL untuk masing-masing sub-aplikasi.

4.1 PERMAINAN “TABRAK KOTAK”

Gambar 4-1 Tampilan Awal Permainan

Objek kotak kecil merah dapat digerakkan karena potongan kode berikut:

if ((clk_out'event) and (clk_out='1')) then

if (i_M_US ='1') then --gerak atas

if ((horizontal-2)<grid_atas) then

horizontal<=horizontal+2;

else

horizontal<=horizontal-2;

end if;

end if;

if (i_K_US='1') then --gerak bawah

if ((horizontal+2)>grid_bawah) then

horizontal<=horizontal-2;

else

horizontal<=horizontal+2;

end if;

end if;

if (i_H_US='1') then --gerak kiri

if ((vertikal-2)<grid_kiri) then

vertikal<=vertikal+2;

else

vertikal<=vertikal-2;

end if;

end if;

if (i_M_BT='1') then --gerak kanan

if ((vertikal+2)>grid_kanan) then

vertikal<=vertikal-2;

else

vertikal<=vertikal+2;

end if;

end if;

end if;

Jika bingung mengapa untuk bergerak ke atas adalah posisi horizontal yang diubah(begitupun untuk mengubah kanan kiri mengapa vertikal) bayangkan benar-benar garis horizontal dan vertikal. Pada dasarnya untuk menggerakkan objek, yang diperlukan hanya menggerakkan batas-batasnya, maka untuk menggerakkan atas atau bawah, batas yang harus diubah adalah horizontalnya,

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB10

Page 11: TUBES SISDIGlabdasar.ee.itb.ac.id/lab/EL2102 - Sistem Digital/2012... · Web viewBerangkat dari mimpi yang sama (membuat sebuah mesin cerdas) pada proyek tugas besar rangkaian digital

sementara untuk menggerakkan kiri kanan, batas yang dirubah adalah vertikalnya. Alasan mengapa pada kode terdapat pengecekan posisi setelah ditekan tombol untuk memastikan bahwa kotak tidak keluar dari grid-grid yang telah ditentukan. Nilai-nilai grid ini adalah sebagai berikut:constant grid_kiri: integer:= 5; --main di column

constant grid_kanan: integer:= 635;

constant grid_atas: integer:= 5; --main di row

constant grid_bawah: integer:= 475;

Ketika aplikasi dijalankan dan kotak merah player akan melewati grid, maka akan seolah-olah terpantul layaknya bola yang memantul ke dinding. Dengan adanya animasi ini harapannya tampilan dari permainan ini akan lebih menarik.

Gambar 4-2 Kondisi Menang

Kondisi menang terjadi jika kotak kecil berada di dalam kotak besar (atau dengan kata lain kotak kecil menabrak kotak besar). Kondisi menang ini ditandai dengan berubahnya latar dari putih menjadi berwarna hijau.Berikut ini adalah potongan kode yang menyebabkan kejadian ini terjadi(memakai bantuan signal signal_win dan hit):

--kalau player berada di dot, maka signal_win --

--dipakai yang vertikal dan horizontal karena itulah yang menandakan posisi player, bukan i_pixel_row atau i_pixel_column)

if ((vertikal > pos_dot_x) and (vertikal < pos_dot_x+50)) and ((horizontal> pos_dot_y) and (horizontal<pos_dot_y+50)) then

signal_win<='1';

else

signal_win<='0';

end if;

dan kode ini untuk mentrigger warna hijau :ELSIF ((hit='1') and (signal_win='1')) then o_red <= X"00"; o_green <= X"FF"; o_blue <= X"00";

Gambar 4-3 Kendali Permainan 1: atas, 2: bawah, 3: kiri, 4: kanan.

Berikut ini adalah padanan switch : i_M_US = SW(0) i_K_US= SW(1) i_H_US = SW(2) i_M_BT = SW(3)

Konfigurasi ini menggunakan konfigurasi dari entity top_level_vhd. Mengapa nama tidak diganti? Alasannya sederhana, karena kami lebih familiar dengan nama i_M_US, i_K_US, dll karena sudah melakukan percobaan berulang kali dengan label yang sama, sehingga untuk kemudahan dalam debugging kami mempertahankan label penamaan ini.

4.2 MYPC SMILE

Gambar 4-4 State Cemberut dan State Senyum

Gambar 4-5 State Kedipkiri dan State Kedipkanan

Berikut ini adalah cara kerja sub-aplikasi myPC Smile. State dari entity fsm_state menjadi inputan dari entity color_rom_vhd. Entity color_rom_vhd akan menggambar pada layar sesuai dengan state yang menjadi masukan. Hasil dari penggambaran seperti pada gambar diatas.Hal yang perlu digaris bawahi adalah entity fsm_state hanya berfungsi untuk menghasilkan state, sementara gambar pada layar LCD dihasilkan di color_rom_vhd.

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB11

Page 12: TUBES SISDIGlabdasar.ee.itb.ac.id/lab/EL2102 - Sistem Digital/2012... · Web viewBerangkat dari mimpi yang sama (membuat sebuah mesin cerdas) pada proyek tugas besar rangkaian digital

Kode untuk memunculkan smiley sudah cukup jelas dikomentari, sehingga sangat tidak mangkus jika ditulis kembali disini. Intinya kode tersebut menggambar sesuai koordinat yang sudah ditentukan.Untuk mengganti isi kotak permainan, cukup switch SW(4) i_K_BT dipindah posisinya.

5. KESIMPULAN

Untuk membuat sebuah objek yang lain diperlukan signal yang lain pada color_rom_vhd, karena signal tersebutlah yang mengindikasikan dimana warna harus “ditembakkan”.Agar lebih mudah dalam strukturasi komponen(pemasukan input dan output) di gambar terlebih dahulu tata letak komponennya. Sehingga pada saat port mapping tidak kebingungan. Cara ini praktikan gunakan pada strukturisasi komponen dalam entity display_vhd ketika menghubungkan jalur input clock FPGA ke komponen fsm_state dan hasil outputnya ke color_rom_vhd.Untuk menggunakan output dari komponen diperlukan adanya signal yang sesuai dengan tipe output tersebut atau hasil output dari komponen tersebut dirubah menjadi buffer(bukan input output)Dalam VHDL assignment logika dalam percabangan haruslah tegas. Jika kondisinya terpenuhi kemudian terjadi assignment, maka harus dispesifikasikan juga jika kondisi tidak terpenuhi. Hal ini terjadi karena kondisi di luar kondisi if (else atau tidak dispesifikasikan) default nilaiya tidak null sehingga jika kita biarkan belum tentu nilainya itu null, sehingga harus ditegaskan assignment-nya.

DAFTAR PUSTAKA

[1] Hutabarat, Mervin T. , dkk, Buku Petunjuk Praktikum Sistem Digital, hlm 63, STEI ITB, Bandung, 2011.

[2] http://vhdlguru.blogspot.com/ 2010/04/how-to-implement-state-machines-in-vhdl.html, diakses 21 November 2012, 05.00.

[3] Hutabarat, Mervin T. , dkk, Buku Petunjuk Praktikum Sistem Digital, hlm 69, STEI ITB, Bandung, 2011.

[4] http://www.tayloredmktg.com/rgb/ , diakses 27 November 2012, 07.30.

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB12