MODUL 6 PROYEK PERANCANGAN RANGKAIAN DIGITAL (Bagian II) Iskandar Setiadi ( 13511073) 13511073) Yusuf Fajar Ardiana (18011049) ( 18011049) Asisten: Fajar Arief P. / 13209099 132 09099 Tanggal Percobaan: 6/12/2012 EL2195-Praktikum Sistem Digital Laboratorium Dasar 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. 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 BricksBreaker , FSM, VHDL. 1.
Rangkaian
Digital,
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.
S TUDI 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 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-7Segment yang berfungsi untuk menampilkan angka pada layar, maupun modul VGA yang berfungsi untuk mengubah sinyal-sinyal menjadi tampilan pada layar LCD.
Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB
1
2.1
BCD- TO-7-SEGMENT
3.
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
METODOLOGI
3.1
A LAT LAT PERCOBAAN
3.2
Board FPGA tipe DE-1 Catu daya + kabel dan konektor tambahan serta kabel downloader Monitor LCD 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:
MODUL VGA D VGA DRIVER
Salah satu bagian paling penting dari perancangan proyek rangkaian digital ini adalah modul VGA .Modul VGA, atau yang dikenal dengan driver .Modul berfungsi untuk Video Graphics Array , 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
BricksBreaker 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 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:
Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB
2
-
3 push_button (arah kiri ([3]), arah kanan ([2]), tombol reset ([1]))
ENTITY bricksbreaker
1 switch (kecepatan bola / kotak yang dipantulkan (SW[0]))
PushKanan : IN STD_LOGIC; STD_LOGIC; -Sebagai tombol arah kanan (RIGHT)
Selain itu, terdapat beberapa buah state utama dalam rangkaian digital ini, yaitu state awal permainan, state permainan, state menang¸ dan state kalah.
PushKiri : IN STD_LOGIC; STD_LOGIC; -Sebagai tombol arah kiri (LEFT)
-
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
IS
PORT( PORT (
Reset : IN STD_LOGIC; STD_LOGIC; -Sebagai tombol untuk mengulang permainan LevelMode : IN STD_LOGIC; STD_LOGIC; -Untuk mengatur kecepatan bujursangkar ClockSystem : IN STD_LOGIC; STD_LOGIC; -CLOCK AUTOMATIC dari sistem VGA_R : OUT STD_LOGIC_VECTOR( STD_LOGIC_VECTOR ( 5 DOWNTO 0 ); VGA_G : OUT STD_LOGIC_VECTOR( STD_LOGIC_VECTOR ( 5 DOWNTO 0 ); VGA_B : OUT STD_LOGIC_VECTOR( STD_LOGIC_VECTOR ( 5 DOWNTO 0 ); VGA_HS
: OUT STD_LOGIC; STD_LOGIC;
VGA_VS
: OUT STD_LOGIC; STD_LOGIC;
VGA_CLK
: OUT STD_LOGIC; STD_LOGIC;
VGA_BLANK
: OUT STD_LOGIC); STD_LOGIC);
END bricksbreaker;
SCRIPT VHDL IMPLEMENTASI 1.
ARCHITECTURE behavioral OF bricksbreaker IS
BricksBreaker.vhd
Bagian ini merupakan realisasi dari entity dari proyek perancangan top_level_ entity 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.STD_LOGIC_1164.ALL;
USE
IEEE.STD_LOGIC_ARITH.ALL;
USE
IEEE.STD_LOGIC_UNSIGNED.ALL;
USE
IEEE.MATH_REAL.ALL;
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);
IEEE;
USE
--Sinyal sinyal untuk proses scanning pixel pada layar
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);
--Komponen utama bricksbreaker, menerima 4 masukkan dari pengguna, 1 clock, serta mengeluarkan sinyal untuk display LCD
SIGNAL red_on STD_LOGIC; STD_LOGIC ;
:
SIGNAL green_on STD_LOGIC; STD_LOGIC ;
:
Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB
3
SIGNAL blue_on STD_LOGIC; STD_LOGIC ;
:
o_blue : OUT STD_LOGIC_VECTOR( STD_LOGIC_VECTOR ( 7 DOWNTO 0 )); --Keluaran sebagai sinyal warna RGB END COMPONENT; COMPONENT;
--Mengintegrasikan modul vga COMPONENT vga
IS BEGIN
PORT( PORT ( i_clk
:
IN
STD_LOGIC; STD_LOGIC;
--Melakukan PORT MAP modul vga
i_red
:
IN
STD_LOGIC; STD_LOGIC;
vga_driver0 : vga
i_green
:
IN
STD_LOGIC; STD_LOGIC;
PORT MAP (
i_blue
:
IN
STD_LOGIC; STD_LOGIC;
i_clk
=> ClockSystem,
--Untuk menentukan warna keluaran
i_red
=> '1',
o_red
:
OUT
STD_LOGIC; STD_LOGIC;
i_green
=> '1',
o_green
:
OUT
STD_LOGIC; STD_LOGIC;
i_blue
=> '1',
o_blue
:
OUT
STD_LOGIC; STD_LOGIC;
o_red
=> red_on,
--Untuk sinkronisasi sinyal sync
o_green
=> green_on,
o_horiz_sync
:
OUT
STD_LOGIC; STD_LOGIC;
o_blue
=> blue_on,
o_vert_sync
:
OUT
STD_LOGIC; STD_LOGIC;
o_horiz_sync o_horiz_sync
=> VGA_HS,
--Untuk menentukan koordinat pixel pada layar LCD
o_vert_sync
=> VGA_VS,
o_pixel_row
=> pixel_row,
o_pixel_row : OUT STD_LOGIC_VECTOR( STD_LOGIC_VECTOR ( 9 DOWNTO 0 );
o_pixel_colu mn
=> pixel_column );
o_pixel_column : OUT STD_LOGIC_VECTOR( STD_LOGIC_VECTOR ( 9 DOWNTO 0 ));
--Melakukan PORT MAP main game
END COMPONENT; COMPONENT;
maingame : Bricks_MainGame Bricks_MainGame PORT MAP ( PushKanan
=> PushKanan,
PORT( PORT (
PushKiri
=> PushKiri,
PushKanan : IN STD_LOGIC; STD_LOGIC; -Sebagai tombol arah kanan (RIGHT)
Reset
COMPONENT Bricks_MainGame
IS
PushKiri : IN STD_LOGIC; STD_LOGIC; -Sebagai tombol arah kiri (LEFT)
=> Reset,
LevelMode
=> LevelMode,
ClockSystem
=> ClockSystem,
Reset : IN STD_LOGIC; STD_LOGIC; -Sebagai tombol untuk mengulang permainan
i_pixel_column i_pixel_column
=> pixel_column, pixel_column,
i_pixel_row
=> pixel_row,
o_red
=> red_color,
LevelMode : IN STD_LOGIC; STD_LOGIC; -Untuk mengatur kecepatan bujursangkar
o_green
=> green_color,
o_blue
=> blue_color);
ClockSystem : IN STD_LOGIC; STD_LOGIC; -CLOCK AUTOMATIC dari sistem i_pixel_column : IN STD_LOGIC_VECTOR( STD_LOGIC_VECTOR ( 9 DOWNTO 0 ); i_pixel_row : IN STD_LOGIC_VECTOR( STD_LOGIC_VECTOR ( 9 DOWNTO 0 ); o_red : OUT STD_LOGIC_VECTOR( STD_LOGIC_VECTOR ( 7 DOWNTO 0 ); o_green : OUT STD_LOGIC_VECTOR( STD_LOGIC_VECTOR ( 7 DOWNTO 0 );
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 mengirimkan nya ke VGA
Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB
4
PROCESS(red_on,green_on,blue_on,red,g PROCESS (red_on,green_on,blue_on,red,g reen,blue)
PORT( PORT (
BEGIN
PushKanan : IN STD_LOGIC; STD_LOGIC; -Sebagai tombol arah kanan (RIGHT), Tombol ke-1
IF (red_on = '1' ) THEN VGA_R <= red; -- Jika merah aktif
PushKiri : IN STD_LOGIC; STD_LOGIC; -Sebagai tombol arah kiri (LEFT), Tombol ke-2
ELSE
VGA_R <=
"000000";
-
END IF; IF;
Reset : IN STD_LOGIC; STD_LOGIC; --Sebagai tombol untuk mengulang permainan, Tombol ke-3
IF (green_on = '1' ) THEN VGA_G <= green; -- Jika hijau aktif
LevelMode : IN STD_LOGIC; STD_LOGIC; -Untuk mengatur kecepatan bujursangkar
-
ClockSystem : IN STD_LOGIC; STD_LOGIC; -CLOCK AUTOMATIC dari sistem
-
ELSE VGA_G <=
"000000";
END IF; IF;
i_pixel_column : IN STD_LOGIC_VECTOR( STD_LOGIC_VECTOR ( 9 DOWNTO 0 );
IF (blue_on = '1' ) THEN VGA_B <= blue; -- Jika biru aktif ELSE VGA_B <=
i_pixel_row : IN STD_LOGIC_VECTOR( STD_LOGIC_VECTOR ( 9 DOWNTO 0 );
"000000";
o_red : OUT STD_LOGIC_VECTOR( STD_LOGIC_VECTOR ( 7 DOWNTO 0 );
END IF; IF;
o_green : OUT STD_LOGIC_VECTOR( STD_LOGIC_VECTOR ( 7 DOWNTO 0 ); o_blue : OUT STD_LOGIC_VECTOR( STD_LOGIC_VECTOR ( 7 DOWNTO 0 ));
END PROCESS; PROCESS; END behavioral;
--Keluaran sebagai sinyal warna RGB
-- All Rights Reserved 2012
2.
END Bricks_MainGame;
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 freedomofkeima Ardiana LIBRARY
Iskandar Setiadi and Yusuf Fajar
ARCHITECTURE behavioral OF Bricks_MainGame IS
--Tipe eksekusi FSM TYPE executionStage IS (s1,s2,s3,s4,s5); SIGNAL currentstate, nextstate : executionStage;
--Tipe bentukan bricks TYPE BRICKSELMT IS RECORD
IEEE;
USE
IEEE.STD_LOGIC_1164.ALL;
BATASKIRI
: INTEGER INTEGER; ;
USE
IEEE.STD_LOGIC_ARITH.ALL;
BATASKANAN
: INTEGER INTEGER; ;
use
IEEE.NUMERIC_STD.ALL;
BATASATAS
: INTEGER INTEGER; ;
USE
IEEE.STD_LOGIC_UNSIGNED.ALL;
BATASBAWAH
: INTEGER INTEGER; ;
USE
IEEE.MATH_REAL.ALL;
ISHIDUP
: BOOLEAN BOOLEAN; ;
END RECORD; RECORD; ENTITY Bricks_MainGame
IS Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB
5
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 X3 : INTEGER := 40; SHARED VARIABLE X4 : INTEGER := 45;
--Mengatur posisi Counter dari BCDto-7-Segment, Koordinat Y SHARED VARIABLE Y1 : INTEGER := 410;
SHARED VARIABLE ISKENABRICKS : BOOLEAN := FALSE FALSE; ; --Jika bola mengenai bricks
SHARED VARIABLE Y2 : INTEGER := 415; SHARED VARIABLE Y3 : INTEGER := 430; SHARED VARIABLE Y4 : INTEGER := 435;
--Untuk mengatur arah pantulan bola SHARED VARIABLE ROTASIX : INTEGER := 1; SHARED VARIABLE ROTASIY : INTEGER := -1;
SHARED VARIABLE X7 : INTEGER := 600;
--Batas arah bujur sangkar yang akan digerakkan
:
SHARED VARIABLE BOLAKIRI INTEGER := 295;
:
SHARED VARIABLE BOLAKANAN INTEGER := 344;
:
SHARED VARIABLE BOLABAWAH INTEGER := 389;
:
--Mengatur lampu state menang dan kalah
SHARED VARIABLE X6 : INTEGER := 500;
CONSTANT THD : INTEGER := 639; -TVD, batas vertikal layar
SHARED VARIABLE BOLAATAS INTEGER := 340;
SHARED VARIABLE Y6 : INTEGER := 455;
SHARED VARIABLE X5 : INTEGER := 400;
CONSTANT TVD : INTEGER := 479; -THD, batas horizontal layar
--Ubah bentuknya menjadi bola // menggunakan persamaan kuadrat x^2 + y^2
SHARED VARIABLE Y5 : INTEGER := 450;
SHARED VARIABLE IsKalah : BOOLEAN := FALSE; FALSE ; SHARED VARIABLE IsMenang: BOOLEAN := FALSE; 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 BCDPortInput : STD_LOGIC_VECTOR (3 downto 0) := "0000";
--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 kecepatan dari bujur sangkar SHARED VARIABLE SPEED INTEGER := 0;
:
--Clock sebagai buffer CLOCKDIV SIGNAL clock40hz
: STD_LOGIC STD_LOGIC; ;
--Variabel Homepage --Mengatur posisi Counter dari BCDto-7-Segment, Koordinat X
SHARED VARIABLE COUNTERHOME : INTEGER := 0;
SHARED VARIABLE X1 : INTEGER := 20;
SHARED VARIABLE ISHOME : BOOLEAN := TRUE; TRUE ;
SHARED VARIABLE X2 : INTEGER := 25;
Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB
6
--Mengatur kecepatan bujursangkar sesuai dengan state SW[0]
--Komponen Clockdiv digunakan agar pergerakan bujur sangkar dapat terlihat oleh pengguna
CASE currentstate IS WHEN s1 =>
COMPONENT CLOCKDIV IS
--Homepage Permainan
port( port ( CLK: IN std_logic; std_logic;
COUNTERHOME := COUNTERHOME + 1;
DIVOUT: buffer std_logic); std_logic);
IF COUNTERHOME < 50 THEN
end component; component;
ISHOME := TRUE TRUE; ; nextstate <= currentstate;
--Komponen BCD to 7 Segment untuk mengkonversikan skor menjadi tampilan
nextstate <= s2;
COMPONENT Bcd_7seg PORT ( D0, D1, D2, D3 STD_LOGIC ; A, B, C, D, E, F, G STD_LOGIC );
ELSE
ISHOME := FALSE FALSE; ;
: IN
COUNTERHOME := 0; END IF; IF;
: OUT
WHEN s2 =>
END COMPONENT; COMPONENT;
--Inisialisasi Variabel
BEGIN
IsKalah
:= FALSE FALSE; ;
BOLAATAS
:= 340;
BOLABAWAH := 359; PROCESS
BOLAKIRI
BEGIN
:= 305;
BOLAKANAN := 324;
WAIT UNTIL (clock40hz'EVENT (clock40hz'EVENT) ) AND (clock40hz = '1'); PAPANKIRI
--Melakukan konversi skor menjadi binary 4 bit
:= 260;
PAPANKANAN := 380;
BCDPortInput <= STD_LOGIC_VECTOR( STD_LOGIC_VECTOR (TO_UNSIGNED TO_UNSIGNED(SCORE, (SCORE, 4));
PAPANATAS
:= 390;
PAPANBAWAH
:= 400;
--Untuk mereset / mengulang permainan SCORE := 0;
IF (Reset = '0') THEN
ISMENANG := FALSE FALSE; ;
--Memasuki state homepage
ISKALAH := FALSE FALSE; ;
currentstate <= s1; ELSE
--Inisialisasi Bricks
currentstate <= nextstate;
FOR i IN 0 TO 2 LOOP -- Looping untuk variabel i
END IF; IF; END PROCESS; PROCESS;
FOR j IN 0 TO 2 LOOP -- Looping untuk variabel j BRICKS(i + (j*3)).BATASKIRI (j*3)).BATASKIRI <= 150 + (j * 150);
PROCESS(currentstate, PROCESS(currentstate, i_pixel_row,i_pixel_column, PushKanan, PushKiri, LevelMode, IsCounter, Bricks)
BRICKS(i + (j*3)).BATASKANAN <= 200 + (j * 150);
BEGIN
BRICKS(i + (j*3)).BATASATAS <= 50 + (i * 80);
IF (clock40hz'EVENT (clock40hz'EVENT) ) AND (clock40hz = '1') THEN
BRICKS(i + (j*3)).BATASBAWAH (j*3)).BATASBAWAH <= 80 + (i * 80);
Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB
7
BRICKS(i + (j*3)).ISHIDUP <= TRUE TRUE; ;
IF BOLABAWAH <= 395 THEN
END LOOP; LOOP;
BOLAATAS := BOLAATAS + ROTASIY * SPEED;
END LOOP; LOOP;
BOLABAWAH := BOLABAWAH + ROTASIY * SPEED; nextstate <= s3;
BOLAKIRI := BOLAKIRI + ROTASIX * SPEED;
WHEN s3 =>
BOLAKANAN := BOLAKANAN + ROTASIX * SPEED;
IF LevelMode = '1' THEN SPEED := 2; --saat SW[0] = '1' maka mode lambat
END IF; IF;
ELSE
FOR i IN 0 TO 8 LOOP
SPEED := 5; --saat SW[0] = '0' maka mode cepat
IF (BRICKS(i).ISHIDUP) THEN
END IF; IF;
IF BOLAATAS <= 0 THEN ROTASIY := 1; ELSIF BOLABAWAH >= TVD THEN ROTASIY := -1;
ISKENABRICKS ISKENABRICKS := FALSE FALSE; ; --Inisialisasi Variabel --Mengecek apakah Bola mengenai Bricks --Bagian Atas
ELSE ROTASIY := ROTASIY;
IF (BOLABAWAH >= BRICKS(i).BATASATAS) AND (BOLABAWAH <= BRICKS(i).BATASBAWAH) THEN
END IF; IF;
--Jika sumbu x bola Valid
IF BOLAKIRI <= 0 THEN ROTASIX := 1; ELSIF BOLAKANAN >= THD THEN ROTASIX := -1; ELSE ROTASIX := ROTASIX; END IF; IF;
--Kondisi Papan, PAPANATAS = 390
IF (BOLABAWAH >= PAPANATAS) AND (BOLABAWAH <= PAPANBAWAH) THEN
IF ((BOLAKANAN ((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 ISKENABRICKS := TRUE TRUE; ; END IF; IF;
--Jika sumbu x bola Valid
END IF; IF;
IF ((BOLAKANAN >= PAPANKIRI) AND (BOLAKANAN <= PAPANKANAN)) OR ((BOLAKIRI >= PAPANKIRI) AND (BOLAKIRI <= PAPANKANAN)) THEN
--Bagian Kiri
--Inversi arah Y
--Jika sumbu x bola Valid
IF ROTASIY = 1 THEN ROTASIY := -1;
IF ((BOLAATAS >= BRICKS(i).BATASATAS) AND (BOLAATAS <= BRICKS(i).BATASBAWAH)) OR ((BOLABAWAH >= BRICKS(i).BATASATAS) AND (BOLABAWAH <= BRICKS(i).BATASBAWAH)) THEN
ELSE ROTASIY := 1; END IF; IF; END IF; IF; END IF; IF;
--Kondisi masih hijau (lampu merah belum menyala)
IF (BOLAKANAN >= BRICKS(i).BATASKIRI) AND (BOLAKANAN <= BRICKS(i).BATASKANAN) THEN
--Melakukan Inversi arah X dari 1 ke -1 (Pantulan arah kiri) ROTASIX := -1; Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB
8
--Menghancurkan brick
END IF; IF;
ISKENABRICKS := TRUE TRUE; ;
END LOOP; LOOP;
END IF; IF; END IF; IF;
--Mengatur pergerakan papan
--Bagian Kanan
IF (PushKanan = '0') AND (PushKiri = '1') THEN -- Arah 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;
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; IF; ELSIF (PushKanan = '1') AND (PushKiri = '0') THEN -- Arah Kiri PAPANKIRI := PAPANKIRI - 5;
--Menghancurkan brick
PAPANKANAN := PAPANKANAN - 5;
ISKENABRICKS := TRUE TRUE; ; END IF; IF;
IF PAPANKANAN <= (380 - 260) THEN -Jika Papan mencapai batas kiri
END IF; IF;
PAPANKIRI
--Bagian Bawah
PAPANKANAN := 380 - 260;
IF (BOLAATAS >= BRICKS(i).BATASATAS) AND (BOLAATAS <= BRICKS(i).BATASBAWAH) THEN
END IF; IF;
PAPANKANAN := PAPANKANAN;
IF ((BOLAKANAN >= BRICKS(i).BATASKIRI) AND (BOLAKANAN <= BRICKS(i).BATASKANAN)) OR ((BOLAKIRI >= BRICKS(i).BATASKIRI) AND (BOLAKIRI <= BRICKS(i).BATASKANAN)) THEN
END IF; IF;
IF BOLABAWAH > 395 THEN
--Melakukan Inversi arah Y dari -1 ke 1 (Pantulan arah bawah)
--Menghancurkan brick ISKENABRICKS := TRUE TRUE; ; END IF; IF;
ELSE PAPANKIRI := PAPANKIRI;
--Jika sumbu x bola Valid
ROTASIY := 1;
:= 0;
nextstate <= s4; ELSIF SCORE = 9 THEN nextstate <= s5; ELSE nextstate <= currentstate; END IF; IF;
END IF; IF; WHEN s4 =>
--Jika Bola mengenai Bricks, hancurkan Bricks, Tambahkan Skor
IsKalah := TRUE TRUE; ;
IF (ISKENABRICKS) THEN
nextstate <= currentstate;
BRICKS(i).ISHIDUP <= FALSE FALSE; ; --Menambahkan Skor
WHEN s5 =>
SCORE := SCORE + 1;
IsMenang := TRUE TRUE; ;
END IF; IF;
nextstate <= currentstate; Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB
9
END CASE; CASE; END IF; IF; --Untuk mengatur posisi
IF ISHOME THEN --Menampilkan posisi layar Home --huruf B IF ((i_pixel_row ((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 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 ELSIF((i_pixel_row (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 ((i_pixel_row > 10) AND (i_pixel_row <30 ) ) AND ((i_pixel_column >= 260) AND (i_pixel_column (i_pixel_column < 330) AND (COUNTERHOME (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 (i_pixel_column < 330) AND (COUNTERHOME (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 (i_pixel_row <70) ) AND ((i_pixel_column >= 260) AND (i_pixel_column (i_pixel_column < 330) AND (COUNTERHOME (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 (i_pixel_row <120 ) ) AND ((i_pixel_column >= 300) AND (i_pixel_column (i_pixel_column < 330) AND (COUNTERHOME (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 ((i_pixel_row > 10) AND (i_pixel_row (i_pixel_row <120 ) ) AND ((i_pixel_column >= 340) AND (i_pixel_column (i_pixel_column < 370) AND (COUNTERHOME (COUNTERHOME >= 9) ) THEN o_red <= X"FF"; o_green <= X"00"; o_blue <= X"00"; -- kotak i -- huruf C ELSIF ((i_pixel_row ((i_pixel_row > 10) AND (i_pixel_row (i_pixel_row <120 ) ) AND ((i_pixel_column >= 380) AND (i_pixel_column (i_pixel_column < 410) AND (COUNTERHOME (COUNTERHOME >= 12) ) THEN o_red <= X"FF"; o_green <= X"00"; o_blue <= X"00"; -- kotak ckiri ELSIF ((i_pixel_row ((i_pixel_row > 10) AND (i_pixel_row (i_pixel_row <30) ) AND ((i_pixel_column >= 410) AND
Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB
1 0
(i_pixel_column < 450) AND (COUNTERHOME >= 12) ) THEN
o_red <= X"FF"; o_green <= X"00"; o_blue <= X"00"; -- kotak b atas
o_red <= X"FF"; o_green <= X"00"; o_blue <= X"00"; -- kotak c atas
ELSIF ((i_pixel_row >= 130) AND (i_pixel_row <= 240 ) ) AND ((i_pixel_column >= 75) AND (i_pixel_column (i_pixel_column < 105) AND (COUNTERHOME (COUNTERHOME >= 18) ) THEN
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 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 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 kanan ELSIF ((i_pixel_row ((i_pixel_row > 175) AND (i_pixel_row (i_pixel_row <195 ) ) AND ((i_pixel_column >= 35) AND (i_pixel_column (i_pixel_column < 75) AND (COUNTERHOME (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 (i_pixel_row <240 ) ) AND ((i_pixel_column >= 35) AND (i_pixel_column (i_pixel_column < 75) AND (COUNTERHOME (COUNTERHOME >= 18) ) THEN o_red <= X"FF"; o_green <= X"00"; o_blue <= X"00"; -- kotak b bawah --huruf R ELSIF ((i_pixel_row ((i_pixel_row > 130) AND (i_pixel_row (i_pixel_row <240 ) ) AND ((i_pixel_column >= 115) AND (i_pixel_column <145) AND (COUNTERHOME (COUNTERHOME >= 21) ) THEN o_red <= X"FF"; o_green <= X"00"; o_blue <= X"00"; -- kotak R kiri ELSIF ((i_pixel_row ((i_pixel_row > 130) AND (i_pixel_row <150) ) AND ((i_pixel_column >= 145) AND (i_pixel_column (i_pixel_column < 185) AND (COUNTERHOME (COUNTERHOME >= 21) ) THEN o_red <= X"FF"; o_green <= X"00"; o_blue <= X"00"; -- kotak R atas ELSIF ((i_pixel_row ((i_pixel_row > 130) AND (i_pixel_row (i_pixel_row <240 ) ) AND ((i_pixel_column >= 185) AND (i_pixel_column < 215) AND (COUNTERHOME (COUNTERHOME >= 21) ) THEN o_red <= X"FF"; o_green <= X"00"; o_blue <= X"00"; -- kotak R kanan ELSIF ((i_pixel_row ((i_pixel_row > 170) AND (i_pixel_row <190) ) AND ((i_pixel_column >= 145) AND (i_pixel_column (i_pixel_column < 185) AND (COUNTERHOME (COUNTERHOME >= 21) ) THEN o_red <= X"FF"; o_green <= X"00"; o_blue <= X"00"; -- kotak R tengah
-- huruf E Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB
11
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 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 ((i_pixel_row > 130) AND (i_pixel_row <240) ) AND ((i_pixel_column >= 415) AND (i_pixel_column (i_pixel_column < 445) AND (COUNTERHOME (COUNTERHOME >= 30) ) THEN o_red <= X"FF"; o_green <= X"00"; o_blue <= X"00"; -- kotak K kiri ELSIF ((i_pixel_row ((i_pixel_row > 165) AND (i_pixel_row (i_pixel_row <185 ) ) AND ((i_pixel_column >= 445) AND (i_pixel_column (i_pixel_column < 465) AND (COUNTERHOME (COUNTERHOME >= 30) ) THEN o_red <= X"FF"; o_green <= X"00"; o_blue <= X"00"; -- kotak K tengah ELSIF ((i_pixel_row ((i_pixel_row > 145) AND (i_pixel_row (i_pixel_row <165 ) ) AND ((i_pixel_column ((i_pixel_column >= 465) AND (i_pixel_column (i_pixel_column < 485) AND (COUNTERHOME (COUNTERHOME >= 30) ) THEN o_red <= X"FF"; o_green <= X"00"; o_blue <= X"00"; -- kotak K atas kanan ELSIF ((i_pixel_row ((i_pixel_row > 185) AND (i_pixel_row (i_pixel_row <240 ) ) AND ((i_pixel_column >= 465) AND (i_pixel_column (i_pixel_column < 485) AND (COUNTERHOME (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 ((i_pixel_row > 130) AND (i_pixel_row (i_pixel_row <240 ) ) AND ((i_pixel_column >= 495) AND (i_pixel_column (i_pixel_column < 525) AND (COUNTERHOME (COUNTERHOME >= 33) ) THEN o_red <= X"FF"; o_green <= X"00"; o_blue <= X"00"; -- kotak E KIRI ELSIF ((i_pixel_row ((i_pixel_row > 130) AND (i_pixel_row (i_pixel_row <150 ) ) AND ((i_pixel_column >= 525) AND (i_pixel_column (i_pixel_column < 565) AND (COUNTERHOME (COUNTERHOME >= 33) ) THEN o_red <= X"FF"; o_green <= X"00"; o_blue <= X"00"; -- kotak E ATAS ELSIF ((i_pixel_row ((i_pixel_row > 170) AND (i_pixel_row (i_pixel_row <190 ) ) AND ((i_pixel_column >= 525) AND (i_pixel_column (i_pixel_column < 565) AND (COUNTERHOME (COUNTERHOME >= 33) ) THEN o_red <= X"FF"; o_green <= X"00"; o_blue <= X"00"; -- kotak E tengah Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB
12
(i_pixel_column > PAPANKIRI) AND (i_pixel_column < PAPANKANAN)) THEN
ELSIF((i_pixel_row ELSIF((i_pixel_ row > 210) AND (i_pixel_row <240 ) ) AND ((i_pixel_column >= 525) AND (i_pixel_column < 565) AND (COUNTERHOME >= 33) ) THE THEN N
o_red <= X"00"; o_green <= X"00"; o_blue <= X"FF"; ELSIF ((i_pixel_row >= Y1) AND (i_pixel_row (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"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"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"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"FF"; o_blue <= X"00"; --Lampu B ELSIF ((i_pixel_row >= Y4) AND (i_pixel_row (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"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"FF"; o_blue <= X"00"; --Lampu C ELSIF ((i_pixel_row >= Y5) AND (i_pixel_row (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"00"; o_blue <= X"00"; -- kotak R kanan ELSIF((i_pixel_row 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"FF"; o_blue <= X"00"; --Lampu D ELSIF ((i_pixel_row >= Y4) AND (i_pixel_row (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"00"; o_blue <= X"00"; -- kotak R tengah ELSE o_red <= X"FF"; o_green <= X"FF"; o_blue <= X"FF";
o_red <= X"FF"; o_green <= X"FF"; o_blue <= X"00"; --Lampu E
END IF; IF;
ELSIF ((i_pixel_row >= Y2) AND (i_pixel_row (i_pixel_row <= Y3) AND ( i_pixel_column >= X1) AND (i_pixel_column <= X2) AND (IsCounter(5) = '1')) THEN
ELSE
IF ((i_pixel_row ((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"FF"; o_blue <= X"00"; --Lampu F ELSIF ((i_pixel_row >= Y3) AND (i_pixel_row (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"00"; o_blue <= X"00"; --Untuk mengatur posisi papan ELSIF ((i_pixel_row > PAPANATAS) AND (i_pixel_row < PAPANBAWAH) AND
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
Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB
13
< 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"00"; o_green <= X"FF"; o_blue <= X"FF"; --Bricks 6
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
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 (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 (i_pixel_row <= Y5) AND ( i_pixel_column >= X5) AND (i_pixel_column (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 (i_pixel_row <= Y5) AND ( i_pixel_column >= X6) AND (i_pixel_column (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 (i_pixel_row <= Y5) AND ( i_pixel_column >= X6) AND
Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB
14
(i_pixel_column < X7)) AND (NOT IsKalah) THEN
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).
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; IF;
-- Created by Iskandar Setiadi freedomofkeima and Yusuf Fajar Ardiana
END IF; IF;
LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE
END PROCESS; PROCESS;
IEEE.STD_LOGIC_ARITH.ALL;
USE
IEEE.STD_LOGIC_UNSIGNED.ALL;
--Melakukan PORT MAP terhadap clockdiv
USE
IEEE.MATH_REAL.ALL;
load_clockdiv : clockdiv
entity CLOCKDIV is port( port(
PORT MAP (
CLK: IN std_logic; std_logic;
CLK=>
DIVOUT: buffer std_logic); std_logic);
--Mendefinisikan entitas Clock
ClockSystem,
DIVOUT=> clock40hz
end CLOCKDIV;
);
--load BCD to 7 Segment
architecture behavioral of CLOCKDIV is
load_bcdtest :
begin
Bcd_7Seg
PORT MAP( MAP(
PROCESS(CLK) PROCESS (CLK)
D0 => BCDPortInput(0),
variable count: integer integer:=0; :=0;
D1 => BCDPortInput(1),
--Konstanta untuk mengatur framerate
D2 => BCDPortInput(2),
constant div: integer integer:=900000; :=900000;
D3 => BCDPortInput(3),
begin
A
=> IsCounter(0) ,
if CLK'event CLK'event and CLK='1' then
B
=> IsCounter(1) ,
--Counter
C
=> IsCounter(2) ,
if(count
D
=> IsCounter(3) ,
count:=count+1;
E
=> IsCounter(4) ,
if(DIVOUT='0') if (DIVOUT='0') then
F
=> IsCounter(5) ,
DIVOUT<='0';
G
=> IsCounter(6) );
elsif(DIVOUT='1') elsif (DIVOUT='1') then DIVOUT<='1';
END behavioral;
end if; if;
-- All Rights Reserved 2012
else
3.
if(DIVOUT='0') if (DIVOUT='0') then
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.
DIVOUT<='1'; elsif(DIVOUT='1') elsif (DIVOUT='1') then DIVOUT<='0'; end if; if;
Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB
15
count:=0; --Konstanta pengatur scanning horizontal
end if; if;
end if; if; end process; 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
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;
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( PORT ( i_clk
:
IN
STD_LOGIC; STD_LOGIC;
i_red
:
IN
STD_LOGIC; STD_LOGIC;
i_green
:
IN
STD_LOGIC; STD_LOGIC;
i_blue
:
IN
STD_LOGIC; STD_LOGIC;
SIGNAL clock_25MHz
:
STD_LOGIC; STD_LOGIC ;
SIGNAL horiz_sync
:
STD_LOGIC; STD_LOGIC ;
SIGNAL vert_sync
:
STD_LOGIC; STD_LOGIC ;
SIGNAL video_on
:
STD_LOGIC; STD_LOGIC ;
SIGNAL video_on_v
:
STD_LOGIC; STD_LOGIC ;
SIGNAL video_on_h
:
STD_LOGIC; STD_LOGIC ;
SIGNAL h_count : STD_LOGIC_VECTOR( 9 DOWNTO 0 ); SIGNAL v_count : STD_LOGIC_VECTOR( 9 DOWNTO 0 );
BEGIN
--Untuk menentukan warna keluaran o_red
:
OUT
STD_LOGIC; STD_LOGIC;
o_green
:
OUT
STD_LOGIC; STD_LOGIC;
o_blue
:
OUT
STD_LOGIC; STD_LOGIC;
video_on <= video_on_h video_on_v;
AND
--Untuk sinkronisasi sinyal sync o_horiz_sync
:
OUT
STD_LOGIC; STD_LOGIC;
o_vert_sync
:
OUT
STD_LOGIC; STD_LOGIC;
--Untuk menentukan koordinat pixel pada layar LCD o_pixel_row : OUT STD_LOGIC_VECTOR( STD_LOGIC_VECTOR ( 9 DOWNTO 0 );
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;
o_pixel_column : OUT STD_LOGIC_VECTOR( STD_LOGIC_VECTOR ( 9 DOWNTO 0 )); PROCESS (i_clk)
END vga;
BEGIN ARCHITECTURE behavioral OF vga
IS
IF i_clk'EVENT i_clk'EVENT AND i_clk='1' THEN Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB
16
IF (clock_25MHz = '0') THEN
ELSE
clock_25MHz <= '1';
video_on_h
ELSE
END IF; IF;
<= '0';
clock_25MHz <= '0'; END IF; IF;
IF ( v_count
END IF; IF;
video_on_v
END PROCESS; PROCESS;
o_pixel_row
<= TVD-1 ) THEN <= '1'; <= v_count;
ELSE PROCESS
video_on_v
BEGIN
END
IF; IF;
END
PROCESS; PROCESS;
WAIT UNTIL( UNTIL( clock_25MHz'EVENT clock_25MHz'EVENT ( clock_25MHz = '1' ); IF ( h_count h_count
) AND
= TH-1 ) THEN
END behavioral;
<= (others=>'0' );
-- All Rights Reserved 2012
ELSE h_count
5. <= h_count
+ 1;
IF ( h_count <= THB2-1 ) AND (h_count >= THB1-1 ) THEN <= '0';
ELSE horiz_sync
<= '1';
END IF; IF;
IF ( v_count >= TV-1 ) AND ( h_count >= 699 ) THEN v_count
<= (others=>'0' );
ELSE IF ( h_count v_count
= 699 ) THEN
<= v_count
LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL;
--Mendefinisikan entitas BCD-to-7segment
END IF; IF;
ENTITY Bcd_7seg IS
IF ( v_count <= TVB2-1 ) AND ( v_count >= TVB1-1 ) THEN <=
'0';
ELSE vert_sync
-- Created by Iskandar Setiadi freedomofkeima and Yusuf Fajar Ardiana
+ 1;
END IF; IF;
vert_sync
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):
END IF; IF;
horiz_sync
<= '0';
PORT ( D0, D1, D2, D3 STD_LOGIC ; A, B, C, D, E, F, G STD_LOGIC );
: IN : OUT
end Bcd_7seg; <= '1';
END IF; IF;
--Convert to STD LOGIC VECTOR, untuk INTEGER --> BINARY 4 BIT ARCHITECTURE behavioural OF Bcd_7seg IS
IF
( h_count
video_on_h
<= THD-1 ) THEN
<= '1';
o_pixel_colum n
BEGIN
<= h_count; Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB
17
--Logika masing-masing blok penunjuk angka yang telah disederhanakan A <= (D1 OR D3 OR ((NOT ((NOT D0) AND (NOT D2)) OR (D0 AND D2)); B <= ((NOT ((NOT D2) OR (D0 AND D1) OR ((NOT ((NOT D0) AND (NOT D1))); C <= (D0 OR (NOT D1) OR D2); D <= (D3 OR (D1 AND (NOT D2)) OR ((NOT ((NOT D0) AND (NOT D2)) OR (D0 AND (NOT D1) AND D2) OR (D1 AND (NOT D0))); E <= (((NOT (((NOT D0) AND (NOT D2)) OR ((NOT ((NOT D0) AND D1));
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
F <= (D3 OR ((NOT ((NOT D0) AND (NOT D1)) OR ((NOT ((NOT D0) AND D2) OR ((NOT ((NOT D1) AND D2)); G <= (D3 OR (D1 AND (NOT D2)) OR ((NOT ((NOT D1) AND D2) OR ((NOT ((NOT D0) AND D2));
END behavioural; -- All Rights Reserved 2012
4.
H ASIL DAN A NALISIS NALISIS
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
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 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.
Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB
18
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. 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.
Dan dibawah ini adalah state tambahan yang tidak ada pada perencanaan awal menampilkan tulisan break breaker yang berkedip dua kali pada bagian awal state.
Pada percobaan lanjutan implementasi yang dilakukan adalah pembuatan beberapa state menang dan kalah dengan penyempurnaan tampilan interface permainan berikut ini adalah previewnya
Dan dibawah 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. 5. 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
K ESIMPULAN ESIMPULAN
Dari hasil perobaan dan analisis yang telah kami lakukan dan jelaskan diatas dapat diambil kesimpulan sebagai berikut
Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB
19
1.
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 D AFTAR 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/pen dukung%20praktikum/de1_usermanual_v101 7.pdf , 9 Desember 2012, pukul 15:45:10
Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB
2 0