proyek perancangan rangkaian digital

12
Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 1 MODUL 6 PROYEK PERANCANGAN RANGKAIAN DIGITAL Iskandar Setiadi (13511073) Asisten: Rizka Widyarini / 13209096 Tanggal Percobaan: 30/11/2012 EL2195-Praktikum Sistem Digital Laboratorium Dasar Teknik Elektro - Sekolah Teknik Elektro dan Informatika ITB Abstrak Pada praktikum Sistem Digital, kita telah mempelajari berbagai macam aplikasi rangkaian logika, seperti salah satunya rangkaian sekuensial. Selain itu, kita telah mempelajari integrasi dan implementasi bahasa VHDL dengan FPGA maupun simulasi-simulasi yang menggunakan display LCD. Pada praktikum ini, praktikan merancang sebuah proyek perancangan berupa permainan BricksBreaker sederhana. Simulasi ini terintegrasi dengan modul VGA, sehingga BricksBreaker dapat dimainkan pada display LCD. Kompilasi dilakukan menggunakan ALTERA QUARTUS serta board FPGA DE-1. Kata kunci: Perancangan Rangkaian Digital, BricksBreaker, VHDL. 1. PENDAHULUAN Setelah melakukan serangkaian percobaan praktikum Sistem Digital, pada kesempatan ini setiap kelompok praktikan diminta untuk merancang sebuah proyek rangkaian digital. Proyek ini bertujuan untuk mempelajari cara mengimplementasikan serta mendesain jalur data dan kendali untuk sistem. Seluruh jalur data tersebut akan dihubungkan menggunakan pemodelan FSM (Finite State Machine) dan menampilkan hasil keluaran pada layar LCD. Selain itu, percobaan ini akan mengintegrasikan berbagai komponen dan interface seperti VGA, koneksi serial, display LCD, dll. Proyek ini bersifat interaktif, artinya pengguna dapat memberikan masukkan kedalam sistem untuk mempengaruhi jalannya sistem yang didesain, dalam hal ini adalah permainan BricksBreaker. Setelah sistem berhasil diimplementasikan, maka kita akan menguji serta menganalisis sistem yang sudah selesai dibangun tersebut. 2. STUDI PUSTAKA Dalam perancangan sebuah proyek rangkaian digital, desain dapat dibuat menggunakan berbagai macam struktur formal seperti tabel kebenaran diagram keadaan, FSM, dan metode- metode pemodelan lainnya. Selain itu, desain strategi pengujian yang baik juga perlu dilakukan untuk menganalisis sistem yang telah dibuat tersebut. Proyek perancangan ini menggunakan berbagai macam komponen yang telah dirancang pada praktikum sebelumnya, seperti Clock untuk mengatur framerate pada display LCD, Counter yang diimplementasikan dalam BCD-to-7-Segment yang berfungsi untuk menampilkan angka pad layar, maupun modul VGA yang berfungsi untuk mengubah sinyal-sinyal menjadi tampilan layar. 2.1 BCD-TO-7-SEGMENT BCD-to-7-Segment 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 2.2 MODUL VGA DRIVER Modul VGA (Video Graphics Array) yang digunakan kali ini adalah salah satu modul VGA yang pernah diimplementasikan pada percobaan yang lalu. Driver ini berfungsi untuk merepresentasikan 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).

Upload: iskandar-setiadi

Post on 06-Aug-2015

428 views

Category:

Documents


49 download

DESCRIPTION

Laporan Praktikum 6

TRANSCRIPT

Page 1: Proyek Perancangan Rangkaian Digital

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 1

MODUL 6 PROYEK PERANCANGAN RANGKAIAN DIGITAL

Iskandar Setiadi (13511073) Asisten: Rizka Widyarini / 13209096

Tanggal Percobaan: 30/11/2012 EL2195-Praktikum Sistem Digital

Laboratorium Dasar Teknik Elektro - Sekolah Teknik Elektro dan Informatika ITB

Abstrak

Pada praktikum Sistem Digital, kita telah mempelajari berbagai macam aplikasi rangkaian logika, seperti salah satunya rangkaian sekuensial. Selain itu, kita telah mempelajari integrasi dan implementasi bahasa VHDL dengan FPGA maupun simulasi-simulasi yang menggunakan display LCD. Pada praktikum ini, praktikan merancang sebuah proyek perancangan berupa permainan BricksBreaker sederhana. Simulasi ini terintegrasi dengan modul VGA, sehingga BricksBreaker dapat dimainkan pada display LCD. Kompilasi dilakukan menggunakan ALTERA QUARTUS serta board FPGA DE-1.

Kata kunci: Perancangan Rangkaian Digital, BricksBreaker, VHDL.

1. PENDAHULUAN

Setelah melakukan serangkaian percobaan praktikum Sistem Digital, pada kesempatan ini setiap kelompok praktikan diminta untuk merancang sebuah proyek rangkaian digital. Proyek ini bertujuan untuk mempelajari cara mengimplementasikan serta mendesain jalur data dan kendali untuk sistem. Seluruh jalur data tersebut akan dihubungkan menggunakan pemodelan FSM (Finite State Machine) dan menampilkan hasil keluaran pada layar LCD. Selain itu, percobaan ini akan mengintegrasikan berbagai komponen dan interface seperti VGA, koneksi serial, display LCD, dll. Proyek ini bersifat interaktif, artinya pengguna dapat memberikan masukkan kedalam sistem untuk mempengaruhi jalannya sistem yang didesain, dalam hal ini adalah permainan BricksBreaker. Setelah sistem berhasil diimplementasikan, maka kita akan menguji serta menganalisis sistem yang sudah selesai dibangun tersebut.

2. STUDI PUSTAKA

Dalam perancangan sebuah proyek rangkaian digital, desain dapat dibuat menggunakan berbagai macam struktur formal seperti tabel kebenaran diagram keadaan, FSM, dan metode-metode pemodelan lainnya. Selain itu, desain strategi pengujian yang baik juga perlu dilakukan

untuk menganalisis sistem yang telah dibuat tersebut.

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

2.1 BCD-TO-7-SEGMENT

BCD-to-7-Segment 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

2.2 MODUL VGA DRIVER

Modul VGA (Video Graphics Array) yang digunakan kali ini adalah salah satu modul VGA yang pernah diimplementasikan pada percobaan yang lalu. Driver ini berfungsi untuk merepresentasikan 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).

Page 2: Proyek Perancangan Rangkaian Digital

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 2

3. METODOLOGI

3.1 ALAT PERCOBAAN

Board FPGA tipe DE1

Catu daya + kabel dan konektor tambahan serta kabel downloader

Monitor LCD

3.2 PROSEDUR PERCOBAAN

Percobaan ini mengintegrasikan berbagai macam modul yang telah kita pelajari pada praktikum-praktikum sebelumnya. Secara garis besar, proyek ini menggunakan 5 files VHDL, yaitu bricksbreaker.vhd, Bricks_MainGame.vhd, clockdiv.vhd, vga.vhd, dan Bcd_7seg.vhd.

Gambar 3-1 Mock-Up Permainan BricksBreaker

Gambar 3-1 diatas menunjukkan skema kasar dari proyek yang akan dibuat. Proyek ini memiliki 4 buah masukkan, yaitu 3 push_button (arah kiri, arah kanan, reset) serta 1 buah switch (mode mudah / sulit). Secara singkat, pemain dinyatakan menang apabila semua bricks berhasil dihancurkan, sedangkan pemain dinyatakan kalah jika bola (kotak) telah melewati batas atas pantulan papan.

3.3 SCRIPT VHDL YANG DIGUNAKAN

1. BricksBreaker.vhd

Kode ini merupakan top_level_entity dari proyek yang dirancang. Secara garis besar, kode ini bertujuan untuk menghubungkan antar komponen yang digunakan dalam proyek ini dengan input/output yang digunakan (melalui PORT MAP).

-- 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);

SIGNAL blue_color :

STD_LOGIC_VECTOR (7 DOWNTO 0);

SIGNAL pixel_row :

STD_LOGIC_VECTOR (9 DOWNTO 0);

Page 3: Proyek Perancangan Rangkaian Digital

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 3

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,

o_blue => blue_color);

red <= red_color (7 DOWNTO 2) ;

green <= green_color(7 DOWNTO 2) ;

Page 4: Proyek Perancangan Rangkaian Digital

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 4

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,g

reen,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

Kode ini merupakan bagian utama dari permainan. Proses dalam kode ini dihubungkan dengan clockdiv, yang berfungsi untuk mengatur waktu / framerate dari layar. State utama serta pergerakan-pergerakan setiap obyek pada layar (pantulan, bola, skor, lampu state, bricks) didefinisikan dalam kode 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.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);

SIGNAL currentstate, nextstate :

executionStage;

--Untuk mengatur arah pantulan

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

Page 5: Proyek Perancangan Rangkaian Digital

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 5

--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;

--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 bricks (TestBeta)

SHARED VARIABLE BRICKONEATAS :

INTEGER := 150;

SHARED VARIABLE BRICKONEKIRI :

INTEGER := 260;

SHARED VARIABLE BRICKONEKANAN :

INTEGER := 340;

SHARED VARIABLE BRICKONEBAWAH :

INTEGER := 180;

--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;

--Variabel state permainan

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

SHARED VARIABLE SPEED :

INTEGER := 0;

--Clock sebagai buffer CLOCKDIV

SIGNAL clock40hz : STD_LOGIC;

--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

Page 6: Proyek Perancangan Rangkaian Digital

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 6

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));

--Jika tombol Reset ditekan

IF (Reset = '0') THEN

currentstate <= s1;

ELSE

currentstate <= nextstate;

END IF;

END PROCESS;

PROCESS(currentstate,

i_pixel_row,i_pixel_column,

PushKanan, PushKiri, LevelMode)

BEGIN

IF (clock40hz'EVENT) AND (clock40hz =

'1') THEN

--Mengatur kecepatan bujursangkar

sesuai dengan state SW[0]

CASE currentstate IS

WHEN s1 =>

--Inisialisasi Variabel

IsKalah := FALSE;

BOLAATAS := 340;

BOLABAWAH := 389;

BOLAKIRI := 295;

BOLAKANAN := 344;

PAPANKIRI := 260;

PAPANKANAN := 380;

PAPANATAS := 390;

PAPANBAWAH := 400;

nextstate <= s2;

WHEN s2 =>

IF LevelMode = '1' THEN

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

mode lambat

ELSE

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

mode cepat

END IF;

IF BOLAATAS <= 0 THEN ROTASIY := 1;

ELSIF BOLABAWAH >= TVD THEN

ROTASIY := -1;

ELSE ROTASIY := ROTASIY; --Delete

this later

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

Page 7: Proyek Perancangan Rangkaian Digital

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 7

BOLAATAS := BOLAATAS + ROTASIY *

SPEED;

BOLABAWAH := BOLABAWAH + ROTASIY *

SPEED;

BOLAKIRI := BOLAKIRI + ROTASIX *

SPEED;

BOLAKANAN := BOLAKANAN + ROTASIX *

SPEED;

END IF;

--Mengecek apakah Bola mengenai

Bricks

--Bagian Atas

--Bagian Kiri

--Bagian Kanan

--Bagian Bawah

--Jika Bola mengenai Bricks,

hancurkan Bricks, Tambahkan Skor

--Testing Skor

SCORE := SCORE + 1;

IF ISCOUNTER = 10 THEN

SCORE := 0;

END IF;

--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;

--Jika bola melewati batas atas papan

IF BOLABAWAH > 395 THEN

nextstate <= s3;

ELSE nextstate <= currentstate;

END IF;

WHEN s3 =>

IsKalah := TRUE;

nextstate <= currentstate;

WHEN s4 =>

IsMenang := TRUE;

nextstate <= currentstate;

END CASE;

END IF;

--Untuk mengatur posisi bola

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

Page 8: Proyek Perancangan Rangkaian Digital

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 8

(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

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 >= 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

(i_pixel_column < X6)) AND (NOT

IsMenang) THEN o_red <= X"EE";

o_green <= X"EE"; o_blue <= X"EE"; --

Lampu Menang Mati

--Keterangan Programmer : Ganti

warnanya

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"00"; o_green <=

X"00"; o_blue <= X"00";

END IF;

--END IF;

END PROCESS;

--Melakukan PORT MAP terhadap

clockdiv

load_clockdiv : clockdiv

PORT MAP (

CLK=> ClockSystem,

DIVOUT=> clock40hz

);

--Melakukan PORT MAP / 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

Page 9: Proyek Perancangan Rangkaian Digital

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 9

3. clockdiv.vhd

Komponen Clock yang digunakan didefinisikan dalam kode ini. 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.

-- 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

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 sebelumnya, modul VGA direalisasikan dalam script vga.vhd ini. Kode ini berfungsi untuk menghubungkan dan mengirimkan sinyal-sinyal sehingga terbentuk display pada layar LCD.

-- 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

Page 10: Proyek Perancangan Rangkaian Digital

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 10

--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;

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;

Page 11: Proyek Perancangan Rangkaian Digital

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 11

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

Komponen BCD yang digunakan dalam proyek ini 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 memberikan keluaran 7-bit, yang berfungsi untuk mencetak display skor pada layar.

-- Created by Iskandar Setiadi -

freedomofkeima and Yusuf Fajar

Ardiana

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

--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

Tahap awal yang diekseksusi dalam pengerjaan proyek sistem digital adalah menentukan desain sistem yang ingin diimplementasikan. Bricksbreaker, seperti yang telah dituliskan pada bagian prosedur percobaan, menerima 4 masukkan dari pengguna.

Gambar 4-1 Pin Planner yang digunakan

Pada gambar 4-1 diatas, dapat terlihat bahwa 4 masukkan pengguna yang digunakan adalah:

- Level Mode yang di-assign PIN_L22 atau SW[0], berfungsi untuk mengatur kecepatan dari pergerakan balok

- PushKanan yang di-assign PIN_T22 atau Push_Button[2], berfungsi untuk menggerakkan papan kearah kanan

- PushKiri yang di-assign PIN_T21 atau Push_Button[3], berfungsi untuk menggerakan papan kearah kiri

Page 12: Proyek Perancangan Rangkaian Digital

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 12

- Reset yang di-assign PIN_R21 atau Push_Button[1], berfungsi untuk mengulang dan memulai permainan kembali dari awal.

Selama percobaan di laboratorium, berikut ini adalah hasil implementasi sementara yang telah berhasil dilakukan:

Perhatikan gambar 4-2 dibawah ini:

Gambar 4-2 BricksBreaker State Menang

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 diintegrasikan dengan BCD-to-7-Segment. Sedangkan warna hijau (lampu Menang) menyala apabila permainan telah berakhir dan pemain telah memenangkan permainan.

Gambar 4-3 BricksBreaker State Kalah

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.

5. KESIMPULAN

Perancangan proyek sistem digital yang bertemakan permainan BricksBreaker ini telah diimplementasikan sekitar 50% dari rancangan awal yang telah didesain sebelumnya. Beberapa komponen yang telah berhasil diimplementasikan 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.

Beberapa hal yang akan diimplementasikan 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.

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, 3 Desember 2012, pukul 23:15:20

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