Proyek Perancangan Rangkaian Digital Bagian II

24
MODUL 6 PROYEK PERANCANGAN RANGKAIAN DIGITAL (Bagian II) Iskandar Setiadi (13511073) Yusuf Fajar Ardiana (18011049) Asisten: Fajar Arief P. / 13209099 Tanggal Percobaan: 6/12/2012 EL2195-Praktikum Sistem Digital Laboratorium Dasar Teknik Elektro - Sekolah Teknik Elektro dan Informatika ITB Abstrak Pada praktikum Sistem Digital sebelumnya, kita telah merancang sebuah desain rangkaian logika yang bersifat interaktif dan terimplementasikan modul VGA. Proyek perancangan ini didukung dengan perancangan Finite State Machine sebelum pengimplementasiannya. Pada praktikum ini, desain rangkaian logika tersebut akan diimplementasikan menggunakan bahasa VHDL dan board FPGA. Proyek perancangan rangkaian digital yang telah dibuat oleh praktikan adalah sebuah permainan BricksBreaker sederhana. Simulasi ini terintegrasi dengan modul VGA, sehingga BricksBreaker dapat dimainkan pada display LCD. Kompilasi dilakukan menggunakan ALTERA QUARTUS serta implementasi menggunakan board FPGA DE-1. Kata kunci: Perancangan Rangkaian Digital, BricksBreaker, FSM, VHDL. 1. PENDAHULUAN Laporan ini adalah lanjutan laporan tugas akhir praktikum sistem digital yang sudah dikerjakan pada praktikum modul 6 pertemuan sebelumnya, sebagian besar adalah mengenai progress akhir lanjutan pengerjaan proyek tugas besar ini. Pengerjaan tugas akhir praktikum sistem digital pada tahapan pertama telah memenuhi sekitar 50 % target atau spesifikasi awal. Kriteria spesifikasi dari tugas ini sudah di cantumkan dalam laporan awal tahap pertama. Sedangkan hal hal yang dikerjakan setelah pengerjaan 50 % bagian pertama adalah BCD-to-7-Segment, pin planner untuk input/output, pendeteksi pantulan serta kotak yang dipantulkan, maupun state seperti kondisi menang maupun kalah. Selain itu, tedapat switch pada SW[0] yang berfungsi untuk mengatur kecepatan bricks (mode mudah / sulit), serta tombol reset pada push_button sementara beberapa hal yang akan dicoba pada percobaan selanjutnya adalah penambahan bricks serta collision detection antara bricks dengan kotak yang dipantulkan. Perancangan ini akan dibuat menggunakan struktur data array dari tipe bentukan bricks. Selain itu, akan dilakukan perbaikan terhadap skematik dari FSM yang digunakan maupun optimasi pada script diatas. Pengujian sistem yang telah didesain menggunakan FPGA bertipe DE-1, yang diintegrasikan dengan display LCD, pengerjaan interface tugas meliputi state awal permainan dan interface warna display background permainan, dan beberapa penyempurnaan lainnya. Selain itu hal hal lain yang akan dibahas adalah mengenai proses desain, penjelasan kode VHDL yang dipakai, beberapa hasil implementasi pada layar LCD dan pada FPGA. Selain itu dalam pengumpulan laporan akan disertakan beberapa kode yang dipakai dan tampilan beberapa state dalam permainan/ tugas akhir yang telah dibuat. Bagian tiga dari laporan ini membahas mengenai beberapa kode yang Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 1

description

Laporan Praktikum 6 Bagian II Video : http://www.youtube.com/watch?v=t8o3e3xG6NA

Transcript of Proyek Perancangan Rangkaian Digital Bagian II

Page 1: Proyek Perancangan Rangkaian Digital Bagian II

MODUL 6 PROYEK PERANCANGAN RANGKAIAN DIGITAL (Bagian II)

Iskandar Setiadi (13511073)Yusuf Fajar Ardiana (18011049)

Asisten: Fajar Arief P. / 13209099Tanggal Percobaan: 6/12/2012

EL2195-Praktikum Sistem DigitalLaboratorium Dasar Teknik Elektro - Sekolah Teknik Elektro dan Informatika ITB

Abstrak

Pada praktikum Sistem Digital sebelumnya, kita telah merancang sebuah desain rangkaian logika yang bersifat interaktif dan terimplementasikan modul VGA. Proyek perancangan ini didukung dengan perancangan Finite State Machine sebelum pengimplementasiannya. Pada praktikum ini, desain rangkaian logika tersebut akan diimplementasikan menggunakan bahasa VHDL dan board FPGA. Proyek perancangan rangkaian digital yang telah dibuat oleh praktikan adalah sebuah permainan BricksBreaker sederhana. Simulasi ini terintegrasi dengan modul VGA, sehingga BricksBreaker dapat dimainkan pada display LCD. Kompilasi dilakukan menggunakan ALTERA QUARTUS serta implementasi menggunakan board FPGA DE-1.

Kata kunci: Perancangan Rangkaian Digital, BricksBreaker, FSM, VHDL.

1. PENDAHULUAN

Laporan ini adalah lanjutan laporan tugas akhir praktikum sistem digital yang sudah dikerjakan pada praktikum modul 6 pertemuan sebelumnya, sebagian besar adalah mengenai progress akhir lanjutan pengerjaan proyek tugas besar ini. Pengerjaan tugas akhir praktikum sistem digital pada tahapan pertama telah memenuhi sekitar 50 % target atau spesifikasi awal. Kriteria spesifikasi dari tugas ini sudah di cantumkan dalam laporan awal tahap pertama. Sedangkan hal hal yang dikerjakan setelah pengerjaan 50 % bagian pertama adalah BCD-to-7-Segment, pin planner untuk input/output, pendeteksi pantulan serta kotak yang dipantulkan, maupun state seperti kondisi menang maupun kalah. Selain itu, tedapat switch pada SW[0] yang berfungsi untuk mengatur kecepatan bricks (mode mudah / sulit), serta

tombol reset pada push_button sementara beberapa hal yang akan dicoba pada percobaan selanjutnya adalah penambahan bricks serta collision detection antara bricks dengan kotak yang dipantulkan. Perancangan ini akan dibuat menggunakan struktur data array dari tipe bentukan bricks. Selain itu, akan dilakukan perbaikan terhadap skematik dari FSM yang digunakan maupun optimasi pada script diatas.

Pengujian sistem yang telah didesain menggunakan FPGA bertipe DE-1, yang diintegrasikan dengan display LCD, pengerjaan interface tugas meliputi state awal permainan dan interface warna display background permainan, dan beberapa penyempurnaan lainnya. Selain itu hal hal lain yang akan dibahas adalah mengenai proses desain, penjelasan kode VHDL yang dipakai, beberapa hasil implementasi pada layar LCD dan pada FPGA. Selain itu dalam pengumpulan laporan akan disertakan beberapa kode yang dipakai dan tampilan beberapa state dalam permainan/ tugas akhir yang telah dibuat. Bagian tiga dari laporan ini membahas mengenai beberapa kode yang digunakan dalam pembuatan tugas besar ini. Sedangkan bagian empat adalah pembahasan berkenaan dengan proses desain, strategi pengerjaan dan pembagian kerja, beberapa hasil implementasi , perbandingan spesifikasi awal dengan hasil akhir percobaan ini serta kesimpulan hasil pengerjaan tugas besar.

2. STUDI PUSTAKA

Perancangan suatu proyek rangkaian digital dapat dilakukan dengan berbagai macam struktur formal, seperti table kebenaran diagram keadaan, FSM, dan metode-metode pemodelan lain. Setelah suatu rangkaian digital dirancang, hal selanjutnya yang dilakukan adalah mengimplementasikan rangkaian digital tersebut dalam piranti yang sesuai, dalam percobaan ini yaitu bahasa VHDL serta board FPGA.

Setelah proses implementasi berhasil dilaksanakan, maka diperlukan suatu strategi pengujian yang baik untuk

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB1

Page 2: Proyek Perancangan Rangkaian Digital Bagian II

menganalisis sistem yang telah dibuat tersebut.

Proyek perancangan ini menggunakan berbagai macam komponen yang telah diimplementasikan pada praktikum-praktikum sebelumnya, seperti Clock untuk mengatur framerate pada display LCD, Counter yang diimplementasikan dalam BCD-to-7-Segment yang berfungsi untuk menampilkan angka pada layar, maupun modul VGA yang berfungsi untuk mengubah sinyal-sinyal menjadi tampilan pada layar LCD.

2.1 BCD-TO-7-SEGMENT

Pada perancangan proyek rangkain digital ini, salah satu komponen yang digunakan adalah BCD-to-7-Segment. BCD-to-7-Segment ini akan menerima masukkan sebuah bilangan integer yang telah dikonversikan menjadi bilangan biner 4-bit. Komponen ini akan mencetak tampilan angka pada keluaran sinyal 7-bit.. Gambar 2-1 berikut menunjukkan tabel kebenaran dan tampilan yang dihasilkan oleh BCD-to-7-Segment, [4]:

Gambar 2-1 BCD-to-7-Segment

Gambar 2-1 diatas merupakan representasi dari tampilkan skor yang akan dicetak dilayar (kiri bawah).

2.2 MODUL VGA DRIVER

Salah satu bagian paling penting dari perancangan proyek rangkaian digital ini adalah modul VGA driver.Modul VGA, atau yang dikenal dengan Video Graphics Array, berfungsi untuk mepresentasikan masukkan logika FPGA menjadi tampilan warna pada layar display LCD.

Modul ini menerima masukkan port yang ingin dinyalakan, dan mengkonversikan masukkan menjadi warna pada layar (RGB). Hal ini dilakukan dengan suatu proses

scanning, yaitu mensinkronisasikan sinyal sync dengan sinyal RGB menjadi suatu tampilan display.

Gambar 2-2 berikut menunjukkan salah satu proses sinkronisasi sinyal yang dieksekusi pada layar LCD.

Gambar 2-2 Scanning pada layar LCD

3. METODOLOGI

3.1 ALAT PERCOBAAN

Board FPGA tipe DE-1

Catu daya + kabel dan konektor tambahan serta kabel downloader

Monitor LCD

3.2 PROSEDUR PERCOBAAN

Pada percobaan sebelumnya, kita telah merancang desain awal darian rangkaian digital yang akan diimplementasikan. Pada percobaan ini, rangkaian digital yang dibuat mengintegrasikan berbagai macam modul yang telah kita pelajari pada praktikum-praktikum sebelumnya. Dalam proses perancangan proyek perancangan rangkaian digital ini, kami menggunakan 5 buah files VHDL, yaitu bricksbreaker.vhd, Bricks_MainGame.vhd, clockdiv.vhd, vga.vhd, dan Bcd_7seg.vhd. Gambar 3-1 berikut merepresentasikan desain awal dari

rangkaian yang telah didesain:

Gambar 3-1 Rancangan Awal BricksBreaker

Desain proyek rangkaian digital ini melalui beberapa tahapan, yaitu perancangan Mock-Up rangkaian, implementasi, debugging, dan final testing. Pada tahap awal, kami merancang desain tampilan serta FSM yang akan digunakan. Selanjutnya, kami mengkodekan FSM tersebut dalam kelima files VHDL yang telah disebutkan diatas. Setelah proses implementasi selesai dilakukan, hal selanjutnya yang kami lakukan adalah menge-load rancangan BricksBreaker

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB2

Page 3: Proyek Perancangan Rangkaian Digital Bagian II

kedalam board FPGA DE-1. Hal terakhir yang dilakukan adalah menguji coba semua masukkan yang mungkin diberikan serta melakukan penambahan detail yang masih dianggap kurang serta membuang beberapa detail yang dianggap tidak terlalu signifikan / perlu.

Rangkaian digital yang dibuat ini bersifat interaktif, artinya mampu menerima masukkan pengguna. Secara keseluruhan, proyek ini menerima 4 buah masukkan dari board FPGA, yaitu:

- 3 push_button (arah kiri ([3]), arah kanan ([2]), tombol reset ([1]))

- 1 switch (kecepatan bola / kotak yang dipantulkan (SW[0]))

Selain itu, terdapat beberapa buah state utama dalam rangkaian digital ini, yaitu state awal permainan, state permainan, state menang¸ dan state kalah.

Pembagian tugas yang kami lakukan dalam pengerjaan proyek ini adalah sebagai berikut:

- Iskandar Setiadi (13511073) :

Merealisasikan sistem permainan, yaitu bagaimana bola / kotak mengenai pantulan, bricks, maupun kecepatan dari pergerakan bola / kotak serta papan pantulan yang ada di layar. Selain itu, menghubungkan keluaran skor permainan dengan BCD-to-7-Segment.

- Yusuf Fajar Ardiana (18011049) :

Membuat animasi halaman utama (Tulisan “BRICK BREAKER”) dan membuat BCD-to-7-Segment beserta tampilannya. Selain itu, membuat lampu state menang maupun kalah disebelah kanan bawah layar.

3.3 SCRIPT VHDL IMPLEMENTASI

1. BricksBreaker.vhd

Bagian ini merupakan realisasi dari top_level_entity dari proyek perancangan rangkaian digital yang telah kami buat. Kode ini memiliki fungsi untuk menghubungkan antar script VHDL yang telah dibuat dan digunakan dalam proyek ini menggunakan PORT MAP. Penjelasan dari masing-masing bagian pada script ini dituliskan dalam bentuk komentar (warna hijau) dari script dibawah ini:

-- Created by Iskandar Setiadi - freedomofkeima and Yusuf Fajar Ardiana

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

USE IEEE.STD_LOGIC_ARITH.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL;

USE IEEE.MATH_REAL.ALL;

--Komponen utama bricksbreaker, menerima 4 masukkan dari pengguna, 1 clock, serta mengeluarkan sinyal untuk display LCD

ENTITY bricksbreaker IS

PORT(

PushKanan : IN STD_LOGIC; --Sebagai tombol arah kanan (RIGHT)

PushKiri : IN STD_LOGIC; --Sebagai tombol arah kiri (LEFT)

Reset : IN STD_LOGIC; --Sebagai tombol untuk mengulang permainan

LevelMode : IN STD_LOGIC; --Untuk mengatur kecepatan bujursangkar

ClockSystem : IN STD_LOGIC; --CLOCK AUTOMATIC dari sistem

VGA_R : OUT STD_LOGIC_VECTOR( 5 DOWNTO 0 );

VGA_G : OUT STD_LOGIC_VECTOR( 5 DOWNTO 0 );

VGA_B : OUT STD_LOGIC_VECTOR( 5 DOWNTO 0 );

VGA_HS : OUT STD_LOGIC;

VGA_VS : OUT STD_LOGIC;

VGA_CLK : OUT STD_LOGIC;

VGA_BLANK : OUT STD_LOGIC);

END bricksbreaker;

ARCHITECTURE behavioral OF bricksbreaker IS

--Sinyal sinyal untuk proses scanning pixel pada layar

SIGNAL red : STD_LOGIC_VECTOR (5 DOWNTO 0);

SIGNAL green : STD_LOGIC_VECTOR (5 DOWNTO 0);

SIGNAL blue : STD_LOGIC_VECTOR (5 DOWNTO 0);

SIGNAL red_color : STD_LOGIC_VECTOR (7 DOWNTO 0);

SIGNAL green_color : STD_LOGIC_VECTOR (7 DOWNTO 0);

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB3

Page 4: Proyek Perancangan Rangkaian Digital Bagian II

SIGNAL blue_color : STD_LOGIC_VECTOR (7 DOWNTO 0);

SIGNAL pixel_row : STD_LOGIC_VECTOR (9 DOWNTO 0);

SIGNAL pixel_column : STD_LOGIC_VECTOR (9 DOWNTO 0);

SIGNAL red_on : STD_LOGIC;

SIGNAL green_on : STD_LOGIC;

SIGNAL blue_on : STD_LOGIC;

--Mengintegrasikan modul vga

COMPONENT vga IS

PORT(

i_clk : IN STD_LOGIC;

i_red : IN STD_LOGIC;

i_green : IN STD_LOGIC;

i_blue : IN STD_LOGIC;

--Untuk menentukan warna keluaran

o_red : OUT STD_LOGIC;

o_green : OUT STD_LOGIC;

o_blue : OUT STD_LOGIC;

--Untuk sinkronisasi sinyal sync

o_horiz_sync : OUT STD_LOGIC;

o_vert_sync : OUT STD_LOGIC;

--Untuk menentukan koordinat pixel pada layar LCD

o_pixel_row : OUT STD_LOGIC_VECTOR( 9 DOWNTO 0 );

o_pixel_column : OUT STD_LOGIC_VECTOR( 9 DOWNTO 0 ));

END COMPONENT;

COMPONENT Bricks_MainGame IS

PORT(

PushKanan : IN STD_LOGIC; --Sebagai tombol arah kanan (RIGHT)

PushKiri : IN STD_LOGIC; --Sebagai tombol arah kiri (LEFT)

Reset : IN STD_LOGIC; --Sebagai tombol untuk mengulang permainan

LevelMode : IN STD_LOGIC; --Untuk mengatur kecepatan bujursangkar

ClockSystem : IN STD_LOGIC; --CLOCK AUTOMATIC dari sistem

i_pixel_column : IN STD_LOGIC_VECTOR( 9 DOWNTO 0 );

i_pixel_row : IN STD_LOGIC_VECTOR( 9 DOWNTO 0 );

o_red : OUT STD_LOGIC_VECTOR( 7 DOWNTO 0 );

o_green : OUT STD_LOGIC_VECTOR( 7 DOWNTO 0 );

o_blue : OUT STD_LOGIC_VECTOR( 7 DOWNTO 0 ));

--Keluaran sebagai sinyal warna RGB

END COMPONENT;

BEGIN

--Melakukan PORT MAP modul vga

vga_driver0 : vga

PORT MAP (

i_clk => ClockSystem,

i_red => '1',

i_green => '1',

i_blue => '1',

o_red => red_on,

o_green => green_on,

o_blue => blue_on,

o_horiz_sync => VGA_HS,

o_vert_sync => VGA_VS,

o_pixel_row => pixel_row,

o_pixel_column => pixel_column);

--Melakukan PORT MAP main game

maingame : Bricks_MainGame

PORT MAP (

PushKanan => PushKanan,

PushKiri => PushKiri,

Reset => Reset,

LevelMode => LevelMode,

ClockSystem => ClockSystem,

i_pixel_column => pixel_column,

i_pixel_row => pixel_row,

o_red => red_color,

o_green => green_color,

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB4

Page 5: Proyek Perancangan Rangkaian Digital Bagian II

o_blue => blue_color);

red <= red_color (7 DOWNTO 2) ;

green <= green_color(7 DOWNTO 2) ;

blue <= blue_color (7 DOWNTO 2) ;

--Melakukan pemrosesan, menerima masukkan logika sinyal warna dan mengirimkannya ke VGA

PROCESS(red_on,green_on,blue_on,red,green,blue)

BEGIN

IF (red_on = '1' ) THEN VGA_R <= red; -- Jika merah aktif

ELSE VGA_R <= "000000";

END IF;

IF (green_on = '1' ) THEN VGA_G <= green; -- Jika hijau aktif

ELSE VGA_G <= "000000";

END IF;

IF (blue_on = '1' ) THEN VGA_B <= blue; -- Jika biru aktif

ELSE VGA_B <= "000000";

END IF;

END PROCESS;

END behavioral;

-- All Rights Reserved 2012

2. Bricks_MainGame.vhd

Bagian ini merupakan bagian utama dari permainan, serta bagian dimana FSM direalisasikan. Secara umum, semua proses yang berlangsung dalam kode ini dihubungkan dengan komponen clockdiv, yang berfungsi untuk mengatur waktu / framerate dari tampilan layar LCD. Semua state dari perancangan rangkaian digital yang telah dibuat (halaman utama, pantulan, bola, skor, lampu state, bricks) direalisasikan dalam bagian ini. Penjelasan dari masing-masing bagian dituliskan dalam bentuk komentar (warna hijau) dari script berikut:

-- Created by Iskandar Setiadi - freedomofkeima and Yusuf Fajar Ardiana

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;

USE IEEE.MATH_REAL.ALL;

ENTITY Bricks_MainGame IS

PORT(

PushKanan : IN STD_LOGIC; --Sebagai tombol arah kanan (RIGHT), Tombol ke-1

PushKiri : IN STD_LOGIC; --Sebagai tombol arah kiri (LEFT), Tombol ke-2

Reset : IN STD_LOGIC; --Sebagai tombol untuk mengulang permainan, Tombol ke-3

LevelMode : IN STD_LOGIC; --Untuk mengatur kecepatan bujursangkar

ClockSystem : IN STD_LOGIC; --CLOCK AUTOMATIC dari sistem

i_pixel_column : IN STD_LOGIC_VECTOR( 9 DOWNTO 0 );

i_pixel_row : IN STD_LOGIC_VECTOR( 9 DOWNTO 0 );

o_red : OUT STD_LOGIC_VECTOR( 7 DOWNTO 0 );

o_green : OUT STD_LOGIC_VECTOR( 7 DOWNTO 0 );

o_blue : OUT STD_LOGIC_VECTOR( 7 DOWNTO 0 ));

--Keluaran sebagai sinyal warna RGB

END Bricks_MainGame;

ARCHITECTURE behavioral OF Bricks_MainGame IS

--Tipe eksekusi FSM

TYPE executionStage IS (s1,s2,s3,s4,s5);

SIGNAL currentstate, nextstate : executionStage;

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB5

Page 6: Proyek Perancangan Rangkaian Digital Bagian II

--Tipe bentukan bricks

TYPE BRICKSELMT IS

RECORD

BATASKIRI : INTEGER;

BATASKANAN : INTEGER;

BATASATAS : INTEGER;

BATASBAWAH : INTEGER;

ISHIDUP : BOOLEAN;

END RECORD;

TYPE BRICKSTYPE IS ARRAY (0 TO 8) OF BRICKSELMT; --Mendefinisikan tipe bentukan dalam array

SIGNAL BRICKS : BRICKSTYPE; --Variabel yang akan digunakan, misal BRICKS(0).BATASKIRI

SHARED VARIABLE ISKENABRICKS : BOOLEAN := FALSE; --Jika bola mengenai bricks

--Untuk mengatur arah pantulan bola

SHARED VARIABLE ROTASIX : INTEGER := 1;

SHARED VARIABLE ROTASIY : INTEGER := -1;

CONSTANT TVD : INTEGER := 479; --THD, batas horizontal layar

CONSTANT THD : INTEGER := 639; --TVD, batas vertikal layar

--Batas arah bujur sangkar yang akan digerakkan

--Ubah bentuknya menjadi bola // menggunakan persamaan kuadrat x^2 + y^2

SHARED VARIABLE BOLAATAS : INTEGER := 340;

SHARED VARIABLE BOLAKIRI : INTEGER := 295;

SHARED VARIABLE BOLAKANAN : INTEGER := 344;

SHARED VARIABLE BOLABAWAH : INTEGER := 389;

--Untuk mengatur posisi papan pemantul

SHARED VARIABLE PAPANKIRI : INTEGER := 260;

SHARED VARIABLE PAPANKANAN : INTEGER := 380;

SHARED VARIABLE PAPANATAS : INTEGER := 390;

SHARED VARIABLE PAPANBAWAH : INTEGER := 400;

--Mengatur posisi Counter dari BCD-to-7-Segment, Koordinat X

SHARED VARIABLE X1 : INTEGER := 20;

SHARED VARIABLE X2 : INTEGER := 25;

SHARED VARIABLE X3 : INTEGER := 40;

SHARED VARIABLE X4 : INTEGER := 45;

--Mengatur posisi Counter dari BCD-to-7-Segment, Koordinat Y

SHARED VARIABLE Y1 : INTEGER := 410;

SHARED VARIABLE Y2 : INTEGER := 415;

SHARED VARIABLE Y3 : INTEGER := 430;

SHARED VARIABLE Y4 : INTEGER := 435;

SHARED VARIABLE Y5 : INTEGER := 450;

SHARED VARIABLE Y6 : INTEGER := 455;

--Mengatur lampu state menang dan kalah

SHARED VARIABLE X5 : INTEGER := 400;

SHARED VARIABLE X6 : INTEGER := 500;

SHARED VARIABLE X7 : INTEGER := 600;

SHARED VARIABLE IsKalah : BOOLEAN := FALSE;

SHARED VARIABLE IsMenang: BOOLEAN := FALSE;

--Mengatur kondisi lampu untuk counter

SIGNAL IsCounter : STD_LOGIC_VECTOR (6 downto 0) := "0000000";

--Mengatur skor dari permainan

SHARED VARIABLE SCORE : INTEGER := 0;

SIGNAL BCDPortInput : STD_LOGIC_VECTOR (3 downto 0) := "0000";

--Mengatur kecepatan dari bujur sangkar

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB6

Page 7: Proyek Perancangan Rangkaian Digital Bagian II

SHARED VARIABLE SPEED : INTEGER := 0;

--Clock sebagai buffer CLOCKDIV

SIGNAL clock40hz : STD_LOGIC;

--Variabel Homepage

SHARED VARIABLE COUNTERHOME : INTEGER := 0;

SHARED VARIABLE ISHOME : BOOLEAN := TRUE;

--Komponen Clockdiv digunakan agar pergerakan bujur sangkar dapat terlihat oleh pengguna

COMPONENT CLOCKDIV IS

port( CLK: IN std_logic;

DIVOUT: buffer std_logic);

end component;

--Komponen BCD to 7 Segment untuk mengkonversikan skor menjadi tampilan

COMPONENT Bcd_7seg

PORT ( D0, D1, D2, D3 : IN STD_LOGIC ;

A, B, C, D, E, F, G : OUT STD_LOGIC );

END COMPONENT;

BEGIN

PROCESS

BEGIN

WAIT UNTIL (clock40hz'EVENT) AND (clock40hz = '1');

--Melakukan konversi skor menjadi binary 4 bit

BCDPortInput <= STD_LOGIC_VECTOR(TO_UNSIGNED(SCORE, 4));

--Untuk mereset / mengulang permainan

IF (Reset = '0') THEN

--Memasuki state homepage

currentstate <= s1;

ELSE

currentstate <= nextstate;

END IF;

END PROCESS;

PROCESS(currentstate, i_pixel_row,i_pixel_column, PushKanan, PushKiri, LevelMode, IsCounter, Bricks)

BEGIN

IF (clock40hz'EVENT) AND (clock40hz = '1') THEN

--Mengatur kecepatan bujursangkar sesuai dengan state SW[0]

CASE currentstate IS

WHEN s1 =>

--Homepage Permainan

COUNTERHOME := COUNTERHOME + 1;

IF COUNTERHOME < 50 THEN

ISHOME := TRUE;

nextstate <= currentstate;

ELSE

nextstate <= s2;

ISHOME := FALSE;

COUNTERHOME := 0;

END IF;

WHEN s2 =>

--Inisialisasi Variabel

IsKalah := FALSE;

BOLAATAS := 340;

BOLABAWAH := 359;

BOLAKIRI := 305;

BOLAKANAN := 324;

PAPANKIRI := 260;

PAPANKANAN := 380;

PAPANATAS := 390;

PAPANBAWAH := 400;

SCORE := 0;

ISMENANG := FALSE;

ISKALAH := FALSE;

--Inisialisasi Bricks

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB7

Page 8: Proyek Perancangan Rangkaian Digital Bagian II

FOR i IN 0 TO 2 LOOP -- Looping untuk variabel i

FOR j IN 0 TO 2 LOOP -- Looping untuk variabel j

BRICKS(i + (j*3)).BATASKIRI <= 150 + (j * 150);

BRICKS(i + (j*3)).BATASKANAN <= 200 + (j * 150);

BRICKS(i + (j*3)).BATASATAS <= 50 + (i * 80);

BRICKS(i + (j*3)).BATASBAWAH <= 80 + (i * 80);

BRICKS(i + (j*3)).ISHIDUP <= TRUE;

END LOOP;

END LOOP;

nextstate <= s3;

WHEN s3 =>

IF LevelMode = '1' THEN

SPEED := 2; --saat SW[0] = '1' maka mode lambat

ELSE

SPEED := 5; --saat SW[0] = '0' maka mode cepat

END IF;

IF BOLAATAS <= 0 THEN ROTASIY := 1;

ELSIF BOLABAWAH >= TVD THEN ROTASIY := -1;

ELSE ROTASIY := ROTASIY;

END IF;

IF BOLAKIRI <= 0 THEN ROTASIX := 1;

ELSIF BOLAKANAN >= THD THEN ROTASIX := -1;

ELSE ROTASIX := ROTASIX;

END IF;

--Kondisi Papan, PAPANATAS = 390

IF (BOLABAWAH >= PAPANATAS) AND (BOLABAWAH <= PAPANBAWAH) THEN

--Jika sumbu x bola Valid

IF ((BOLAKANAN >= PAPANKIRI) AND (BOLAKANAN <= PAPANKANAN)) OR ((BOLAKIRI >= PAPANKIRI) AND (BOLAKIRI <= PAPANKANAN)) THEN

--Inversi arah Y

IF ROTASIY = 1 THEN ROTASIY := -1;

ELSE ROTASIY := 1;

END IF;

END IF;

END IF;

--Kondisi masih hijau (lampu merah belum menyala)

IF BOLABAWAH <= 395 THEN

BOLAATAS := BOLAATAS + ROTASIY * SPEED;

BOLABAWAH := BOLABAWAH + ROTASIY * SPEED;

BOLAKIRI := BOLAKIRI + ROTASIX * SPEED;

BOLAKANAN := BOLAKANAN + ROTASIX * SPEED;

END IF;

FOR i IN 0 TO 8 LOOP

IF (BRICKS(i).ISHIDUP) THEN

ISKENABRICKS := FALSE; --Inisialisasi Variabel

--Mengecek apakah Bola mengenai Bricks

--Bagian Atas

IF (BOLABAWAH >= BRICKS(i).BATASATAS) AND (BOLABAWAH <= BRICKS(i).BATASBAWAH) THEN

--Jika sumbu x bola Valid

IF ((BOLAKANAN >= BRICKS(i).BATASKIRI) AND (BOLAKANAN <= BRICKS(i).BATASKANAN)) OR ((BOLAKIRI >= BRICKS(i).BATASKIRI) AND (BOLAKIRI <= BRICKS(i).BATASKANAN)) THEN

--Melakukan Inversi arah Y dari 1 ke -1 (Pantulan arah atas)

ROTASIY := -1;

--Menghancurkan brick

ISKENABRICKS := TRUE;

END IF;

END IF;

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB8

Page 9: Proyek Perancangan Rangkaian Digital Bagian II

--Bagian Kiri

IF (BOLAKANAN >= BRICKS(i).BATASKIRI) AND (BOLAKANAN <= BRICKS(i).BATASKANAN) THEN

--Jika sumbu x bola Valid

IF ((BOLAATAS >= BRICKS(i).BATASATAS) AND (BOLAATAS <= BRICKS(i).BATASBAWAH)) OR ((BOLABAWAH >= BRICKS(i).BATASATAS) AND (BOLABAWAH <= BRICKS(i).BATASBAWAH)) THEN

--Melakukan Inversi arah X dari 1 ke -1 (Pantulan arah kiri)

ROTASIX := -1;

--Menghancurkan brick

ISKENABRICKS := TRUE;

END IF;

END IF;

--Bagian Kanan

IF (BOLAKIRI >= BRICKS(i).BATASKIRI) AND (BOLAKIRI <= BRICKS(i).BATASKANAN) THEN

--Jika sumbu x bola Valid

IF ((BOLAATAS >= BRICKS(i).BATASATAS) AND (BOLAATAS <= BRICKS(i).BATASBAWAH)) OR ((BOLABAWAH >= BRICKS(i).BATASATAS) AND (BOLABAWAH <= BRICKS(i).BATASBAWAH)) THEN

--Melakukan Inversi arah X dari -1 ke 1 (Pantulan arah kanan)

ROTASIX := 1;

--Menghancurkan brick

ISKENABRICKS := TRUE;

END IF;

END IF;

--Bagian Bawah

IF (BOLAATAS >= BRICKS(i).BATASATAS) AND (BOLAATAS <= BRICKS(i).BATASBAWAH) THEN

--Jika sumbu x bola Valid

IF ((BOLAKANAN >= BRICKS(i).BATASKIRI) AND (BOLAKANAN <= BRICKS(i).BATASKANAN)) OR ((BOLAKIRI >= BRICKS(i).BATASKIRI) AND (BOLAKIRI <= BRICKS(i).BATASKANAN)) THEN

--Melakukan Inversi arah Y dari -1 ke 1 (Pantulan arah bawah)

ROTASIY := 1;

--Menghancurkan brick

ISKENABRICKS := TRUE;

END IF;

END IF;

--Jika Bola mengenai Bricks, hancurkan Bricks, Tambahkan Skor

IF (ISKENABRICKS) THEN

BRICKS(i).ISHIDUP <= FALSE;

--Menambahkan Skor

SCORE := SCORE + 1;

END IF;

END IF;

END LOOP;

--Mengatur pergerakan papan

IF (PushKanan = '0') AND (PushKiri = '1') THEN -- Arah Kanan

PAPANKIRI := PAPANKIRI + 5;

PAPANKANAN := PAPANKANAN + 5;

IF PAPANKIRI >= THD - (380 - 260) THEN --Jika Papan mencapai batas kanan

PAPANKIRI := THD - (380 - 260);

PAPANKANAN := THD;

END IF;

ELSIF (PushKanan = '1') AND (PushKiri = '0') THEN -- Arah Kiri

PAPANKIRI := PAPANKIRI - 5;

PAPANKANAN := PAPANKANAN - 5;

IF PAPANKANAN <= (380 - 260) THEN -- Jika Papan mencapai batas kiri

PAPANKIRI := 0;

PAPANKANAN := 380 - 260;

END IF;

ELSE

PAPANKIRI := PAPANKIRI;

PAPANKANAN := PAPANKANAN;

END IF;

IF BOLABAWAH > 395 THEN

nextstate <= s4;

ELSIF SCORE = 9 THEN

nextstate <= s5;

ELSE nextstate <= currentstate;

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB9

Page 10: Proyek Perancangan Rangkaian Digital Bagian II

END IF;

WHEN s4 =>

IsKalah := TRUE;

nextstate <= currentstate;

WHEN s5 =>

IsMenang := TRUE;

nextstate <= currentstate;

END CASE;

END IF;

--Untuk mengatur posisi

IF ISHOME THEN

--Menampilkan posisi layar Home

--huruf B

IF ((i_pixel_row > 10) AND (i_pixel_row <120) ) AND ((i_pixel_column >= 120) AND (i_pixel_column < 150) AND (COUNTERHOME >= 3) ) THEN

o_red <= X"FF"; o_green <= X"00"; o_blue <= X"00"; --kotak B paling pinggir

ELSIF((i_pixel_row > 10) AND (i_pixel_row < 30) ) AND ((i_pixel_column >= 150) AND (i_pixel_column < 220) AND (COUNTERHOME >= 3) ) THEN

o_red <= X"FF"; o_green <= X"00"; o_blue <= X"00"; --kotak B pertama atas

ELSIF((i_pixel_row >= 30) AND (i_pixel_row < 100) ) AND ((i_pixel_column >= 190) AND (i_pixel_column < 220) AND (COUNTERHOME >= 3) ) THEN

o_red <= X"FF"; o_green <= X"00"; o_blue <= X"00"; -- kotak B paling kanan

ELSIF ((i_pixel_row > 55) AND (i_pixel_row <75) ) AND ((i_pixel_column >= 150) AND (i_pixel_column < 190) AND (COUNTERHOME >= 3) ) THEN

o_red <= X"FF"; o_green <= X"00"; o_blue <= X"00"; -- kotak B tengah

ELSIF ((i_pixel_row >= 100) AND (i_pixel_row < 120) ) AND ((i_pixel_column >= 150) AND

(i_pixel_column <220) AND (COUNTERHOME >= 3) ) THEN

o_red <= X"FF"; o_green <= X"00"; o_blue <= X"00"; -- kotak B paling bawah

--huruf R

ELSIF ((i_pixel_row > 10) AND (i_pixel_row <120 ) ) AND ((i_pixel_column >= 230) AND (i_pixel_column < 260) AND (COUNTERHOME >= 6) ) THEN

o_red <= X"FF"; o_green <= X"00"; o_blue <= X"00"; -- kotak R paling KIRI

ELSIF ((i_pixel_row > 10) AND (i_pixel_row <30 ) ) AND ((i_pixel_column >= 260) AND (i_pixel_column < 330) AND (COUNTERHOME >= 6) ) THEN

o_red <= X"FF"; o_green <= X"00"; o_blue <= X"00"; -- kotak R paling atas

ELSIF ((i_pixel_row >= 30) AND (i_pixel_row <50 ) ) AND ((i_pixel_column >= 300) AND (i_pixel_column < 330) AND (COUNTERHOME >= 6) ) THEN

o_red <= X"FF"; o_green <= X"00"; o_blue <= X"00"; -- kotak R paling kanan atas

ELSIF ((i_pixel_row >= 50) AND (i_pixel_row <70) ) AND ((i_pixel_column >= 260) AND (i_pixel_column < 330) AND (COUNTERHOME >= 6) ) THEN

o_red <= X"FF"; o_green <= X"00"; o_blue <= X"00"; -- kotak R paling tengah

ELSIF ((i_pixel_row >= 70) AND (i_pixel_row <120 ) ) AND ((i_pixel_column >= 300) AND (i_pixel_column < 330) AND (COUNTERHOME >= 6) ) THEN

o_red <= X"FF"; o_green <= X"00"; o_blue <= X"00"; -- kotak R paling kanan bawah

-- huruf I

ELSIF ((i_pixel_row > 10) AND (i_pixel_row <120 ) ) AND ((i_pixel_column >= 340) AND (i_pixel_column < 370) AND (COUNTERHOME >= 9) ) THEN

o_red <= X"FF"; o_green <= X"00"; o_blue <= X"00"; -- kotak i

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB10

Page 11: Proyek Perancangan Rangkaian Digital Bagian II

-- huruf C

ELSIF ((i_pixel_row > 10) AND (i_pixel_row <120 ) ) AND ((i_pixel_column >= 380) AND (i_pixel_column < 410) AND (COUNTERHOME >= 12) ) THEN

o_red <= X"FF"; o_green <= X"00"; o_blue <= X"00"; -- kotak ckiri

ELSIF ((i_pixel_row > 10) AND (i_pixel_row <30) ) AND ((i_pixel_column >= 410) AND (i_pixel_column < 450) AND (COUNTERHOME >= 12) ) THEN

o_red <= X"FF"; o_green <= X"00"; o_blue <= X"00"; -- kotak c atas

ELSIF ((i_pixel_row >100) AND (i_pixel_row <120 ) ) AND ((i_pixel_column >= 410) AND (i_pixel_column < 450) AND (COUNTERHOME >= 12) ) THEN

o_red <= X"FF"; o_green <= X"00"; o_blue <= X"00"; -- kotak c bawah

-- huruf K

ELSIF ((i_pixel_row > 10) AND (i_pixel_row <120 ) ) AND ((i_pixel_column >= 460) AND (i_pixel_column < 490) AND (COUNTERHOME >= 15) ) THEN

o_red <= X"FF"; o_green <= X"00"; o_blue <= X"00"; -- kotak k kiri

ELSIF ((i_pixel_row > 45) AND (i_pixel_row <65 ) ) AND ((i_pixel_column >= 490) AND (i_pixel_column < 500) AND (COUNTERHOME >= 15) ) THEN

o_red <= X"FF"; o_green <= X"00"; o_blue <= X"00"; -- kotak k tengah

ELSIF ((i_pixel_row > 20) AND (i_pixel_row <45) ) AND ((i_pixel_column >= 500) AND (i_pixel_column < 525) AND (COUNTERHOME >= 15) ) THEN

o_red <= X"FF"; o_green <= X"00"; o_blue <= X"00"; -- kotak k kanan atas

ELSIF((i_pixel_row > 65) AND (i_pixel_row <120 ) ) AND ((i_pixel_column >= 500) AND (i_pixel_column < 525) AND (COUNTERHOME >= 15) ) THEN

o_red <= X"FF"; o_green <= X"00"; o_blue <= X"00"; -- kotak k kanan bawah

--HURUF B PADA BREAKER

ELSIF ((i_pixel_row > 130) AND (i_pixel_row <240) ) AND ((i_pixel_column >= 5) AND (i_pixel_column < 35) AND (COUNTERHOME >= 18) ) THEN

o_red <= X"FF"; o_green <= X"00"; o_blue <= X"00"; -- kotak b kiri

ELSIF((i_pixel_row > 130) AND (i_pixel_row <150) ) AND ((i_pixel_column >= 35) AND (i_pixel_column < 75) AND (COUNTERHOME >= 18) ) THEN

o_red <= X"FF"; o_green <= X"00"; o_blue <= X"00"; -- kotak b atas

ELSIF ((i_pixel_row >= 130) AND (i_pixel_row<= 240 ) ) AND ((i_pixel_column >= 75) AND (i_pixel_column < 105) AND (COUNTERHOME >= 18) ) THEN

o_red <= X"FF"; o_green <= X"00"; o_blue <= X"00"; -- kotak b kanan

ELSIF ((i_pixel_row > 175) AND (i_pixel_row <195 ) ) AND ((i_pixel_column >= 35) AND (i_pixel_column < 75) AND (COUNTERHOME >= 18) ) THEN

o_red <= X"FF"; o_green <= X"00"; o_blue <= X"00"; -- kotak b tengah

ELSIF ((i_pixel_row >220) AND (i_pixel_row <240 ) ) AND ((i_pixel_column >= 35) AND (i_pixel_column < 75) AND (COUNTERHOME >= 18) ) THEN

o_red <= X"FF"; o_green <= X"00"; o_blue <= X"00"; -- kotak b bawah

--huruf R

ELSIF ((i_pixel_row > 130) AND (i_pixel_row <240 ) ) AND ((i_pixel_column >= 115) AND (i_pixel_column <145) AND (COUNTERHOME >= 21) ) THEN

o_red <= X"FF"; o_green <= X"00"; o_blue <= X"00"; -- kotak R kiri

ELSIF ((i_pixel_row > 130) AND (i_pixel_row <150) ) AND ((i_pixel_column >= 145) AND (i_pixel_column < 185) AND (COUNTERHOME >= 21) ) THEN

o_red <= X"FF"; o_green <= X"00"; o_blue <= X"00"; -- kotak R atas

ELSIF ((i_pixel_row > 130) AND (i_pixel_row <240 ) ) AND ((i_pixel_column >= 185) AND (i_pixel_column < 215) AND (COUNTERHOME >= 21) ) THEN

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB11

Page 12: Proyek Perancangan Rangkaian Digital Bagian II

o_red <= X"FF"; o_green <= X"00"; o_blue <= X"00"; -- kotak R kanan

ELSIF ((i_pixel_row > 170) AND (i_pixel_row <190) ) AND ((i_pixel_column >= 145) AND (i_pixel_column < 185) AND (COUNTERHOME >= 21) ) THEN

o_red <= X"FF"; o_green <= X"00"; o_blue <= X"00"; -- kotak R tengah

-- huruf E

ELSIF ((i_pixel_row > 130) AND (i_pixel_row <240 ) ) AND ((i_pixel_column >= 225) AND (i_pixel_column < 255) AND (COUNTERHOME >= 24) ) THEN

o_red <= X"FF"; o_green <= X"00"; o_blue <= X"00"; -- kotak E kiri

ELSIF ((i_pixel_row > 130) AND (i_pixel_row <150 ) ) AND ((i_pixel_column >= 255) AND (i_pixel_column < 300) AND (COUNTERHOME >= 24) ) THEN

o_red <= X"FF"; o_green <= X"00"; o_blue <= X"00"; -- kotak E atas

ELSIF ((i_pixel_row > 170) AND (i_pixel_row <190 ) ) AND ((i_pixel_column >= 255) AND (i_pixel_column < 300) AND (COUNTERHOME >= 24) ) THEN

o_red <= X"FF"; o_green <= X"00"; o_blue <= X"00"; -- kotak E tengah

ELSIF ((i_pixel_row > 220) AND (i_pixel_row <240 ) ) AND ((i_pixel_column >= 255) AND (i_pixel_column < 300) AND (COUNTERHOME >= 24) ) THEN

o_red <= X"FF"; o_green <= X"00"; o_blue <= X"00"; -- kotak E bawah

-- huruf A

ELSIF ((i_pixel_row > 130) AND (i_pixel_row <240 ) ) AND ((i_pixel_column >= 310) AND (i_pixel_column < 340) AND (COUNTERHOME >= 27) ) THEN

o_red <= X"FF"; o_green <= X"00"; o_blue <= X"00"; -- kotak A kiri

ELSIF ((i_pixel_row > 130) AND (i_pixel_row <150 ) ) AND ((i_pixel_column >= 340) AND (i_pixel_column < 380) AND (COUNTERHOME >= 27) ) THEN

o_red <= X"FF"; o_green <= X"00"; o_blue <= X"00"; -- kotak A atas

ELSIF ((i_pixel_row > 130) AND (i_pixel_row <240 ) ) AND ((i_pixel_column >= 380) AND (i_pixel_column <410) AND (COUNTERHOME >= 27) ) THEN

o_red <= X"FF"; o_green <= X"00"; o_blue <= X"00"; -- kotak A kanan

ELSIF((i_pixel_row > 165) AND (i_pixel_row <185 ) ) AND ((i_pixel_column >= 340) AND (i_pixel_column < 380) AND (COUNTERHOME >= 27) ) THEN

o_red <= X"FF"; o_green <= X"00"; o_blue <= X"00"; -- kotak A tengah

-- huruf K

ELSIF ((i_pixel_row > 130) AND (i_pixel_row <240) ) AND ((i_pixel_column >= 415) AND (i_pixel_column < 445) AND (COUNTERHOME >= 30) ) THEN

o_red <= X"FF"; o_green <= X"00"; o_blue <= X"00"; -- kotak K kiri

ELSIF ((i_pixel_row > 165) AND (i_pixel_row <185 ) ) AND ((i_pixel_column >= 445) AND (i_pixel_column < 465) AND (COUNTERHOME >= 30) ) THEN

o_red <= X"FF"; o_green <= X"00"; o_blue <= X"00"; -- kotak K tengah

ELSIF ((i_pixel_row > 145) AND (i_pixel_row <165 ) ) AND ((i_pixel_column >= 465) AND (i_pixel_column < 485) AND (COUNTERHOME >= 30) ) THEN

o_red <= X"FF"; o_green <= X"00"; o_blue <= X"00"; -- kotak K atas kanan

ELSIF ((i_pixel_row > 185) AND (i_pixel_row <240 ) ) AND ((i_pixel_column >= 465) AND (i_pixel_column < 485) AND (COUNTERHOME >= 30) ) THEN

o_red <= X"FF"; o_green <= X"00"; o_blue <= X"00"; -- kotak K kanan bawah

-- HURUF E

ELSIF ((i_pixel_row > 130) AND (i_pixel_row <240 ) ) AND ((i_pixel_column >= 495) AND (i_pixel_column < 525) AND (COUNTERHOME >= 33) ) THEN

o_red <= X"FF"; o_green <= X"00"; o_blue <= X"00"; -- kotak E KIRI

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB12

Page 13: Proyek Perancangan Rangkaian Digital Bagian II

ELSIF ((i_pixel_row > 130) AND (i_pixel_row <150 ) ) AND ((i_pixel_column >= 525) AND (i_pixel_column < 565) AND (COUNTERHOME >= 33) ) THEN

o_red <= X"FF"; o_green <= X"00"; o_blue <= X"00"; -- kotak E ATAS

ELSIF ((i_pixel_row > 170) AND (i_pixel_row <190 ) ) AND ((i_pixel_column >= 525) AND (i_pixel_column < 565) AND (COUNTERHOME >= 33) ) THEN

o_red <= X"FF"; o_green <= X"00"; o_blue <= X"00"; -- kotak E tengah

ELSIF((i_pixel_row > 210) AND (i_pixel_row <240 ) ) AND ((i_pixel_column >= 525) AND (i_pixel_column < 565) AND (COUNTERHOME >= 33) ) THEN

o_red <= X"FF"; o_green <= X"00"; o_blue <= X"00"; -- kotak E bawah

--huruf R

ELSIF ((i_pixel_row > 130) AND (i_pixel_row <240 ) ) AND ((i_pixel_column >= 570) AND (i_pixel_column < 590) AND (COUNTERHOME >= 36) ) THEN

o_red <= X"FF"; o_green <= X"00"; o_blue <= X"00"; -- kotak R kiri

ELSIF ((i_pixel_row > 130) AND (i_pixel_row <150 ) ) AND ((i_pixel_column >= 590) AND (i_pixel_column < 620) AND (COUNTERHOME >= 36) ) THEN

o_red <= X"FF"; o_green <= X"00"; o_blue <= X"00"; -- kotak R atas

ELSIF ((i_pixel_row > 130) AND (i_pixel_row <240) ) AND ((i_pixel_column >= 620) AND (i_pixel_column < 640) AND (COUNTERHOME >= 36) ) THEN

o_red <= X"FF"; o_green <= X"00"; o_blue <= X"00"; -- kotak R kanan

ELSIF((i_pixel_row > 185) AND (i_pixel_row <205 ) ) AND ((i_pixel_column >= 590) AND (i_pixel_column < 620) AND (COUNTERHOME >= 36) ) THEN

o_red <= X"FF"; o_green <= X"00"; o_blue <= X"00"; -- kotak R tengah

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

END IF;

ELSE

IF ((i_pixel_row > BOLAATAS) AND (i_pixel_row < BOLABAWAH) AND (i_pixel_column > BOLAKIRI) AND (i_pixel_column < BOLAKANAN)) AND (NOT IsKalah) THEN

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

--Untuk mengatur posisi papan

ELSIF ((i_pixel_row > PAPANATAS) AND (i_pixel_row < PAPANBAWAH) AND (i_pixel_column > PAPANKIRI) AND (i_pixel_column < PAPANKANAN)) THEN

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

ELSIF ((i_pixel_row >= Y1) AND (i_pixel_row <= Y2) AND ( i_pixel_column >= X2) AND (i_pixel_column <= X3) AND (IsCounter(0) = '1')) THEN

o_red <= X"FF"; o_green <= X"FF"; o_blue <= X"00"; --Lampu A

ELSIF ((i_pixel_row >= Y2) AND (i_pixel_row <= Y3) AND ( i_pixel_column >= X3) AND (i_pixel_column <= X4) AND (IsCounter(1) = '1')) THEN

o_red <= X"FF"; o_green <= X"FF"; o_blue <= X"00"; --Lampu B

ELSIF ((i_pixel_row >= Y4) AND (i_pixel_row <= Y5) AND ( i_pixel_column >= X3) AND (i_pixel_column <= X4) AND (IsCounter(2) = '1')) THEN

o_red <= X"FF"; o_green <= X"FF"; o_blue <= X"00"; --Lampu C

ELSIF ((i_pixel_row >= Y5) AND (i_pixel_row <= Y6) AND ( i_pixel_column >= X2) AND (i_pixel_column <= X3) AND (IsCounter(3) = '1')) THEN

o_red <= X"FF"; o_green <= X"FF"; o_blue <= X"00"; --Lampu D

ELSIF ((i_pixel_row >= Y4) AND (i_pixel_row <= Y5) AND ( i_pixel_column >= X1) AND (i_pixel_column <= X2) AND (IsCounter(4) = '1')) THEN

o_red <= X"FF"; o_green <= X"FF"; o_blue <= X"00"; --Lampu E

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB13

Page 14: Proyek Perancangan Rangkaian Digital Bagian II

ELSIF ((i_pixel_row >= Y2) AND (i_pixel_row <= Y3) AND ( i_pixel_column >= X1) AND (i_pixel_column <= X2) AND (IsCounter(5) = '1')) THEN

o_red <= X"FF"; o_green <= X"FF"; o_blue <= X"00"; --Lampu F

ELSIF ((i_pixel_row >= Y3) AND (i_pixel_row <= Y4) AND ( i_pixel_column >= X2) AND (i_pixel_column <= X3) AND (IsCounter(6) = '1')) THEN

o_red <= X"FF"; o_green <= X"FF"; o_blue <= X"00"; --Lampu G

ELSIF ((i_pixel_row > BRICKS(0).BATASATAS) AND (i_pixel_row < BRICKS(0).BATASBAWAH) AND (i_pixel_column > BRICKS(0).BATASKIRI) AND (i_pixel_column < BRICKS(0).BATASKANAN) AND (BRICKS(0).ISHIDUP)) THEN

o_red <= X"FF"; o_green <= X"14"; o_blue <= X"93"; --Bricks 1

ELSIF ((i_pixel_row > BRICKS(1).BATASATAS) AND (i_pixel_row < BRICKS(1).BATASBAWAH) AND (i_pixel_column > BRICKS(1).BATASKIRI) AND (i_pixel_column < BRICKS(1).BATASKANAN) AND (BRICKS(1).ISHIDUP)) THEN

o_red <= X"00"; o_green <= X"FF"; o_blue <= X"FF"; --Bricks 2

ELSIF ((i_pixel_row > BRICKS(2).BATASATAS) AND (i_pixel_row < BRICKS(2).BATASBAWAH) AND (i_pixel_column > BRICKS(2).BATASKIRI) AND (i_pixel_column < BRICKS(2).BATASKANAN) AND (BRICKS(2).ISHIDUP)) THEN

o_red <= X"FF"; o_green <= X"14"; o_blue <= X"93"; --Bricks 3

ELSIF ((i_pixel_row > BRICKS(3).BATASATAS) AND (i_pixel_row < BRICKS(3).BATASBAWAH) AND (i_pixel_column > BRICKS(3).BATASKIRI) AND (i_pixel_column < BRICKS(3).BATASKANAN) AND (BRICKS(3).ISHIDUP)) THEN

o_red <= X"00"; o_green <= X"FF"; o_blue <= X"FF"; --Bricks 4

ELSIF ((i_pixel_row > BRICKS(4).BATASATAS) AND (i_pixel_row < BRICKS(4).BATASBAWAH) AND (i_pixel_column > BRICKS(4).BATASKIRI) AND (i_pixel_column < BRICKS(4).BATASKANAN) AND (BRICKS(4).ISHIDUP)) THEN

o_red <= X"FF"; o_green <= X"14"; o_blue <= X"93"; --Bricks 5

ELSIF ((i_pixel_row > BRICKS(5).BATASATAS) AND (i_pixel_row < BRICKS(5).BATASBAWAH) AND (i_pixel_column > BRICKS(5).BATASKIRI) AND (i_pixel_column < BRICKS(5).BATASKANAN) AND (BRICKS(5).ISHIDUP)) THEN

o_red <= X"00"; o_green <= X"FF"; o_blue <= X"FF"; --Bricks 6

ELSIF ((i_pixel_row > BRICKS(6).BATASATAS) AND (i_pixel_row < BRICKS(6).BATASBAWAH) AND (i_pixel_column > BRICKS(6).BATASKIRI) AND (i_pixel_column < BRICKS(6).BATASKANAN) AND (BRICKS(6).ISHIDUP)) THEN

o_red <= X"FF"; o_green <= X"14"; o_blue <= X"93"; --Bricks 7

ELSIF ((i_pixel_row > BRICKS(7).BATASATAS) AND (i_pixel_row < BRICKS(7).BATASBAWAH) AND (i_pixel_column > BRICKS(7).BATASKIRI) AND (i_pixel_column < BRICKS(7).BATASKANAN) AND (BRICKS(7).ISHIDUP)) THEN

o_red <= X"00"; o_green <= X"FF"; o_blue <= X"FF"; --Bricks 8

ELSIF ((i_pixel_row > BRICKS(8).BATASATAS) AND (i_pixel_row < BRICKS(8).BATASBAWAH) AND (i_pixel_column > BRICKS(8).BATASKIRI) AND (i_pixel_column < BRICKS(8).BATASKANAN) AND (BRICKS(8).ISHIDUP)) THEN

o_red <= X"FF"; o_green <= X"14"; o_blue <= X"93"; --Bricks 9

ELSIF ((i_pixel_row >= Y3) AND (i_pixel_row <= Y5) AND ( i_pixel_column >= X5) AND (i_pixel_column < X6)) AND (IsMenang) THEN

o_red <= X"00"; o_green <= X"FF"; o_blue <= X"00"; --Lampu Menang

ELSIF ((i_pixel_row >= Y3) AND (i_pixel_row <= Y5) AND ( i_pixel_column >= X5) AND

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB14

Page 15: Proyek Perancangan Rangkaian Digital Bagian II

(i_pixel_column < X6)) AND (NOT IsMenang) THEN

o_red <= X"EE"; o_green <= X"EE"; o_blue <= X"EE"; --Lampu Menang Mati

ELSIF ((i_pixel_row >= Y3) AND (i_pixel_row <= Y5) AND ( i_pixel_column >= X6) AND (i_pixel_column < X7)) AND (IsKalah) THEN

o_red <= X"FF"; o_green <= X"00"; o_blue <= X"00"; --Lampu Kalah

ELSIF ((i_pixel_row >= Y3) AND (i_pixel_row <= Y5) AND ( i_pixel_column >= X6) AND (i_pixel_column < X7)) AND (NOT IsKalah) THEN

o_red <= X"EE"; o_green <= X"EE"; o_blue <= X"EE"; --Lampu Kalah Mati

ELSE

o_red <= X"DE"; o_green <= X"CA"; o_blue <= X"FE";

END IF;

END IF;

END PROCESS;

--Melakukan PORT MAP terhadap clockdiv

load_clockdiv : clockdiv

PORT MAP (

CLK=> ClockSystem,

DIVOUT=> clock40hz

);

--load BCD to 7 Segment

load_bcdtest : Bcd_7Seg

PORT MAP(

D0 => BCDPortInput(0),

D1 => BCDPortInput(1),

D2 => BCDPortInput(2),

D3 => BCDPortInput(3),

A => IsCounter(0),

B => IsCounter(1),

C => IsCounter(2),

D => IsCounter(3),

E => IsCounter(4),

F => IsCounter(5),

G => IsCounter(6));

END behavioral;

-- All Rights Reserved 2012

3. clockdiv.vhd

Komponen Clockdiv yang digunakan dalam perancangan proyek digital direalisasikan dalam kode berikut. Seperti percobaan-percobaan sebelumnya, kita dapat mengatur lamanya clock dengan memodifikasi parameter konstanta div. Semakin kecil nilai div, maka tampilan pergerakan bola (kotak) pada layar akan semakin halus dan cepat. Selain itu, clock juga mengatur kecepatan dari gerakan papan pantulan, tulisan ”BRICKBREAKER” pada halaman utama, dan segala bentuk tampilan yang dinamik (fungsi waktu).

-- Created by Iskandar Setiadi - freedomofkeima and Yusuf Fajar Ardiana

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

USE IEEE.STD_LOGIC_ARITH.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL;

USE IEEE.MATH_REAL.ALL;

--Mendefinisikan entitas Clock

entity CLOCKDIV is port(

CLK: IN std_logic;

DIVOUT: buffer std_logic);

end CLOCKDIV;

architecture behavioral of CLOCKDIV is

begin

PROCESS(CLK)

variable count: integer:=0;

--Konstanta untuk mengatur framerate

constant div: integer:=900000;

begin

if CLK'event and CLK='1' then

--Counter

if(count<div) then

count:=count+1;

if(DIVOUT='0') then

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB15

Page 16: Proyek Perancangan Rangkaian Digital Bagian II

DIVOUT<='0';

elsif(DIVOUT='1') then

DIVOUT<='1';

end if;

else

if(DIVOUT='0') then

DIVOUT<='1';

elsif(DIVOUT='1') then

DIVOUT<='0';

end if;

count:=0;

end if;

end if;

end process;

end behavioral;

-- All Rights Reserved 2012

4. vga.vhd

Seperti yang digunakan dalam percobaan V sebelumnya, modul VGA direalisasikan dalam script vga.vhd ini. Kode ini berfungsi untuk menghubungkan dan mengirimkan sinyal-sinyal sehingga terbentuk display pada layar LCD. Penjelasan lebih lanjut mengenai kegunaan dari script ini dapat diakses pada laporan percobaan V.

-- Created by Iskandar Setiadi - freedomofkeima and Yusuf Fajar Ardiana

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

USE IEEE.STD_LOGIC_ARITH.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL;

--Mendefinisikan entitas modul VGA

ENTITY vga IS

PORT(

i_clk : IN STD_LOGIC;

i_red : IN STD_LOGIC;

i_green : IN STD_LOGIC;

i_blue : IN STD_LOGIC;

--Untuk menentukan warna keluaran

o_red : OUT STD_LOGIC;

o_green : OUT STD_LOGIC;

o_blue : OUT STD_LOGIC;

--Untuk sinkronisasi sinyal sync

o_horiz_sync : OUT STD_LOGIC;

o_vert_sync : OUT STD_LOGIC;

--Untuk menentukan koordinat pixel pada layar LCD

o_pixel_row : OUT STD_LOGIC_VECTOR( 9 DOWNTO 0 );

o_pixel_column : OUT STD_LOGIC_VECTOR( 9 DOWNTO 0 ));

END vga;

ARCHITECTURE behavioral OF vga IS

--Konstanta pengatur scanning horizontal

CONSTANT TH : INTEGER := 800;

CONSTANT THB1 : INTEGER := 660;

CONSTANT THB2 : INTEGER := 756;

CONSTANT THD : INTEGER := 640;

--Konstanta pengatur scanning vertical

--Scanning vertical dilakukan satu kali setelah satu proses scanning horizontal selesai dieksekusi

CONSTANT TV : INTEGER := 525;

CONSTANT TVB1 : INTEGER := 494;

CONSTANT TVB2 : INTEGER := 495;

CONSTANT TVD : INTEGER := 480;

SIGNAL clock_25MHz : STD_LOGIC;

SIGNAL horiz_sync : STD_LOGIC;

SIGNAL vert_sync : STD_LOGIC;

SIGNAL video_on : STD_LOGIC;

SIGNAL video_on_v : STD_LOGIC;

SIGNAL video_on_h : STD_LOGIC;

SIGNAL h_count : STD_LOGIC_VECTOR( 9 DOWNTO 0 );

SIGNAL v_count : STD_LOGIC_VECTOR( 9 DOWNTO 0 );

BEGIN

video_on <= video_on_h AND video_on_v;

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB16

Page 17: Proyek Perancangan Rangkaian Digital Bagian II

o_red <= i_red AND video_on;

o_green <= i_green AND video_on;

o_blue <= i_blue AND video_on;

o_horiz_sync <= horiz_sync;

o_vert_sync <= vert_sync;

PROCESS (i_clk)

BEGIN

IF i_clk'EVENT AND i_clk='1' THEN

IF (clock_25MHz = '0') THEN

clock_25MHz <= '1';

ELSE

clock_25MHz <= '0';

END IF;

END IF;

END PROCESS;

PROCESS

BEGIN

WAIT UNTIL( clock_25MHz'EVENT ) AND ( clock_25MHz = '1' );

IF ( h_count = TH-1 ) THEN

h_count <= (others=>'0');

ELSE

h_count <= h_count + 1;

END IF;

IF ( h_count <= THB2-1 ) AND (h_count >= THB1-1 ) THEN

horiz_sync <= '0';

ELSE

horiz_sync <= '1';

END IF;

IF ( v_count >= TV-1 ) AND ( h_count >= 699 ) THEN

v_count <= (others=>'0');

ELSE IF ( h_count = 699 ) THEN

v_count <= v_count + 1;

END IF;

END IF;

IF ( v_count <= TVB2-1 ) AND ( v_count >= TVB1-1 ) THEN

vert_sync <= '0';

ELSE

vert_sync <= '1';

END IF;

IF ( h_count <= THD-1 ) THEN

video_on_h <= '1';

o_pixel_column <= h_count;

ELSE

video_on_h <= '0';

END IF;

IF ( v_count <= TVD-1 ) THEN

video_on_v <= '1';

o_pixel_row <= v_count;

ELSE

video_on_v <= '0';

END IF;

END PROCESS;

END behavioral;

-- All Rights Reserved 2012

5. Bcd_7Seg.vhd

Untuk menampilkan skor pada layar, kami menggunakan komponen BCD yang direalisikan pada script BCD_7Seg.vhd ini. Perhitungan skor dilakukan dengan mengkonversikan jumlah bricks yang berhasil dihancurkan menjadi bilangan binary 4-bit. Selain itu, hasil konversi akan di PORT MAP dan memberikan keluaran 7-bit, yang berfungsi untuk mencetak display skor pada layar. Berikut ini adalah script yang kami gunakan, beserta penjelasan dari masing-masing bagian dalam bentuk komentar (warna hijau):

-- Created by Iskandar Setiadi - freedomofkeima and Yusuf Fajar Ardiana

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB17

Page 18: Proyek Perancangan Rangkaian Digital Bagian II

--Mendefinisikan entitas BCD-to-7-segment

ENTITY Bcd_7seg IS

PORT ( D0, D1, D2, D3 : IN STD_LOGIC ;

A, B, C, D, E, F, G : OUT STD_LOGIC );

end Bcd_7seg;

--Convert to STD LOGIC VECTOR, untuk INTEGER --> BINARY 4 BIT

ARCHITECTURE behavioural OF Bcd_7seg IS

BEGIN

--Logika masing-masing blok penunjuk angka yang telah disederhanakan

A <= (D1 OR D3 OR ((NOT D0) AND (NOT D2)) OR (D0 AND D2));

B <= ((NOT D2) OR (D0 AND D1) OR ((NOT D0) AND (NOT D1)));

C <= (D0 OR (NOT D1) OR D2);

D <= (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 D0) AND (NOT D2)) OR ((NOT D0) AND D1));

F <= (D3 OR ((NOT D0) AND (NOT D1)) OR ((NOT D0) AND D2) OR ((NOT D1) AND D2));

G <= (D3 OR (D1 AND (NOT D2)) OR ((NOT D1) AND D2) OR ((NOT D0) AND D2));

END behavioural;

-- All Rights Reserved 2012

4. HASIL DAN ANALISIS

Berikut ini akan dijelaskan mengenai hasil akhir dan analis dari pengerjaan proyek tugas besar praktikum sistem digital ini beberapa diantaranya adalah mengenai strategi pengerjaan, spesifikasi awal program saat perencanaan, kesesuaian antara spesifikasi awal dengan hasil akhir pengerjaan tugas, beberapa hasil imlementasi pada FPGA dan LCD, serta analisis dari hasil hasil yang sudah didapatkan.

Dalam percobaan ini semua spesifikasi yang sudah direncanakan di awal berhasil diimplementasikan bahkan ada spesifikasi tambahan untuk melengkapi

permainan seperti state permulaan awal dan tambahan display warna background permainan.

Spesifikasi yang berhasil diimplementasikan adalah sebagai berikut bagian pertama adalah BCD-to-7-Segment, pin planner untuk input/output, pendeteksi pantulan serta kotak yang dipantulkan, maupun state seperti kondisi menang maupun kalah. Selain itu, tedapat switch pada SW[0] yang berfungsi untuk mengatur kecepatan bricks (mode mudah / sulit), serta tombol reset pada push_button pada percobaan selanjutnya hal yang diimplementasikan adalah sebagai berikut adalah penambahan bricks serta collision detection antara bricks dengan kotak yang dipantulkan. Perancangan ini akan dibuat menggunakan struktur data array dari tipe bentukan bricks. Selain itu, akan dilakukan perbaikan terhadap skematik dari FSM yang digunakan maupun optimasi pada script diatas. Pengujian sistem yang telah didesain menggunakan FPGA bertipe DE-1, yang diintegrasikan dengan display LCD, pengerjaan interface tugas meliputi state awal permainan dan interface warna display background permainan, dan beberapa penyempurnaan lainnya

Dan berikut ini adalah beberapa gambar hasil implementasi baik pada percobaan 6 bagian pertama maupun bagian kedua

Perhatikan gambar 4-2 dibawah ini:

Gambar 4-1 BricksBreaker State Menang pada percobaan pertama

Permainan dimulai dengan bola (kotak merah) dipantulkan dari papan (biru). Setiap kali bola mengenai daerah atas, kiri, kanan, maupun bagian atas papan, maka arah gerak bola akan dipantulkan. Warna kuning (angka 8) pada pojok kiri bawah akan berfungsi sebagai counter penghitung skor yang

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB18

Page 19: Proyek Perancangan Rangkaian Digital Bagian II

diintegrasikan dengan BCD-to-7-Segment. Sedangkan warna hijau (lampu Menang) menyala apabila permainan telah berakhir dan pemain telah memenangkan permainan. Gambar diatas adalah saat percobaan pertama.

Gambar 4-2 BricksBreaker State Kalah pada percobaan pertama

Selain itu terdapat pula kondisi ketika pemain kalah dari permainan (Gambar 4-3). Pemain dinyatakan kalah apabila bola telah melewati papan pemantul. State kalah dinyatakan dengan menyalanya lampu merah dan hilangnya bola (kotak merah) dari layar display LCD.

Pada percobaan lanjutan implementasi yang dilakukan adalah pembuatan beberapa state menang dan kalah dengan penyempurnaan tampilan interface permainan berikut ini adalah previewnya

Gambar 4-3 BricksBreaker State Menang pada percobaan kedua

Terlihat bergantinya indikator warna ketika state menang menjadi berwana hijau, adanya penambahan interface berupa pergantian background warna menjadi berwana biru, counter sudah mulai berjalan

dengan menunjukkan perhitungan jumlah bata total yang sudah dihancurkan ( secara default awal jumlah bata yang dibuat 9 ) state menang terjadi ketika semua bata yang ada berhasil dihancurkan.

Dan berikut ini adalah tampilan state kalah pada percobaan kedua dengan tambahan seperti pada state menang. State kalah terjadi saat bola penghancur melewati bagian bawah kotak pemantul. State kalah ditunjukkan ditandai dengan kotak indikator state kalah yang berwarna merah.

Dan dibawah ini adalah state tambahan yang tidak ada pada perencanaan awal menampilkan tulisan break breaker yang berkedip dua kali pada bagian awal state.

Dan dibawah ini ditunjukkan pengaturan mode kecepatan pada FPGA dengan switch. Mode kecepatan yang dipakai dalam permainan ini mode cepat saat bola penghancur bergerak lebih cepat dari kecepatan default sedangkan mode lambat adalah ketika bola penghancur bergrak dengan keepatan default. Tampilan bergerak dapat disimak pada lampiran video pada cd yang sudah dikumpulkan bersama laporan.

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB19

Page 20: Proyek Perancangan Rangkaian Digital Bagian II

5. KESIMPULAN

Dari hasil perobaan dan analisis yang telah kami lakukan dan jelaskan diatas dapat diambil kesimpulan sebagai berikut1. Tugas akhir praktikum sistem digital ini

dikerjakan dalam dua kali perobaan, progres dan implementasi yang dapat kami lakukan lengkap sesuai dengan perencaan awal adapun perubahan dari rencana adalah penambahan fitur fitur seperti state awal, penambahan fitur interface seperti pemberian warna background sedangkan penambahan mode kecepatan dengan menggunakan switch sudah direncanakan sejak awal

2. Sementara pembagian progres pengerjaan pada percobaan pertama adalah pengerjaan bagian BCD-to-7-Segment, pin planner untuk input/output, pendeteksi pantulan serta

kotak yang

dipantulkan, maupun state seperti kondisi menang maupun kalah. Selain itu, tedapat switch pada SW[0] yang berfungsi untuk mengatur kecepatan bricks (mode mudah / sulit), serta tombol reset pada push_button sementara beberapa hal yang akan dicoba pada percobaan selanjutnya adalah penambahan bricks serta collision detection antara bricks dengan kotak yang dipantulkan. Perancangan ini akan dibuat menggunakan struktur data array dari tipe bentukan bricks. Selain itu, akan dilakukan perbaikan terhadap skematik dari FSM yang digunakan maupun optimasi pada script diatas. Pengujian sistem yang telah didesain menggunakan FPGA bertipe DE-1, yang diintegrasikan dengan display LCD, pengerjaan interface tugas meliputi state awal permainan dan interface warna display background permainan, dan beberapa penyempurnaan lainnya

DAFTAR PUSTAKA

[1] Brian Holdsworth and Clive Woods, Digital Logic Design Fourth Edition, N.wnes, 2002

[2] R.H. Katz, Contemporary Logic Design Second Edition, Pearson Prentince-Hall, NJ, 2005

[3] Stephen Brown and Zvonko Vranesic, Fundamentals of Digital Logic with VHDL Design Third Edition, McGraw-Hill, San Francisco, 2009

[4] http://www.thelearningpit.com/lp/ doc/7seg/7truth.gif, 9 Desember 2012, pukul 15:20:30

[5] http://labdasar.ee.itb.ac.id/lab/ EL2195/pendukung%20praktikum/de1_usermanual_v1017.pdf, 9 Desember 2012, pukul 15:45:10

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB20