Anda di halaman 1dari 46

LAPORAN

PRAKTIKUM SISTEM DIGITAL


PROYEK PERANCANGAN RANGKAIAN DIGITAL
PAC-GIRL

NAMA ASISTEN : REYMOND SULUH T (13115040)

Shift C2 – Kelompok 2 :

1. Diyah Widiyasari

2. Dika Nugroho

3. M.Ramadhan

4. M.Iqbal Firdaus Bachmid

LABORATORIUM DASAR TEKNIK ELEKTRO


INSTITUT TEKNOLOGI SUMATERA
PERCOBAAN VI
PROYEK PERANCANGAN RANGKAIAN DIGITAL
Kelompok 02- Shift C2
Asisten : Reymond Suluh T(13115040)
Tanggal Percobaan : 19/12/2017
EL2104 Praktikum Sistem Digital
Laboratorium Teknik Elektro – Institut Teknologi Sumatera

Abstrak – Dalam percobaan terakhir Mempraktikan Ilmu yang didapat dari


yaitu Proyek Perancangan Rangkaian praktikum sebelumnya Game ini
Digital kelompok kami membuat mempunyai konsep tidak berbeda jauh
sebuah sebuah rancangan game yang dengan Game aslinya (Pacman), hanya
kami bernama PAC-GIRL. Game ini saja Game ini mempunya perbedaan yang
menggunakan FPGA yang terletak pada Parameter yang
diimplementasikan ke dalam modul menunjukkan menang dan kalah.
VGA dan dapat dimainkan dengan Parameter tersebut berupa Garis Bar yang
display LCD. Pada dasarnya game ini seiring berjalan nya waktu, maka semakin
seperti game PAC-MAN pada berkurang Garis pada Bar tersebut. Ketika
umumnya yaitu karakter yang Permainan berakhir dengan kekalahan
memakan suatu makanan di setiap sela- maka semua Objek yang ada pada karakter
sela jalur yang ada. tidak akan bisa di gerakkan, jika
Hanya saja pada game PAC-GIRL yang Permainan berakhir dengan Kemenangan
kami buat, ada beberapa hal yang kami Layar akan berubah warna menjadi Hijau.
ubah seperti penghalang, tidak ada
musuh, dan juga kami memberikan
II. TEORI DASAR
waktu bermain pada game ini
Video Graphics Array (VGA) masih
Kata kunci : FPGA, VGA, interface ke menjadi interface yang popular untuk
VGA, display LC, PAC GIRL sebuah tampilan. VGA interface ini masih
banyak ditemukan di beberapa device
sekarang, misalnya layar LCD dan
I. PENDAHULUAN proyektor. VGA interface ini terdapat juga
di board altera yang kita gunakan saat ini.
Pada praktikum ini kita akan membuat
sebuah proyek perancangan rangkaian Pada percobaan kali ini tampilan VGA
digital. Kelompok kami membuat sebuah digunakan sebagai wadah untuk
proyek perancagan game yang kami menampilkan Hasil Script VHDL Game
berinama PAC-GIRL. Dalam perancangan yang telah dibuat sebelumnya.
game ini kami melakukan Penyusunan 2.1 Sinyal Warna
Konsep yang didasari beberapa tahapan
Interface ke VGA menggunakan 2 jenis
yaitu kami mendesain FSM , serta
Sinyal, yaitu : Sinyal warna (Merah, Hijau,
Interface Game yang akan kita buat.. Pada
dan Biru) dan Sinyal Sinkron (Horizontal
percangan Game ini kami menggunakan
dan Vertical). Berikut adalah penjelasan
beberapa komponen dan Interface seprti
beberapa sinyal yang digunakan :
VGA, dan display LCD. Dengan
a. Horizontal Sync (TTL Level)
Sinyal ini akan aktif pada range piksel
3.2 Prosedur Percobaan
kolom 0 sampai dengan 639. Sehingga
kalau sinyal ini aktif,yang terjadi adalah Percobaan ini mengintegrasikan berbagai
pergantian baris. macam modul yang telah kita pelajari pada
praktikum-praktikum sebelumnya.
b. Vertical Sync (TTL Level)
Sinyal ini akan aktif pada range piksel Desain FSM :
baris 0 sampai dengan 479. Sehingga kalau
sinyal ini tidak aktif, yang terjadi adalah
pergantian layar, atau kembali ke barus
Pertama.

c. Sinyal RGB (Analog 3 Pin : 0,7 – 1 V)


Sinyal ini mempresentasikan intensitas
untuk masing-masing komponen warna
merah, hijau, dan biru untuk setiap pixel
yang saat itu aktif. Sehingga yang terjadi
ketiga sinyal ini berubah-ubah sesuai pixel
yang sedang aktif dalam proses scanning S0 = kondisi Awal
(dari kiri e kanan untuk setiap baris,
S1 = Kondisi saat bergerak
selanjutnya dari baris paling atas sampai
atas sampai bari paling bawah). S3 = Kondisi saat waktu habis
2.2 Modul VGA Driver S4 = Kondisi saat makanan habis
Modul VGA (Video Graphics Array) yang
Sebelum kami membuat game pac girl
digunakan kali ini adalah salah satu modul
tersebut kami terlebih dahulu melakukan
VGA yang pernah diimplementasikan
bebebrapa step, yaitu kia rancanga terlebih
pada percobaan yang lalu. Driver ini
dahulu game yang akan kita buat , lalu kita
berfungsi untuk merepresentasikan
buat state diagramnya lalu kita buat FSM
masukkan logika FPGA menjadi tampilan
dan buat inteface game tersebut, setelah
warna pada layar display LCD. Modul ini
itu kita buat programnya dengan VHDL
menerima masukkan port yang ingin
dan menggunakan modul VGA .
dinyalakan, dan mengkonversikan
masukkan menjadi warna pada layar
(RGB).
Prosedur percobaan dalam percobaan kali
III. METADOLOGI ini kita menggunakan 5 file VHDL , yaitu:
3.1 Alat dan Percobaan. top_level_vhd,
 Board FPGA tipe DE1 display_vhd,color_rom_vhd,
 Catu daya + kabel dan konektor CLOCKDIV, vga.vhd.
tambahanserta kabel downloader.
Desain interface :
 Monitor LCD
kodedisplay_vhd,color_rom_vhd,
CLOCKDIV, vga.vhd.

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

USE IEEE.STD_LOGIC_ARITH.ALL;

Gambar desian interface PAC-GIRL USE IEEE.STD_LOGIC_UNSIGNED.ALL;

Pada gambar desain interface kami


memiliki konsep sebagai berikut :
ENTITY top_level_vhd IS
Karakter game ukurannya 40 pixel ,
makanannya berukran 10 pixel dan batas- kode yang ada di dalamnya yaitu
batas game berukuran 50 pixel, dan jarak ENTITY top_level_vhd IS
setiap batas dengan batas yang lain itu
jaraknya 50 pixel PORT(

Pengalang yang kami buat ada 9 serta CLOCK_50 : IN STD_LOGIC;


makanan yang kami buat ada 25 makanan SW : IN
Cara pengoperasiannya : STD_LOGIC_VECTOR( 9 DOWNTO 0 );

karakter akan memakan makanan dan VGA_R : OUT


STD_LOGIC_VECTOR( 5 DOWNTO 0 );
dibatisi oleh waktu pada layar jika karakter
memakan makanan warna hijau maka VGA_G : OUT
waktu akan bertambah , dan jika karakter STD_LOGIC_VECTOR( 5 DOWNTO 0 );
belum memakan semua makanan dan
waktu berakhir maka game akan berakhir VGA_B : OUT
dengan ditandai warna merah pada layar, STD_LOGIC_VECTOR( 5 DOWNTO 0 );
jika karakter dapat memakan semua VGA_HS : OUT STD_LOGIC;
makanan dan waktu bermain belum
berakhir maka pemain di anggap menang VGA_VS : OUT STD_LOGIC;
atau win degan ditandai warna hijau pada
VGA_CLK : OUT STD_LOGIC;
layar
VGA_BLANK : OUT STD_LOGIC);
3.3 Scirpt VHDL Yang Kami Gunakan :
1. Top_Level_Vhd END top_level_vhd;

Script top leve vhd ini merupakan bagian ARCHITECTURE behavioral OF


inti dari program yang kami rancang dan top_level_vhd IS
merupakan top_level_entity rancangan
game yang kami buat. Kode ini meupakan SIGNAL M_US : STD_LOGIC;
kode yang menghubungkan antara SIGNAL K_US : STD_LOGIC;

SIGNAL H_US : STD_LOGIC;

SIGNAL M_BT : STD_LOGIC;

SIGNAL K_BT : STD_LOGIC;


);
i_K_BT : IN STD_LOGIC;
M_US <= SW(0) ;
i_H_BT : IN STD_LOGIC;

VGA_R : OUT K_US <= SW(1) ;


STD_LOGIC_VECTOR( 5 DOWNTO 0 );
H_US <= SW(2) ;
VGA_G : OUT
STD_LOGIC_VECTOR( 5 DOWNTO 0 ); M_BT <= SW(3) ;

VGA_B : OUT K_BT <= SW(4) ;


STD_LOGIC_VECTOR( 5 DOWNTO 0 );
H_BT <= CLOCK_50 ;
VGA_HS : OUT STD_LOGIC;

VGA_VS : OUT STD_LOGIC;

VGA_CLK : OUT STD_LOGIC; END behavioral;


VGA_BLANK : OUT STD_LOGIC);

END COMPONENT;

BEGIN 2. Display_Vhd

module_vga : display_vhd Bagian display Vhd ini merupakan bagian


yang berfungsi untuk menghubungkan port
PORT MAP (
color rumvhd dan vga dan pengaturan
i_clk => CLOCK_50, warna RGB
i_M_US => M_US,
LIBRARY IEEE;
i_K_US => K_US,
USE IEEE.STD_LOGIC_1164.ALL;
i_H_US => H_US,
USE IEEE.STD_LOGIC_ARITH.ALL;
i_M_BT => M_BT, USE IEEE.STD_LOGIC_UNSIGNED.ALL;
i_K_BT => K_BT,

i_H_BT => H_BT, ENTITY display_vhd IS

VGA_R => VGA_R, PORT(

VGA_G => VGA_G, i_clk : IN STD_LOGIC;

VGA_B => VGA_B, i_M_US : IN STD_LOGIC;

VGA_HS => VGA_HS, i_K_US : IN STD_LOGIC;

VGA_VS => VGA_VS, i_H_US : IN STD_LOGIC;

i_M_BT : IN STD_LOGIC;
VGA_CLK => VGA_CLK,
i_K_BT : IN STD_LOGIC;
VGA_BLANK => VGA_BLANK
i_H_BT : IN STD_LOGIC;
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 );
COMPONENT vga IS
VGA_HS : OUT STD_LOGIC;
PORT(
VGA_VS : OUT STD_LOGIC; i_clk : IN STD_LOGIC;
i_red : IN STD_LOGIC;
VGA_CLK : OUT STD_LOGIC;
i_green : IN STD_LOGIC;
VGA_BLANK : OUT STD_LOGIC); i_blue : IN STD_LOGIC;
o_red : OUT STD_LOGIC;
END display_vhd; o_green : OUT STD_LOGIC;
o_blue : OUT STD_LOGIC;
o_horiz_sync : OUT STD_LOGIC;
ARCHITECTURE behavioral OF display_vhd IS o_vert_sync : OUT STD_LOGIC;
o_pixel_row :OUT STD_LOGIC_VECTOR( 9
SIGNAL red : STD_LOGIC_VECTOR (5 DOWNTO 0 );
DOWNTO 0);
o_pixel_column : OUT STD_LOGIC_VECTOR( 9
SIGNAL green : STD_LOGIC_VECTOR (5 DOWNTO 0 ));
DOWNTO 0);
END COMPONENT;
SIGNAL blue : STD_LOGIC_VECTOR (5 COMPONENT color_rom_vhd IS
DOWNTO 0);
PORT(
SIGNAL red_color : STD_LOGIC_VECTOR (7 i_M_US : IN STD_LOGIC;
DOWNTO 0); i_K_US : IN STD_LOGIC;
i_H_US : IN STD_LOGIC;
SIGNAL green_color : STD_LOGIC_VECTOR (7 i_M_BT : IN STD_LOGIC;
DOWNTO 0);
i_K_BT : IN STD_LOGIC;
SIGNAL blue_color : STD_LOGIC_VECTOR (7 i_H_BT : IN STD_LOGIC;
DOWNTO 0); i_pixel_column : IN STD_LOGIC_VECTOR( 9
DOWNTO 0 );
SIGNAL pixel_row : STD_LOGIC_VECTOR (9 i_pixel_row : IN STD_LOGIC_VECTOR( 9
DOWNTO 0); DOWNTO 0 );
SIGNAL pixel_column : STD_LOGIC_VECTOR (9
DOWNTO 0); o_red : OUT STD_LOGIC_VECTOR( 7
DOWNTO 0 );
o_green : OUT STD_LOGIC_VECTOR( 7
DOWNTO 0 );
SIGNAL red_on : STD_LOGIC;
o_blue : OUT STD_LOGIC_VECTOR( 7
SIGNAL green_on : STD_LOGIC; DOWNTO 0 ));
END COMPONENT;
SIGNAL blue_on : STD_LOGIC;
BEGIN
IF(red_on = '1' ) THEN VGA_R <= red;
vga_driver0 : vga
ELSE VGA_R <= "000000";
PORT MAP (
END IF;
i_clk => i_clk,

i_red => '1',

i_green => '1', IF (green_on = '1' ) THEN VGA_G <=


green;
i_blue => '1',
ELSE VGA_G <= "000000";
o_red => red_on,
END IF;
o_green => green_on,

o_blue => blue_on,


IF (blue_on = '1' ) THEN VGA_B <= blue;
o_horiz_sync => VGA_HS,
ELSE VGA_B <= "000000";
o_vert_sync => VGA_VS,
END IF;
o_pixel_row => pixel_row,

o_pixel_column => pixel_column

); END PROCESS;

color_rom0 : color_rom_vhd END behavioral;

PORT MAP (

i_M_US => i_M_US,


3. Color_Rom_Vhd
i_K_US => i_K_US,
Pada bagian color rum vhd ini adalah main
i_H_US => i_H_US,
programnya dari game yang kelompok
i_M_BT => i_M_BT,
kami buat dimana disini terdapat berbagai
i_K_BT => i_K_BT,
state yang telah kita buat diantaranya
i_H_BT => i_H_BT,
adalah interface atau bentuk game ,
i_pixel_column => pixel_column,
karakter game makanan , serta batas
i_pixel_row => pixel_row, penghalang. Didalam color rum vhd ini
o_red => red_color, juga terdapat cara pergerakan game kami ,
o_green => green_color, karakter memakan makanan serta
o_blue => blue_color); perwarna dari karakter, bacground dan
red <= red_color (7 DOWNTO 2) ; batas serta batas waktu dan batas skor dan

green <= green_color(7 DOWNTO 2) ; state lain yang akan kami jelaskan leih

blue <= blue_color (7 DOWNTO 2) ;


jelas nanti dibawah :

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

BEGIN
LIBRARY IEEE; CONSTANT k_HALANG10 : INTEGER
USE IEEE.STD_LOGIC_1164.ALL; :=0;
USE IEEE.STD_LOGIC_ARITH.ALL; CONSTANT k_HALANG11 : INTEGER
USE IEEE.STD_LOGIC_UNSIGNED.ALL; :=100;
CONSTANT k_HALANG12 : INTEGER
ENTITY color_rom_vhd IS :=140;
PORT( CONSTANT k_HALANG13 : INTEGER
i_M_US : IN STD_LOGIC; -- atas :=350;
i_K_US : IN STD_LOGIC; -- bawah CONSTANT k_HALANG14 : INTEGER
i_H_US : IN STD_LOGIC; -- kanan :=390;
i_M_BT : IN STD_LOGIC; -- kiri CONSTANT k_HALANG15 : INTEGER
i_K_BT : IN STD_LOGIC; -- kecepatan :=640;
i_H_BT : IN STD_LOGIC; -- waktu` CONSTANT waktu_kiri : INTEGER :=0;
i_pixel_column : IN STD_LOGIC_VECTOR( 9 CONSTANT waktu_atas : INTEGER :=0;
DOWNTO 0 );
i_pixel_row : IN STD_LOGIC_VECTOR( 9 SHARED VARIABLE waktu_bawah : INTEGER
DOWNTO 0 ); :=20;
o_red : OUT STD_LOGIC_VECTOR( 7 SHARED VARIABLE waktu_kanan : INTEGER
DOWNTO 0 ); :=640;
o_green : OUT STD_LOGIC_VECTOR( 7
DOWNTO 0 ); ---MAKANAN1
o_blue : OUT STD_LOGIC_VECTOR( 7 SHARED VARIABLE makan_ki1 : INTEGER
DOWNTO 0 )); :=120;
END color_rom_vhd; SHARED VARIABLE makan_ka1 : INTEGER
:=130;
ARCHITECTURE behavioral OF color_rom_vhd SHARED VARIABLE makan_a1 : INTEGER
IS :=380;
SHARED VARIABLE makan_b1 : INTEGER
CONSTANT BATASBARIS : INTEGER := 479; :=390;
CONSTANT BATASKOLOM : INTEGER := 639; -- MAKANAN 2
SHARED VARIABLE makan_2ki : INTEGER
CONSTANT B_HALANG11 : INTEGER :=120;
:=420; --BAWAH SHARED VARIABLE makan_2ka : INTEGER
CONSTANT B_HALANG12 : INTEGER :=130;
:=370; --ATAS SHARED VARIABLE makan_2a1 : INTEGER
CONSTANT B_HALANG13 : INTEGER :=280;
:=140; --BAWAH SHARED VARIABLE makan_2b1 : INTEGER
CONSTANT B_HALANG14 : INTEGER :=290;
:=350; --ATAS --MAKANAN 3
CONSTANT B_HALANG21 : INTEGER SHARED VARIABLE makan_3ki : INTEGER
:=320; :=120;
CONSTANT B_HALANG22 : INTEGER SHARED VARIABLE makan_3ka : INTEGER
:=270; :=130;
CONSTANT B_HALANG31 : INTEGER SHARED VARIABLE makan_3a1 : INTEGER
:=220; :=180;
CONSTANT B_HALANG32 : INTEGER :=170; SHARED VARIABLE makan_3b1 : INTEGER
CONSTANT B_HALANG41 : INTEGER :=190;
:=120; --MAKANAN 4
CONSTANT B_HALANG42 : INTEGER
:=70; SHARED VARIABLE makan_4ki : INTEGER
:=370;
SHARED VARIABLE makan_4ka : INTEGER --MAKANAN 10
:=380; SHARED VARIABLE makan_10ki : INTEGER
SHARED VARIABLE makan_4a1 : INTEGER :=190;
:=380; SHARED VARIABLE makan_10ka : INTEGER
SHARED VARIABLE makan_4b1 : INTEGER :=200;
:=390; SHARED VARIABLE makan_10a1 : INTEGER
-- MAKANAN 5 :=340;
SHARED VARIABLE makan_5ki : INTEGER SHARED VARIABLE makan_10b1 : INTEGER
:=370; :=350;
SHARED VARIABLE makan_5ka : INTEGER --MAKANAN 11
:=380; SHARED VARIABLE makan_11ki : INTEGER
SHARED VARIABLE makan_5a1 : INTEGER :=220;
:=280; SHARED VARIABLE makan_11ka : INTEGER
SHARED VARIABLE makan_5b1 : INTEGER :=230;
:=290; SHARED VARIABLE makan_11a1 : INTEGER
--MAKANAN 6 :=340;
SHARED VARIABLE makan_6ki : INTEGER SHARED VARIABLE makan_11b1 : INTEGER
:=370; :=350;
SHARED VARIABLE makan_6ka : INTEGER --MAKANAN 12
:=380; SHARED VARIABLE makan_12ki : INTEGER
SHARED VARIABLE makan_6a1 : INTEGER :=420;
:=180; SHARED VARIABLE makan_12ka : INTEGER
SHARED VARIABLE makan_6b1 : INTEGER :=430;
:=190; SHARED VARIABLE makan_12a1 : INTEGER
--MAKANAN 7 :=340;
SHARED VARIABLE makan_7ki : INTEGER SHARED VARIABLE makan_12b1 : INTEGER
:=40; :=350;
SHARED VARIABLE makan_7ka : INTEGER --MAKANAN 13
:=50; SHARED VARIABLE makan_13ki : INTEGER
SHARED VARIABLE makan_7a1 : INTEGER :=460;
:=340; SHARED VARIABLE makan_13ka : INTEGER
SHARED VARIABLE makan_7b1 : INTEGER :=470;
:=350; SHARED VARIABLE makan_13a1 : INTEGER
--MAKANAN 8 :=340;
SHARED VARIABLE makan_8ki : INTEGER SHARED VARIABLE makan_13b1 : INTEGER
:=70; :=350;
SHARED VARIABLE makan_8ka : INTEGER
:=80; --MAKANAN 14
SHARED VARIABLE makan_8a1 : INTEGER SHARED VARIABLE makan_14ki : INTEGER
:=340; :=500;
SHARED VARIABLE makan_8b1 : INTEGER SHARED VARIABLE makan_14ka : INTEGER
:=350; :=510;
--MAKANAN 9 SHARED VARIABLE makan_14a1 : INTEGER
SHARED VARIABLE makan_9ki : INTEGER :=340;
:=160; SHARED VARIABLE makan_14b1 : INTEGER
SHARED VARIABLE makan_9ka : INTEGER :=350;
:=170;
SHARED VARIABLE makan_9a1 : INTEGER --MAKANAN 15
:=340; SHARED VARIABLE makan_15ki : INTEGER
SHARED VARIABLE makan_9b1 : INTEGER :=40;
:=350; SHARED VARIABLE makan_15ka : INTEGER
:=50; :=430;
SHARED VARIABLE makan_15a1 : INTEGER SHARED VARIABLE makan_20a1 : INTEGER
:=240; :=240;
SHARED VARIABLE makan_15b1 : INTEGER SHARED VARIABLE makan_20b1 : INTEGER
:=250; :=250;

--MAKANAN 16 --MAKANAN 21
SHARED VARIABLE makan_16ki : INTEGER SHARED VARIABLE makan_21ki : INTEGER
:=70; :=460;
SHARED VARIABLE makan_16ka : INTEGER SHARED VARIABLE makan_21ka : INTEGER
:=80; :=470;
SHARED VARIABLE makan_16a1 : INTEGER SHARED VARIABLE makan_21a1 : INTEGER
:=240; :=240;
SHARED VARIABLE makan_16b1 : INTEGER SHARED VARIABLE makan_21b1 : INTEGER
:=250; :=250;

--MAKANAN 17
SHARED VARIABLE makan_17ki : INTEGER --MAKANAN 22
:=160; SHARED VARIABLE makan_22ki : INTEGER
SHARED VARIABLE makan_17ka : INTEGER :=500;
:=170; SHARED VARIABLE makan_22ka : INTEGER
SHARED VARIABLE makan_17a1 : INTEGER :=510;
:=240; SHARED VARIABLE makan_22a1 : INTEGER
SHARED VARIABLE makan_17b1 : INTEGER :=240;
:=250; SHARED VARIABLE makan_22b1 : INTEGER
:=250;
--MAKANAN 18
SHARED VARIABLE makan_18ki : INTEGER
:=190; --MAKANAN 23
SHARED VARIABLE makan_18ka : INTEGER SHARED VARIABLE makan_23ki : INTEGER
:=200; :=70;
SHARED VARIABLE makan_18a1 : INTEGER SHARED VARIABLE makan_23ka : INTEGER
:=240; :=80;
SHARED VARIABLE makan_18b1 : INTEGER SHARED VARIABLE makan_23a1 : INTEGER
:=250; :=140;
SHARED VARIABLE makan_23b1 : INTEGER
--MAKANAN 19 :=150;
SHARED VARIABLE makan_19ki : INTEGER
:=220;
SHARED VARIABLE makan_19ka : INTEGER
:=230; --MAKANAN 24
SHARED VARIABLE makan_19a1 : INTEGER SHARED VARIABLE makan_24ki : INTEGER
:=240; :=190;
SHARED VARIABLE makan_19b1 : INTEGER SHARED VARIABLE makan_24ka : INTEGER
:=250; :=200;
SHARED VARIABLE makan_24a1 : INTEGER
--MAKANAN 20 :=140;
SHARED VARIABLE makan_20ki : INTEGER SHARED VARIABLE makan_24b1 : INTEGER
:=420; :=150;
SHARED VARIABLE makan_20ka : INTEGER
--WAKTU MAIN
--MAKANAN 25
SHARED VARIABLE makan_25ki : INTEGER IF clock40hz'event and clock40hz = '1' THEN
:=460; KECEPATAN_MAIN := 1;
SHARED VARIABLE makan_25ka : INTEGER IF i_K_BT = '0' THEN
:=470; KECEPATAN := 5;
SHARED VARIABLE makan_25a1 : INTEGER ELSE
:=140; KECEPATAN := 10;
SHARED VARIABLE makan_25b1 : INTEGER END IF;
:=150; END IF;

CONSTANT finish1 : INTEGER :=0; --penghalang 1


CONSTANT finish2 : INTEGER :=30; IF ((i_pixel_column > k_HALANG10) AND
(i_pixel_column < k_HALANG11) AND
SHARED VARIABLE B_ATAS : INTEGER := 450; (i_pixel_row < B_HALANG11) AND
SHARED VARIABLE B_KIRI : INTEGER := 300; (i_pixel_row > B_HALANG12)) THEN
SHARED VARIABLE B_KANAN : INTEGER := M_TF1 <= '1'; ELSE M_TF1 <= '0';
329; END IF;
SHARED VARIABLE B_BAWAH : INTEGER := IF ((i_pixel_column >= k_HALANG12) AND
479; (i_pixel_column <= B_HALANG13) AND
(i_pixel_row < B_HALANG11) AND
SHARED VARIABLE skor_atas: INTEGER := 21; (i_pixel_row > B_HALANG12))
SHARED VARIABLE skor_bawah: INTEGER := THEN
41; M_TF1 <= '1';
SHARED VARIABLE skor_kanan: INTEGER := END IF;
10;
SHARED VARIABLE skor_kiri: INTEGER := 0; IF ((i_pixel_column > k_HALANG14) AND
(i_pixel_column < k_HALANG15) AND
SHARED VARIABLE KECEPATAN : INTEGER := 0; (i_pixel_row < B_HALANG11) AND
SHARED VARIABLE KECEPATAN_MAIN : (i_pixel_row > B_HALANG12))
INTEGER := 0; THEN
SIGNAL M_TF1, M_TF2 : STD_LOGIC; M_TF1 <= '1';
SIGNAL K_TF1, K_TF2 : STD_LOGIC; END IF;
SIGNAL H_TF1, H_TF2 : STD_LOGIC;
--penghalang 2
SIGNAL clock40hz : STD_LOGIC; IF ((i_pixel_column > 0) AND (i_pixel_column
SIGNAL clock50hz : STD_LOGIC; < 100) AND
(i_pixel_row < B_HALANG21) AND
COMPONENT CLOCKDIV is (i_pixel_row > B_HALANG22))
port ( CLK : IN std_logic;DIVOUT : THEN
buffer std_logic); M_TF1 <= '1';
end component; END IF;
IF ((i_pixel_column > 140) AND
BEGIN (i_pixel_column < 350) AND
(i_pixel_row < B_HALANG21) AND
PROCESS(i_pixel_row,i_pixel_column, i_M_US (i_pixel_row > B_HALANG22))
, i_K_US , i_H_US , i_M_BT , i_K_BT , i_H_BT THEN
, M_TF1 , M_TF2 , M_TF1 <= '1';
K_TF1 , M_TF2 , H_TF1 , H_TF2) END IF;
BEGIN IF ((i_pixel_column > 390) AND
(i_pixel_column < 640) AND THEN
(i_pixel_row < B_HALANG21) AND M_TF1 <= '1';
(i_pixel_row > B_HALANG22)) END IF;
THEN
M_TF1 <= '1'; --karakter
END IF; --MAKANAN
IF ((i_pixel_column > makan_ki1 ) AND
--penghalang 3 (i_pixel_column < makan_ka1) AND
IF ((i_pixel_column > 0) AND (i_pixel_column (i_pixel_row > makan_a1) AND (i_pixel_row <
< 100) AND makan_b1))
(i_pixel_row < B_HALANG11) AND THEN
(i_pixel_row > B_HALANG12)) M_TF1 <= '1';
THEN END IF;
M_TF1 <= '1'; --2
END IF; IF ((i_pixel_column > makan_2ki ) AND
IF ((i_pixel_column > 140) AND (i_pixel_column < makan_2ka) AND
(i_pixel_column < 350) AND (i_pixel_row > makan_2a1) AND (i_pixel_row
(i_pixel_row < B_HALANG11) AND < makan_2b1))
(i_pixel_row > B_HALANG12)) THEN
THEN M_TF1 <= '1';
M_TF1 <= '1'; END IF;
END IF; --3
IF ((i_pixel_column > makan_3ki ) AND
IF ((i_pixel_column > 390) AND (i_pixel_column < makan_3ka) AND
(i_pixel_column < 640) AND (i_pixel_row > makan_3a1) AND (i_pixel_row
(i_pixel_row < B_HALANG11) AND < makan_3b1))
(i_pixel_row > B_HALANG12)) THEN
THEN M_TF1 <= '1';
M_TF1 <= '1'; END IF;
END IF;
--4
--penghalang 3 IF ((i_pixel_column > makan_4ki ) AND
IF ((i_pixel_column > 0) AND (i_pixel_column (i_pixel_column < makan_4ka) AND
< 100) AND (i_pixel_row > makan_4a1) AND (i_pixel_row
(i_pixel_row < B_HALANG31) AND < makan_4b1))
(i_pixel_row > B_HALANG32)) THEN
THEN M_TF1 <= '1';
M_TF1 <= '1'; END IF;
--5
END IF; IF ((i_pixel_column > makan_5ki ) AND
IF ((i_pixel_column > 140) AND (i_pixel_column < makan_5ka) AND
(i_pixel_column < 350) AND (i_pixel_row > makan_5a1) AND (i_pixel_row
(i_pixel_row < B_HALANG31) AND < makan_5b1))
(i_pixel_row > B_HALANG32)) THEN
THEN M_TF1 <= '1';
M_TF1 <= '1'; END IF;
END IF; --6
IF ((i_pixel_column > 390) AND IF ((i_pixel_column > makan_6ki ) AND
(i_pixel_column < 640) AND (i_pixel_column < makan_6ka) AND
(i_pixel_row < B_HALANG31) AND (i_pixel_row > makan_6a1) AND (i_pixel_row
(i_pixel_row > B_HALANG32)) < makan_6b1))
THEN (i_pixel_row > makan_12a1) AND (i_pixel_row
M_TF1 <= '1'; < makan_12b1))
END IF; THEN
--7 M_TF1 <= '1';
IF ((i_pixel_column > makan_7ki ) AND END IF;
(i_pixel_column < makan_7ka) AND --13
(i_pixel_row > makan_7a1) AND (i_pixel_row IF ((i_pixel_column > makan_13ki ) AND
< makan_7b1)) (i_pixel_column < makan_13ka) AND
THEN (i_pixel_row > makan_13a1) AND
M_TF1 <= '1'; (i_pixel_row < makan_13b1))
END IF; THEN
M_TF1 <= '1';
--8 END IF;
IF ((i_pixel_column > makan_8ki ) AND --14
(i_pixel_column < makan_8ka) AND IF ((i_pixel_column > makan_14ki ) AND
(i_pixel_row > makan_8a1) AND (i_pixel_row (i_pixel_column < makan_14ka) AND
< makan_8b1)) (i_pixel_row > makan_14a1) AND (i_pixel_row
THEN < makan_14b1))
M_TF1 <= '1'; THEN
END IF; M_TF1 <= '1';
END IF;
--9 --15
IF ((i_pixel_column > makan_9ki ) AND IF ((i_pixel_column > makan_15ki ) AND
(i_pixel_column < makan_9ka) AND (i_pixel_column < makan_15ka) AND
(i_pixel_row > makan_9a1) AND (i_pixel_row (i_pixel_row > makan_15a1) AND (i_pixel_row
< makan_9b1)) < makan_15b1))
THEN THEN
M_TF1 <= '1'; M_TF1 <= '1';
END IF; END IF;
--16
--10 IF ((i_pixel_column > makan_16ki ) AND
IF ((i_pixel_column > makan_10ki ) AND (i_pixel_column < makan_16ka) AND
(i_pixel_column < makan_10ka) AND (i_pixel_row > makan_16a1) AND (i_pixel_row
(i_pixel_row > makan_10a1) AND < makan_16b1))
(i_pixel_row < makan_10b1)) THEN
THEN M_TF1 <= '1';
M_TF1 <= '1'; END IF;
END IF; --17
IF ((i_pixel_column > makan_17ki ) AND
--11 (i_pixel_column < makan_17ka) AND
IF ((i_pixel_column > makan_11ki ) AND (i_pixel_row > makan_17a1) AND
(i_pixel_column < makan_11ka) AND (i_pixel_row < makan_17b1))
(i_pixel_row > makan_11a1) AND (i_pixel_row THEN
< makan_11b1)) M_TF1 <= '1';
THEN END IF;
M_TF1 <= '1'; --18
END IF; IF ((i_pixel_column > makan_18ki ) AND
(i_pixel_column < makan_18ka) AND
--12 (i_pixel_row > makan_18a1) AND
IF ((i_pixel_column > makan_12ki ) AND (i_pixel_row < makan_18b1))
(i_pixel_column < makan_12ka) AND THEN
M_TF1 <= '1'; END IF;
END IF; --25
--19 IF ((i_pixel_column > makan_25ki ) AND
IF ((i_pixel_column > makan_19ki ) AND (i_pixel_column < makan_25ka) AND
(i_pixel_column < makan_19ka) AND (i_pixel_row > makan_25a1) AND (i_pixel_row
(i_pixel_row > makan_19a1) AND (i_pixel_row < makan_25b1))
< makan_19b1)) THEN
THEN M_TF1 <= '1';
M_TF1 <= '1'; END IF;
END IF;
--20
IF ((i_pixel_column > makan_20ki ) AND ----warna
(i_pixel_column < makan_20ka) AND IF M_TF1 = '1' THEN o_red <= X"E8"; o_green
(i_pixel_row > makan_20a1) AND (i_pixel_row <= X"4C"; o_blue <= X"3C";
< makan_20b1)) ELSIF M_TF1 = '0' THEN o_red <= X"00";
THEN o_green <= X"00"; o_blue <= X"00";
M_TF1 <= '1'; END IF;
END IF;

--21 IF ((i_pixel_column > B_KIRI) AND


IF ((i_pixel_column > makan_21ki ) AND (i_pixel_column < B_KANAN) AND
(i_pixel_column < makan_21ka) AND (i_pixel_row > B_ATAS) AND (i_pixel_row <
(i_pixel_row > makan_21a1) AND (i_pixel_row B_BAWAH)) THEN o_red <= X"2C"; o_green
< makan_21b1)) <= X"3E"; o_blue <= X"50";
THEN
M_TF1 <= '1'; END IF;
END IF;
IF ((i_pixel_column > waktu_kiri) AND
--22 (i_pixel_column < waktu_kanan) AND
IF ((i_pixel_column > makan_22ki ) AND (i_pixel_row > waktu_atas) AND (i_pixel_row
(i_pixel_column < makan_22ka) AND < waktu_bawah))
(i_pixel_row > makan_22a1) AND (i_pixel_row THEN
< makan_22b1)) o_red <= X"FF"; o_green <= X"3E"; o_blue <=
THEN X"00";
M_TF1 <= '1'; END IF;
END IF;
--23 IF ((i_pixel_column > skor_kiri) AND
IF ((i_pixel_column > makan_23ki ) AND (i_pixel_column < skor_kanan) AND
(i_pixel_column < makan_23ka) AND (i_pixel_row > skor_atas) AND (i_pixel_row <
(i_pixel_row > makan_23a1) AND (i_pixel_row skor_bawah))
< makan_23b1)) THEN
THEN o_red <= X"00"; o_green <= X"ee"; o_blue <=
M_TF1 <= '1'; X"00";
END IF; END IF;
--24
IF ((i_pixel_column > makan_24ki ) AND
(i_pixel_column < makan_24ka) AND IF B_ATAS <= B_HALANG11 AND B_KIRI <=
(i_pixel_row > makan_24a1) AND (i_pixel_row B_HALANG14 AND
< makan_24b1)) B_BAWAH <= B_HALANG12 AND B_KANAN
THEN <= B_HALANG13 THEN
M_TF1 <= '1';
B_ATAS := B_ATAS; B_ATAS < B_HALANG21 AND B_BAWAH >
B_BAWAH := B_BAWAH; B_HALANG22 AND
END IF; B_KIRI < k_HALANG11 AND B_KANAN >
k_HALANG10 THEN
B_ATAS := B_HALANG21;
B_BAWAH := B_HALANG21 + 29;
IF clock40hz'event and clock40hz = '1' THEN END IF;
waktu_kanan := waktu_kanan - IF
KECEPATAN_MAIN; ---Arah Naik B_ATAS < B_HALANG21 AND B_BAWAH >
END IF; B_HALANG22 AND
IF waktu_kanan <= K_halang10 THEN B_KIRI < k_HALANG13 AND B_KANAN >
KECEPATAN := 0; k_HALANG12 THEN
KECEPATAN_MAIN := 0; B_ATAS := B_HALANG21;
END IF; B_BAWAH := B_HALANG21 + 29;
END IF;
--kontrol karakter IF
IF clock40hz'event and clock40hz = '1' AND B_ATAS < B_HALANG21 AND B_BAWAH >
i_M_US = '0' AND i_K_US = '1' AND i_H_US = B_HALANG22 AND
'1' AND i_M_BT = '1' THEN B_KIRI < k_HALANG15 AND B_KANAN >
B_ATAS := B_ATAS - KECEPATAN; ---Arah k_HALANG14 THEN
Naik B_ATAS := B_HALANG21;
B_BAWAH := B_BAWAH - KECEPATAN; B_BAWAH := B_HALANG21 + 29;
END IF;
--PENGHALANG 1
IF --PENGHALANG 3
B_ATAS < B_HALANG11 AND B_BAWAH > IF
B_HALANG12 AND B_ATAS < B_HALANG31 AND B_BAWAH >
B_KIRI < k_HALANG11 AND B_KANAN > B_HALANG32 AND
k_HALANG10 THEN B_KIRI < k_HALANG11 AND B_KANAN >
B_ATAS := B_HALANG11; k_HALANG10 THEN
B_BAWAH := B_HALANG11 + 29; B_ATAS := B_HALANG31;
END IF; B_BAWAH := B_HALANG31 + 29;
IF END IF;
B_ATAS < B_HALANG11 AND B_BAWAH > IF
B_HALANG12 AND B_ATAS < B_HALANG31 AND B_BAWAH >
B_KIRI < k_HALANG13 AND B_KANAN > B_HALANG32 AND
k_HALANG12 THEN B_KIRI < k_HALANG13 AND B_KANAN >
B_ATAS := B_HALANG11; k_HALANG12 THEN
B_BAWAH := B_HALANG11 + 29; B_ATAS := B_HALANG31;
END IF; B_BAWAH := B_HALANG31 + 29;
IF END IF;
B_ATAS < B_HALANG11 AND B_BAWAH > IF
B_HALANG12 AND B_ATAS < B_HALANG31 AND B_BAWAH >
B_KIRI < k_HALANG15 AND B_KANAN > B_HALANG32 AND
k_HALANG14 THEN B_KIRI < k_HALANG15 AND B_KANAN >
B_ATAS := B_HALANG11; k_HALANG14 THEN
B_BAWAH := B_HALANG11 + 29; B_ATAS := B_HALANG31;
END IF; B_BAWAH := B_HALANG31 + 29;
END IF;
--PENGHALANG 2
IF
IF B_ATAS <= 0 THEN IF B_ATAS <= makan_5b1
B_ATAS := 0; AND B_KIRI <= makan_5ka AND B_KANAN >=
B_BAWAH := 29; makan_5ki AND B_BAWAH >= makan_5a1
END IF; THEN
--ARAH ATAS makan_5ki := -125;
IF B_ATAS <= makan_b1 AND B_KIRI <= makan_5ka := -130;
makan_ka1 AND B_KANAN >= makan_ki1 makan_5a1 := -385;
AND B_BAWAH >= makan_a1 THEN makan_5b1 := -390;
makan_ki1 := -125; skor_kanan := skor_kanan+60;
makan_ka1 := -130;
makan_a1 := -385; END IF;
makan_b1 := -390; IF B_ATAS <= makan_6b1
skor_kanan := skor_kanan+60; AND B_KIRI <= makan_6ka AND B_KANAN >=
waktu_kanan := waktu_kanan+200; makan_6ki AND B_BAWAH >= makan_6a1
THEN
END IF; makan_6ki := -125;
makan_6ka := -130;
IF B_ATAS <= makan_2b1 makan_6a1 := -385;
AND B_KIRI <= makan_2ka AND B_KANAN >= makan_6b1 := -390;
makan_2ki AND B_BAWAH >= makan_2a1 skor_kanan := skor_kanan+60;
THEN
makan_2ki := -125; END IF;
makan_2ka := -130;
makan_2a1 := -385; ELSIF clock40hz'event and clock40hz =
makan_2b1 := -390; '1' AND i_M_US = '1' AND i_K_US = '0' AND
skor_kanan := skor_kanan+60; i_H_US = '1' AND i_M_BT = '1' THEN
B_ATAS := B_ATAS + KECEPATAN; ---Arah
Turun
END IF; B_BAWAH := B_BAWAH + KECEPATAN;
IF B_ATAS <= makan_3b1
AND B_KIRI <= makan_3ka AND B_KANAN >= --PENGHALANG1
makan_3ki AND B_BAWAH >= makan_3a1 IF
THEN B_BAWAH > B_HALANG12 AND B_ATAS <
makan_3ki := -125; B_HALANG11 AND
makan_3ka := -130; B_KIRI < k_HALANG11 AND B_KANAN >
makan_3a1 := -385; k_HALANG10 THEN
makan_3b1 := -390; B_BAWAH := B_HALANG12 ;
skor_kanan := skor_kanan+60; B_ATAS := B_HALANG12 - 29 ;
END IF;
END IF;
IF B_ATAS <= IF
makan_4b1 AND B_KIRI <= makan_4ka AND B_BAWAH > B_HALANG12 AND B_ATAS <
B_KANAN >= makan_4ki AND B_BAWAH >= B_HALANG11 AND
makan_4a1 THEN B_KIRI < k_HALANG13 AND B_KANAN >
makan_4ki := -125; k_HALANG12 THEN
makan_4ka := -130; B_BAWAH := B_HALANG12 ;
makan_4a1 := -385; B_ATAS := B_HALANG12 - 29 ;
makan_4b1 := -390; END IF;
skor_kanan := skor_kanan+60; IF
B_BAWAH > B_HALANG12 AND B_ATAS <
END IF; B_HALANG11 AND
B_KIRI < k_HALANG15 AND B_KANAN > B_HALANG31 AND
k_HALANG14 THEN B_KIRI < k_HALANG15 AND B_KANAN >
B_BAWAH := B_HALANG12 ; k_HALANG14 THEN
B_ATAS := B_HALANG12 - 29 ; B_BAWAH := B_HALANG32 ;
END IF; B_ATAS := B_HALANG32 - 29 ;
--PENGHALANG 2 END IF;
IF
B_BAWAH > B_HALANG22 AND B_ATAS < IF B_BAWAH >= 479 THEN
B_HALANG21 AND B_ATAS := 479 -29;
B_KIRI < k_HALANG11 AND B_KANAN > B_BAWAH := 479;
k_HALANG10 THEN
B_BAWAH := B_HALANG22 ; END IF;
B_ATAS := B_HALANG22 - 29 ;
END IF; --MAKAN ARAH BAWAH
IF B_BAWAH >= makan_a1
IF AND B_KIRI >= makan_ki1 AND B_KANAN >=
B_BAWAH > B_HALANG22 AND B_ATAS < makan_ka1 AND B_ATAS <= makan_b1 THEN
B_HALANG21 AND makan_ki1 := -125;
B_KIRI < k_HALANG13 AND B_KANAN > makan_ka1 := -130;
k_HALANG12 THEN makan_a1 := -385;
B_BAWAH := B_HALANG22 ; makan_b1 := -390;
B_ATAS := B_HALANG22 - 29 ; skor_kanan := skor_kanan+60;
END IF;
IF
B_BAWAH > B_HALANG22 AND B_ATAS < END IF;
B_HALANG21 AND
B_KIRI < k_HALANG15 AND B_KANAN > IF B_BAWAH >= makan_2a1
k_HALANG14 THEN AND B_KIRI >= makan_2ka AND B_KANAN >=
B_BAWAH := B_HALANG22 ; makan_2ki AND B_ATAS <= makan_2b1 THEN
B_ATAS := B_HALANG22 - 29 ; makan_2ki := -125;
END IF; makan_2ka := -130;
--PENGHALANG 3 makan_2a1 := -385;
IF makan_2b1 := -390;
B_BAWAH > B_HALANG32 AND B_ATAS < skor_kanan := skor_kanan+60;
B_HALANG31 AND
B_KIRI < k_HALANG11 AND B_KANAN >
k_HALANG10 THEN END IF;
B_BAWAH := B_HALANG32 ; IF B_BAWAH >= makan_3a1
B_ATAS := B_HALANG32 - 29 ; AND B_KIRI >= makan_3ka AND B_KANAN >=
END IF; makan_3ki AND B_ATAS <= makan_3b1 THEN
makan_3ki := -125;
IF makan_3ka := -130;
B_BAWAH > B_HALANG32 AND B_ATAS < makan_3a1 := -385;
B_HALANG31 AND makan_3b1 := -390;
B_KIRI < k_HALANG13 AND B_KANAN > skor_kanan := skor_kanan+60;
k_HALANG12 THEN
B_BAWAH := B_HALANG32 ; END IF;
B_ATAS := B_HALANG32 - 29 ; IF B_BAWAH >= makan_4a1 AND B_KIRI >=
END IF; makan_4ka AND B_KANAN >= makan_4ki
IF THEN
B_BAWAH > B_HALANG32 AND B_ATAS < makan_4ki := -125;
makan_4ka := -130; B_KANAN := k_HALANG14 ;
makan_4a1 := -385; B_KIRI := k_HALANG14 - 29 ;
makan_4b1 := -390; END IF;
skor_kanan := skor_kanan+60; --PENGHALANG 2
IF
END IF; B_KANAN > k_HALANG12 AND B_KIRI <
IF B_BAWAH >= makan_5a1 k_HALANG13 AND
AND B_KIRI >= makan_5ka AND B_KANAN >= B_ATAS < B_HALANG21 AND B_BAWAH >
makan_5ki THEN B_HALANG22 THEN
makan_5ki := -125; B_KANAN := k_HALANG12 ;
makan_5ka := -130; B_KIRI := k_HALANG12 - 29 ;
makan_5a1 := -385; END IF;
makan_5b1 := -390; IF
skor_kanan := skor_kanan+60; B_KANAN > k_HALANG14 AND B_KIRI <
k_HALANG15 AND
END IF; B_ATAS < B_HALANG21 AND B_BAWAH >
IF B_BAWAH >= makan_6b1 B_HALANG22 THEN
AND B_KIRI >= makan_6ka AND B_KANAN >= B_KANAN := k_HALANG14 ;
makan_6ki THEN B_KIRI := k_HALANG14 - 29 ;
makan_6ki := -125; END IF;
makan_6ka := -130; --PENGHALANG 3
makan_6a1 := -385; IF
makan_6b1 := -390; B_KANAN > k_HALANG12 AND B_KIRI <
skor_kanan := skor_kanan+60; k_HALANG13 AND
B_ATAS < B_HALANG31 AND B_BAWAH >
END IF; B_HALANG32 THEN
B_KANAN := k_HALANG12 ;
B_KIRI := k_HALANG12 - 29 ;
--kanan END IF;
IF
ELSIF clock40hz'event and clock40hz = B_KANAN > k_HALANG14 AND B_KIRI <
'1' AND i_M_US = '1' AND i_K_US = '1' AND k_HALANG15 AND
i_H_US = '0' AND i_M_BT = '1' THEN B_ATAS < B_HALANG31 AND B_BAWAH >
B_KANAN := B_KANAN + KECEPATAN; ---Arah B_HALANG32 THEN
kanan B_KANAN := k_HALANG14 ;
B_KIRI := B_KIRI + KECEPATAN; B_KIRI := k_HALANG14 - 29 ;
END IF;
--PENGHALANG 1
IF
B_KANAN > k_HALANG12 AND B_KIRI < IF
k_HALANG13 AND B_KANAN >= 639 THEN
B_ATAS < B_HALANG11 AND B_BAWAH > B_KANAN := 639;
B_HALANG12 THEN B_KIRI := 639 -29;
B_KANAN := k_HALANG12 ; END IF;
B_KIRI := k_HALANG12 - 29 ;
END IF; IF
IF B_KANAN >= makan_9ki AND B_KIRI <=
B_KANAN > k_HALANG14 AND B_KIRI < makan_9ka AND
k_HALANG15 AND B_ATAS <= makan_9b1 AND B_BAWAH >=
B_ATAS < B_HALANG11 AND B_BAWAH > makan_9a1 THEN
B_HALANG12 THEN makan_9ki := -125;
makan_9ka := -130; END IF;
makan_9a1 := -385; IF B_KANAN >= makan_14ki AND B_KIRI <=
makan_9b1 := -390; makan_14ka AND
B_ATAS <= makan_14b1 AND B_BAWAH >=
END IF; makan_14a1 THEN
---makan arah kanan makan_14ki := -125;
IF B_KANAN >= makan_10ki AND B_KIRI <= makan_14ka := -130;
makan_10ka AND makan_14a1 := -385;
B_ATAS <= makan_10b1 AND B_BAWAH >= makan_14b1 := -390;
makan_10a1 THEN skor_kanan := skor_kanan+60;
makan_10ki := -125;
makan_10ka := -130; END IF;
makan_10a1 := -385; IF B_KANAN >= makan_17ki AND B_KIRI <=
makan_10b1 := -390; makan_17ka AND
skor_kanan := skor_kanan+60; B_ATAS <= makan_17b1 AND B_BAWAH >=
makan_17a1 THEN
END IF; makan_17ki := -125;
IF B_KANAN >= makan_11ki AND B_KIRI <= makan_17ka := -130;
makan_11ka AND makan_17a1 := -385;
B_ATAS <= makan_11b1 AND B_BAWAH >= makan_17b1 := -390;
makan_11a1 THEN skor_kanan := skor_kanan+60;
makan_11ki := -125;
makan_11ka := -130; END IF;
makan_11a1 := -385; IF B_KANAN >= makan_18ki AND B_KIRI <=
makan_11b1 := -390; makan_18ka AND
skor_kanan := skor_kanan+60; B_ATAS <= makan_18b1 AND B_BAWAH >=
makan_18a1 THEN
END IF; makan_18ki := -125;
makan_18ka := -130;
makan_18a1 := -385;
IF B_KANAN >= makan_12ki AND B_KIRI <= makan_18b1 := -390;
makan_12ka AND skor_kanan := skor_kanan+60;
B_ATAS <= makan_12b1 AND B_BAWAH >=
makan_12a1 THEN END IF;
makan_12ki := -125; IF B_KANAN >= makan_19ki AND B_KIRI <=
makan_12ka := -130; makan_19ka AND
makan_12a1 := -385; B_ATAS <= makan_19b1 AND B_BAWAH >=
makan_12b1 := -390; makan_19a1 THEN
skor_kanan := skor_kanan+60; makan_19ki := -125;
makan_19ka := -130;
END IF; makan_19a1 := -385;
IF B_KANAN >= makan_13ki AND B_KIRI <= makan_19b1 := -390;
makan_13ka AND skor_kanan := skor_kanan+60;
B_ATAS <= makan_13b1 AND B_BAWAH >=
makan_13a1 THEN END IF;
makan_13ki := -125;
makan_13ka := -130; IF B_KANAN >= makan_20ki AND B_KIRI <=
makan_13a1 := -385; makan_20ka AND
makan_13b1 := -390; B_ATAS <= makan_20b1 AND B_BAWAH >
skor_kanan := skor_kanan+60; makan_20a1 THEN
makan_20ki := -125;
makan_20ka := -130; END IF;
makan_20a1 := -385;
makan_20b1 := -390; --kiri
skor_kanan := skor_kanan+60;
ELSIF clock40hz'event and clock40hz =
END IF; '1' AND i_M_US = '1' AND i_K_US = '1' AND
IF B_KANAN >= makan_21ki AND B_KIRI <= i_H_US = '1' AND i_M_BT = '0' THEN
makan_21ka AND B_KANAN := B_KANAN - KECEPATAN; ---Arah
B_ATAS <= makan_21b1 AND B_BAWAH >= Kiri
makan_21a1 THEN B_KIRI := B_KIRI - KECEPATAN;
makan_21ki := -125;
makan_21ka := -130; --PENGHALANG
makan_21a1 := -385; IF
makan_21b1 := -390; B_KANAN >k_HALANG12 AND B_KIRI <
skor_kanan := skor_kanan+60; k_HALANG13 AND
B_ATAS < B_HALANG11 AND B_BAWAH >
END IF; B_HALANG12 THEN
B_KIRI := k_HALANG13 ;
IF B_KANAN >= makan_22ki AND B_KIRI <= B_KANAN := k_HALANG13 + 29 ;
makan_22ka AND
B_ATAS <= makan_22b1 AND B_BAWAH >= END IF;
makan_22a1 THEN
makan_22ki := -125; IF
makan_22ka := -130; B_KANAN > k_HALANG10 AND B_KIRI <
makan_22a1 := -385; k_HALANG11 AND
makan_22b1 := -390; B_ATAS < B_HALANG11 AND B_BAWAH >
skor_kanan := skor_kanan+60; B_HALANG12 THEN
B_KIRI := k_HALANG11 ;
B_KANAN := k_HALANG11 + 29 ;
END IF;
IF B_KANAN >= makan_24ki AND B_KIRI <= END IF;
makan_24ka AND
B_ATAS <= makan_24b1 AND B_BAWAH >= --PENGHALANG 2
makan_24a1 THEN
makan_24ki := -125; IF
makan_24ka := -130; B_KANAN >k_HALANG12 AND B_KIRI <
makan_24a1 := -385; k_HALANG13 AND
makan_24b1 := -390; B_ATAS < B_HALANG21 AND B_BAWAH >
skor_kanan := skor_kanan+60; B_HALANG22 THEN
END IF; B_KIRI := k_HALANG13 ;
B_KANAN := k_HALANG13 + 29 ;
IF B_KANAN >= makan_25ki AND B_KIRI <=
makan_25ka AND END IF;
B_ATAS <= makan_25b1 AND B_BAWAH >=
makan_25a1 THEN
makan_25ki := -125; IF
makan_25ka := -130; B_KANAN > k_HALANG10 AND B_KIRI <
makan_25a1 := -385; k_HALANG11 AND
makan_25b1 := -390; B_ATAS < B_HALANG21 AND B_BAWAH >
skor_kanan := skor_kanan+60; B_HALANG22 THEN
B_KIRI := k_HALANG11 ;
B_KANAN := k_HALANG11 + 29 ; skor_kanan := skor_kanan+60;

END IF; END IF;


--PENGHALANG 3 IF B_KIRI <= makan_9ka AND B_KANAN >=
IF makan_9ka AND
B_KANAN >k_HALANG12 AND B_KIRI < B_ATAS <= makan_9b1 AND B_BAWAH >=
k_HALANG13 AND makan_9a1 THEN
B_ATAS < B_HALANG31 AND B_BAWAH > makan_9ki := -125;
B_HALANG32 THEN makan_9ka := -130;
B_KIRI := k_HALANG13 ; makan_9a1 := -385;
B_KANAN := k_HALANG13 + 29 ; makan_9b1 := -390;
skor_kanan := skor_kanan+60;
END IF;

IF
B_KANAN > k_HALANG10 AND B_KIRI < END IF;
k_HALANG11 AND IF B_KIRI <= makan_10ka AND B_KANAN >=
B_ATAS < B_HALANG31 AND B_BAWAH > makan_10ka AND
B_HALANG32 THEN B_ATAS <= makan_10b1 AND B_BAWAH >=
B_KIRI := k_HALANG11 ; makan_10a1 THEN
B_KANAN := k_HALANG11 + 29 ; makan_10ki := -125;
makan_10ka := -130;
END IF; makan_10a1 := -385;
makan_10b1 := -390;
skor_kanan := skor_kanan+60;
IF B_KIRI <= 0 THEN
B_KIRI := 0;
B_KANAN := 29; END IF;
END IF; IF B_KIRI <= makan_11ka AND B_KANAN >=
makan_11ka AND
B_ATAS <= makan_11b1 AND B_BAWAH >=
--ARAH KIRI makan_11a1 THEN
IF B_KIRI <= makan_7ka AND B_KANAN >= makan_11ki := -125;
makan_7ka AND makan_11ka := -130;
B_ATAS <= makan_7b1 AND B_BAWAH >= makan_11a1 := -385;
makan_7a1 THEN makan_11b1 := -390;
makan_7ki := -125; skor_kanan := skor_kanan+60;
makan_7ka := -130;
makan_7a1 := -385; END IF;
makan_7b1 := -390; IF B_KIRI <= makan_15ka AND B_KANAN >=
skor_kanan := skor_kanan+60; makan_15ka AND
B_ATAS <= makan_15b1 AND B_BAWAH >=
END IF; makan_15a1 THEN
IF B_KIRI <= makan_8ka AND B_KANAN >= makan_15ki := -125;
makan_8ka AND makan_15ka := -130;
B_ATAS <= makan_8b1 AND B_BAWAH >= makan_15a1 := -385;
makan_8a1 THEN makan_15b1 := -390;
makan_8ki := -125; skor_kanan := skor_kanan+60;
makan_8ka := -130;
makan_8a1 := -385;
makan_8b1 := -390;
END IF; makan_19ka := -130;
IF B_KIRI <= makan_16ka AND B_KANAN >= makan_19a1 := -385;
makan_16ka AND makan_19b1 := -390;
skor_kanan := skor_kanan+60;
B_ATAS <= makan_16b1 AND B_BAWAH >=
makan_16a1 THEN
END IF;

makan_16ki := -125; IF B_KIRI <= makan_23ka AND B_KANAN <=


makan_16ka := -130; makan_23ka AND B_ATAS <= makan_23b1
makan_16a1 := -385; AND B_BAWAH >= makan_23a1 THEN
makan_16b1 := -390;
makan_23ki := -125;
skor_kanan := skor_kanan+60; makan_23ka := -130;
makan_23a1 := -385;
END IF; makan_23b1 := -390;
skor_kanan := skor_kanan+60;
IF B_KIRI <= makan_17ka AND B_KANAN >=
makan_17ka AND
B_ATAS <= makan_17b1 AND B_BAWAH >= END IF;
makan_17a1 THEN
IF B_KIRI <= makan_24ka AND B_KANAN <=
makan_17ki := -125; makan_24ka AND B_ATAS <= makan_24b1
makan_17ka := -130; AND B_BAWAH >= makan_24a1 THEN
makan_17a1 := -385;
makan_17b1 := -390; makan_24ki := -125;
skor_kanan := skor_kanan+60; makan_24ka := -130;
makan_24a1 := -385;
makan_24b1 := -390;
END IF; skor_kanan := skor_kanan+60;

IF B_KIRI <= makan_18ka AND B_KANAN >= END IF;


makan_18ka AND
B_ATAS <= makan_18b1 AND B_BAWAH >= ELSE
B_KIRI := B_KIRI;
makan_18a1 THEN B_KANAN := B_KANAN;
makan_18ki := -125; B_BAWAH := B_BAWAH;
makan_18ka := -130; B_ATAS := B_ATAS;
makan_18a1 := -385;
makan_18b1 := -390; END IF;
skor_kanan := skor_kanan+60;
END PROCESS;

END IF; tempik : clockdiv


PORT MAP (
IF B_KIRI <= makan_19ka AND B_KANAN >= CLK => i_H_BT,
makan_19ka AND DIVOUT => clock40hz
B_ATAS <=makan_19b1 AND B_BAWAH >= );
END behavioral;
makan_19a1 THEN
makan_19ki := -125;
4. CLOCKDIV
else
Clockdiv merupakan salah satu komponen if(DIVOUT='0') then
yang mengatur pergerakan dari semua DIVOUT<='1';
karakter , disinilah kecepatan dari game elsif(DIVOUT='1') then
bersaal , clockdiv lah yang mengakibatkan DIVOUT<='0';
karakter game kami bergerak. Pada
end if
clokdiv ini juga kita dapat mengatur
count:=0;
lamanya clock dengan modifikasi paramter
end if;
kontanta div.
end if;
LIBRARY IEEE;
end process;
USE IEEE.STD_LOGIC_1164.ALL;
end behavioural;

entity CLOCKDIV is port(


IV. HASIL DAN ANALISIS
CLK: IN std_logic;
Hasil dari Proyek Perancangan Rangkaian
DIVOUT: buffer BIT); Dgital yang kelompok kami buat adalah
sebuah game yang kami berinama PAC-
end CLOCKDIV;
GIRL. Hasil tampilan game kami seperti di
bawah ini :

architecture behavioural of CLOCKDIV is

begin

PROCESS(CLK)

variable count: integer:=0;

constant div: integer:=1000000;


begin

if CLK'event and CLK='1' then

if(count<div) then

count:=count+1;
if(DIVOUT='0') then
DIVOUT<='0';
elsif(DIVOUT='1') then
DIVOUT<='1';
end if;
Konsep game yang kami buat adalah ada dapat memakan makanan arah naik dan
sebuah karakter berbentuk kotak arah kiri namun untuk makan ke arah
ukurannya 40 pixel yang akan kami kanan dan bawah ternyata makanan nya
gerakan melewati penghalang dan tidak bisa kemakan atau tidak bisa hilang.
memakan makanan yang telah kita buat. Hal tesebut terjadi karena kami salah
dalam membuat kondisi karakter untuk
dan ketika karakter memakan mamakan makan ke arah kanan dan bawah.
maka petanda skor kita buat dalam sebuah
garis yang akan bertambah jika karakter Sebelumnya di program yang kami buat
memakan tersebut. Namun saat bermain jika batas karakter atas, bawah, kanan, kiri
kami memberikan batas waktu yang kami menyentuh batas makanan maka makanan
gambarkan dengan garis yang terus akan hilang (untuk hilang disini kami
berkurang disetiap kita bermaian. Lalu membuat makaan pindah posis ke ukuran
kami membuat juga makanan yang bisa min pixelnya sehingga makanan dapat
menambah waktu bermain . hilang

Kami membuat 2 kondisi yaitu menang Contohnya dapat dilihat di bawah ini :
dan kalah , yang dapat kami gambarakan
sebagai berikut IF B_ATAS <= makan_2b1 AND B_KIRI <=
Kondisi menang : kondisi menag terjadi makan_2ka AND B_KANAN >= makan_2ki AND
ketika karakter dapat memamakan makan B_BAWAH >= makan_2a1 THEN
sampai memenuhi garis skor , jika garis
makan_2ki := -125;
skor sudah penuh maka game di anggap
menang , sebelumnya kelompok kami makan_2ka := -130;
ingin membuat kondisi jika karakter
makan_2a1 := -385;
menang maka akan ada tampilan pada
layar namun karena waktu yang tidak makan_2b1 := -390;
mencukupi maka kelompok kami belum
sempat membuat tampilan menang

Kondisi kalah : kondisi kalah terjadi ketika


waktu bermain sudah habis dan karakter Lalu pada percobaan ini juga kami
belum memakan makanan sesuai dengan membuat beberap kondisi lagi yaitu ada
skor maka game tersebut dianggap kalah, beberapa makanan yang kita makan maka
dalam kondisi kalah ini kelompok kami akan menambah waktu bermain.
membuat kondisi jika kalah maka karakter Sebenarnya kami ingin membuat makanan
tidak bisa lagi bergerak. yang menambah waktu berbeda warna
namun karena keterbatasan waktu dan
Pada percobaan membuat game ini
pengetahuan maka kami belum sempat
kelompok kami sudah berhasil membuat
membuat progrmamnya.
karakter, makanan, penghalang, dan waktu
main. Game kami sudah bisa dijalankan Berikut ini adalah program yang
dan tidak menembus pengahalang karena memresentasikan jika memakan makannan
kami sudah memperbaiki program vhdl tersebut dapat menambah waktu bermain :
kami di bagian color rum. Game kami
Dalam game kami ini juga masih ada
--ARAH ATAS problem ketika karakter memakan umpan
IF B_ATAS <= makan_b1 AND B_KIRI <= dari arah bawah namun hasilnya ada
makan_ka1 AND B_KANAN >= makan_ki1 beberapa makanan ke arah bawah tidak
AND B_BAWAH >= makan_a1 THEN termakan. Hal tersebut terjadi dikarenakan
salah dalam membuat batas karakter ketika
makan_ki1 := -125; menyentuh makanan sehingga tidak
termakan.
makan_ka1 := -130;
Data Setelah Perubahan :
makan_a1 := -385;
Setelah kami presentasi kelompok kami
melakukan percobaan ulang untuk
membuat video pengoperasian game yang
kami buat. Dalam percobaan ini kelompok
kami membuat kondisi baru yaitu :
makan_b1 := -390;
1. Kondisi Skor
skor_kanan := skor_kanan+60; Kami membuat bentuk kondisi
skor seperti kondisi waktu bermain.
waktu_kanan := waktu_kanan+200;
Dimana ketika karakter memakan
makanan sampai skor penuh dan
waktu beramain belum berakhir
maka permainan akan menang.
2. Kondisi kalah
Dalam percobaan ini kami juga
Pada program diatas jika karakter
mmebuat kondisi kalah, maka
meyentuh makanan diatas maka makanan
ketika karakter tidak memakan
akn hilang serta waktu bermain aka
makanan sampai skor yang
bertamabh.
ditentukan dan waktu berakhir
Namun pada percobaan membuat game ini maka game akan kalah dengan
kami masih ada beberapa kondisi yang ditandai karakter tidak bisa lagi
belum diselesaikan diantaranya adalah : bergerak.
3. Kondisi Menang
Kondisi menang dan kalah , kami belum Pada kondisi menang kelompok
bisa mmebuat progrmanya dan karena kami belum bisa membuat
keterbatasan waktu. Sebenarnya kelompok tampilan yang menandakan game
kami sudah mencoba membuat kondisi menang. Hal tersebut terjadi karena
tersebut namun malah yang terjadi ketika kami bingung dalam menentukan
di implemntasikan hasilnya hanya ada kondisi menang pada program vhdl
warna merah pada layar, hal tersebut
terjadi karena kami salah dalam mmebuat Dalam percobaan sebelumnya karaker
kondisi pada vhdl nya. yang kami buat belum bisa memakan
umpan kearah kanan namun setelah kami
mencoba lagi dan merubah beberapa
progrmanya , maka karakter game bisa Jadi ketika karakter memakan makanan
memakan makanan ke arah kanan, namun maka skor+60.
terjadi masalah lagi ketika kondisi makan
ke arah bawah , ketika kelompok kami
membuat program pada vhdl untuk kondisi
makan ke bawah ternyata makannnya tidak
termakan /tidak hilang. V. KESIMPULAN

Dibawah ini beberapa program yang kami Setelah dilakukan percobaan ini maka
perbahurui : didapat :

Kondisi skor :  Proyek kami yang bertemakan


permainan bernama PAC GIRL ,
game ini memiliki macam kondisi
SHARED VARIABLE skor_atas: INTEGER := 21;
yaitu saat block diam maka waktu
SHARED VARIABLE skor_bawah:INTEGER := 41; habis, dan kalah. lalu kondisi
dimana block bergerak dan
SHARED VARIABLE skor_kanan: INTEGER := 10;
menyentuh makanan lalu makanan
SHARED VARIABLE skor_kiri: INTEGER := 0; menghilang. lalu kondisi block
menabrak dinding penghalang.
 Block yang digerakkan dengan
push button kali ini adalah sebuah
kotak yang memiliki size yang
telah diatur lebih besar dari
makanan bisa dikatakan resizable ,
--ARAH ATAS artinya dapat diubah-ubah
ukurannya serta Movable , artinya
IF B_ATAS <= makan_b1 AND B_KIRI <=
dapat digerakkan sesuai keinginan
makan_ka1 AND B_KANAN >= makan_ki1
pengguna. Dalam
AND B_BAWAH >= makan_a1 THEN
mengimplementasikan desain
makan_ki1 := -125; tersebut,digunakan beberapa
macam Input / masukkan seperti
makan_ka1 := -130; pushbutton untuk menggerakan
makan_a1 := -385; kesatuan pixel kotak ke empat arah
berbeda. Selainitu, digunakan pula
makan_b1 := -390; Clock divider agar pergerakan
objek gambar dapat dilihat oleh
skor_kanan := skor_kanan+60;
pengguna untuk makanan. kami
waktu_kanan := waktu_kanan+200; menggunakan batas yang dimana
bila batas atas block bertemu
(berikut adalah contoh dari program dengan batas bawah makanan
agar setiap makanan yang dimakan maka makanan akan bergeser
karakter bisa memunculkan skor) kepixel (-) yang artinya
menghilang .
setelah melakukan percobaan dan testing
pada proyek ini maka hasil yang kami
dapat bisa dikatakan sesuai dengan yang
kami harapkan (bisa dilihat dalam video)
persentase penyelesaian game ini adalah
80% yang dimana 20%nya adalah keadaan
game selesai (menang/kalah) yang tidak
sempat kami selesaikan karna keterbatasan
waktu yang akhirnya game hanya diam tak
bisa bergerak saat game usai.

Referensi

[1] Mervin T. Hutabarat., Petunjuk


Praktikum Sistem Digital dan
Mikroprosesor, Laboratorium Dasar
Teknik Elektro, Bandung, 2015.

[2] Brian Holdsworth and Clive


Woods, Digital Logic Design
Fourth Edition, N.wnes, 2002

[3] R.H. Katz, Contemporary Logic


Design Second Edition, Pearson
Prentince-Hall, NJ, 2005

[4] Stephen Brown and Zvonko


Vranesic, Fundamentals of
Digital Logic with VHDL Design
Third Edition, McGraw-Hill,
San Francisco,2009
[5] https://www.scribd.com/document
/116097857/Proyek-Perancangan-
Rangkaian-
Digital/diakses/18/12/217/13.00
Lampiran :

Game sebelum di perbaharui

Tampilan game kami

2. Tampilan Game Setelah Kami Perbaharui :


3. . program yang kami perbaharui dibagian color rum seprti dibawah ini :
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_ARITH.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITY color_rom_vhd IS
PORT(
i_M_US : IN STD_LOGIC; -- atas
i_K_US : IN STD_LOGIC; -- bawah
i_H_US : IN STD_LOGIC; -- kanan
i_M_BT : IN STD_LOGIC; -- kiri
i_K_BT : IN STD_LOGIC; -- kecepatan
i_H_BT : IN STD_LOGIC; -- waktu`
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 ));
END color_rom_vhd;

ARCHITECTURE behavioral OF color_rom_vhd IS

CONSTANT BATASBARIS : INTEGER := 479;


CONSTANT BATASKOLOM : INTEGER := 639;

CONSTANT B_HALANG11 : INTEGER :=420; --BAWAH


CONSTANT B_HALANG12 : INTEGER :=370; --ATAS
CONSTANT B_HALANG13 : INTEGER :=140; --BAWAH
CONSTANT B_HALANG14 : INTEGER :=350; --ATAS
CONSTANT B_HALANG21 : INTEGER :=320;
CONSTANT B_HALANG22 : INTEGER :=270;
CONSTANT B_HALANG31 : INTEGER :=220;
CONSTANT B_HALANG32 : INTEGER :=170;
CONSTANT B_HALANG41 : INTEGER :=120;
CONSTANT B_HALANG42 : INTEGER :=70;

CONSTANT k_HALANG10 : INTEGER :=0;


CONSTANT k_HALANG11 : INTEGER :=100;
CONSTANT k_HALANG12 : INTEGER :=140;
CONSTANT k_HALANG13 : INTEGER :=350;
CONSTANT k_HALANG14 : INTEGER :=390;
CONSTANT k_HALANG15 : INTEGER :=640;
CONSTANT waktu_kiri : INTEGER :=0;
CONSTANT waktu_atas : INTEGER :=0;

SHARED VARIABLE waktu_bawah : INTEGER :=20;


SHARED VARIABLE waktu_kanan : INTEGER :=640;

---MAKANAN1
SHARED VARIABLE makan_ki1 : INTEGER :=120;
SHARED VARIABLE makan_ka1 : INTEGER :=130;
SHARED VARIABLE makan_a1 : INTEGER :=380;
SHARED VARIABLE makan_b1 : INTEGER :=390;
-- MAKANAN 2
SHARED VARIABLE makan_2ki : INTEGER :=120;
SHARED VARIABLE makan_2ka : INTEGER :=130;
SHARED VARIABLE makan_2a1 : INTEGER :=280;
SHARED VARIABLE makan_2b1 : INTEGER :=290;
--MAKANAN 3
SHARED VARIABLE makan_3ki : INTEGER :=120;
SHARED VARIABLE makan_3ka : INTEGER :=130;
SHARED VARIABLE makan_3a1 : INTEGER :=180;
SHARED VARIABLE makan_3b1 : INTEGER :=190;
--MAKANAN 4

SHARED VARIABLE makan_4ki : INTEGER :=370;


SHARED VARIABLE makan_4ka : INTEGER :=380;
SHARED VARIABLE makan_4a1 : INTEGER :=380;
SHARED VARIABLE makan_4b1 : INTEGER :=390;
-- MAKANAN 5
SHARED VARIABLE makan_5ki : INTEGER :=370;
SHARED VARIABLE makan_5ka : INTEGER :=380;
SHARED VARIABLE makan_5a1 : INTEGER :=280;
SHARED VARIABLE makan_5b1 : INTEGER :=290;
--MAKANAN 6
SHARED VARIABLE makan_6ki : INTEGER :=370;
SHARED VARIABLE makan_6ka : INTEGER :=380;
SHARED VARIABLE makan_6a1 : INTEGER :=180;
SHARED VARIABLE makan_6b1 : INTEGER :=190;
--MAKANAN 7
SHARED VARIABLE makan_7ki : INTEGER :=40;
SHARED VARIABLE makan_7ka : INTEGER :=50;
SHARED VARIABLE makan_7a1 : INTEGER :=340;
SHARED VARIABLE makan_7b1 : INTEGER :=350;
--MAKANAN 8
SHARED VARIABLE makan_8ki : INTEGER :=70;
SHARED VARIABLE makan_8ka : INTEGER :=80;
SHARED VARIABLE makan_8a1 : INTEGER :=340;
SHARED VARIABLE makan_8b1 : INTEGER :=350;
--MAKANAN 9
SHARED VARIABLE makan_9ki : INTEGER :=160;
SHARED VARIABLE makan_9ka : INTEGER :=170;
SHARED VARIABLE makan_9a1 : INTEGER :=340;
SHARED VARIABLE makan_9b1 : INTEGER :=350;
--MAKANAN 10
SHARED VARIABLE makan_10ki : INTEGER :=190;
SHARED VARIABLE makan_10ka : INTEGER :=200;
SHARED VARIABLE makan_10a1 : INTEGER :=340;
SHARED VARIABLE makan_10b1 : INTEGER :=350;
--MAKANAN 11
SHARED VARIABLE makan_11ki : INTEGER :=220;
SHARED VARIABLE makan_11ka : INTEGER :=230;
SHARED VARIABLE makan_11a1 : INTEGER :=340;
SHARED VARIABLE makan_11b1 : INTEGER :=350;
--MAKANAN 12
SHARED VARIABLE makan_12ki : INTEGER :=420;
SHARED VARIABLE makan_12ka : INTEGER :=430;
SHARED VARIABLE makan_12a1 : INTEGER :=340;
SHARED VARIABLE makan_12b1 : INTEGER :=350;
--MAKANAN 13
SHARED VARIABLE makan_13ki : INTEGER :=460;
SHARED VARIABLE makan_13ka : INTEGER :=470;
SHARED VARIABLE makan_13a1 : INTEGER :=340;
SHARED VARIABLE makan_13b1 : INTEGER :=350;
--MAKANAN 14
SHARED VARIABLE makan_14ki : INTEGER :=500;
SHARED VARIABLE makan_14ka : INTEGER :=510;
SHARED VARIABLE makan_14a1 : INTEGER :=340;
SHARED VARIABLE makan_14b1 : INTEGER :=350;
--MAKANAN 15
SHARED VARIABLE makan_15ki : INTEGER :=40;
SHARED VARIABLE makan_15ka : INTEGER :=50;
SHARED VARIABLE makan_15a1 : INTEGER :=240;
SHARED VARIABLE makan_15b1 : INTEGER :=250;
--MAKANAN 16
SHARED VARIABLE makan_16ki : INTEGER :=70;
SHARED VARIABLE makan_16ka : INTEGER :=80;
SHARED VARIABLE makan_16a1 : INTEGER :=240;
SHARED VARIABLE makan_16b1 : INTEGER :=250;
--MAKANAN 17
SHARED VARIABLE makan_17ki : INTEGER :=160;
SHARED VARIABLE makan_17ka : INTEGER :=170;
SHARED VARIABLE makan_17a1 : INTEGER :=240;
SHARED VARIABLE makan_17b1 : INTEGER :=250;
--MAKANAN 18
SHARED VARIABLE makan_18ki : INTEGER :=190;
SHARED VARIABLE makan_18ka : INTEGER :=200;
SHARED VARIABLE makan_18a1 : INTEGER :=240;
SHARED VARIABLE makan_18b1 : INTEGER :=250;
--MAKANAN 19
SHARED VARIABLE makan_19ki : INTEGER :=220;
SHARED VARIABLE makan_19ka : INTEGER :=230;
SHARED VARIABLE makan_19a1 : INTEGER :=240;
SHARED VARIABLE makan_19b1 : INTEGER :=250;

--MAKANAN 20
SHARED VARIABLE makan_20ki : INTEGER :=420;
SHARED VARIABLE makan_20ka : INTEGER :=430;
SHARED VARIABLE makan_20a1 : INTEGER :=240;
SHARED VARIABLE makan_20b1 : INTEGER :=250;
--MAKANAN 21
SHARED VARIABLE makan_21ki : INTEGER :=460;
SHARED VARIABLE makan_21ka : INTEGER :=470;
SHARED VARIABLE makan_21a1 : INTEGER :=240;
SHARED VARIABLE makan_21b1 : INTEGER :=250;
--MAKANAN 22
SHARED VARIABLE makan_22ki : INTEGER :=500;
SHARED VARIABLE makan_22ka : INTEGER :=510;
SHARED VARIABLE makan_22a1 : INTEGER :=240;
SHARED VARIABLE makan_22b1 : INTEGER :=250;
--MAKANAN 23
SHARED VARIABLE makan_23ki : INTEGER :=70;
SHARED VARIABLE makan_23ka : INTEGER :=80;
SHARED VARIABLE makan_23a1 : INTEGER :=140;
SHARED VARIABLE makan_23b1 : INTEGER :=150;
--MAKANAN 24
SHARED VARIABLE makan_24ki : INTEGER :=190;
SHARED VARIABLE makan_24ka : INTEGER :=200;
SHARED VARIABLE makan_24a1 : INTEGER :=140;
SHARED VARIABLE makan_24b1 : INTEGER :=150;
--MAKANAN 25
SHARED VARIABLE makan_25ki : INTEGER :=460;
SHARED VARIABLE makan_25ka : INTEGER :=470;
SHARED VARIABLE makan_25a1 : INTEGER :=140;
SHARED VARIABLE makan_25b1 : INTEGER :=150;
CONSTANT finish1 : INTEGER :=0;
CONSTANT finish2 : INTEGER :=30;

SHARED VARIABLE B_ATAS : INTEGER := 450;


SHARED VARIABLE B_KIRI : INTEGER := 300;
SHARED VARIABLE B_KANAN : INTEGER := 329;
SHARED VARIABLE B_BAWAH : INTEGER := 479;

SHARED VARIABLE skor_atas: INTEGER := 21;


SHARED VARIABLE skor_bawah: INTEGER := 41;
SHARED VARIABLE skor_kanan: INTEGER := 10;
SHARED VARIABLE skor_kiri: INTEGER := 0;
SHARED VARIABLE KECEPATAN : INTEGER := 0;
SHARED VARIABLE KECEPATAN_MAIN : INTEGER := 0;
SIGNAL M_TF1, M_TF2 : STD_LOGIC;
SIGNAL K_TF1, K_TF2 : STD_LOGIC;
SIGNAL H_TF1, H_TF2 : STD_LOGIC;
SIGNAL clock40hz : STD_LOGIC;
SIGNAL clock50hz : STD_LOGIC;
COMPONENT CLOCKDIV is
port ( CLK : IN std_logic;
DIVOUT : buffer std_logic);
end component;
BEGIN
PROCESS(i_pixel_row,i_pixel_column, i_M_US ,
i_K_US , i_H_US , i_M_BT , i_K_BT , i_H_BT , M_TF1 , M_TF2 ,
K_TF1 , M_TF2 , H_TF1 , H_TF2)
BEGIN
--WAKTU MAIN
IF clock40hz'event and clock40hz = '1' THEN
KECEPATAN_MAIN := 1;
IF i_K_BT = '0' THEN
KECEPATAN := 5;
ELSE
KECEPATAN := 10;
END IF;
END IF;
--penghalang 1
IF ((i_pixel_column > k_HALANG10) AND (i_pixel_column < k_HALANG11) AND
(i_pixel_row < B_HALANG11) AND (i_pixel_row > B_HALANG12))
THEN
M_TF1 <= '1';
ELSE
M_TF1 <= '0';

END IF;
IF ((i_pixel_column >= k_HALANG12) AND (i_pixel_column <= B_HALANG13) AND
(i_pixel_row < B_HALANG11) AND (i_pixel_row > B_HALANG12))
THEN
M_TF1 <= '1';
END IF;
IF ((i_pixel_column > k_HALANG14) AND (i_pixel_column < k_HALANG15) AND
(i_pixel_row < B_HALANG11) AND (i_pixel_row > B_HALANG12))
THEN
M_TF1 <= '1';
END IF;
--penghalang 2
IF ((i_pixel_column > 0) AND (i_pixel_column < 100) AND
(i_pixel_row < B_HALANG21) AND (i_pixel_row > B_HALANG22))
THEN
M_TF1 <= '1';
END IF;
IF ((i_pixel_column > 140) AND (i_pixel_column < 350) AND
(i_pixel_row < B_HALANG21) AND (i_pixel_row > B_HALANG22))
THEN
M_TF1 <= '1';
END IF;
IF ((i_pixel_column > 390) AND (i_pixel_column < 640) AND
(i_pixel_row < B_HALANG21) AND (i_pixel_row > B_HALANG22))
THEN
M_TF1 <= '1';
END IF;

--penghalang 3
IF ((i_pixel_column > 0) AND (i_pixel_column < 100) AND
(i_pixel_row < B_HALANG11) AND (i_pixel_row > B_HALANG12))
THEN
M_TF1 <= '1';
END IF;
IF ((i_pixel_column > 140) AND (i_pixel_column < 350) AND
(i_pixel_row < B_HALANG11) AND (i_pixel_row > B_HALANG12))
THEN
M_TF1 <= '1';
END IF;
IF ((i_pixel_column > 390) AND (i_pixel_column < 640) AND
(i_pixel_row < B_HALANG11) AND (i_pixel_row > B_HALANG12))
THEN
M_TF1 <= '1';
END IF;
--penghalang 3
IF ((i_pixel_column > 0) AND (i_pixel_column < 100) AND
(i_pixel_row < B_HALANG31) AND (i_pixel_row > B_HALANG32))
THEN
M_TF1 <= '1';

END IF;
IF ((i_pixel_column > 140) AND (i_pixel_column < 350) AND
(i_pixel_row < B_HALANG31) AND (i_pixel_row > B_HALANG32))
THEN
M_TF1 <= '1';
END IF;
IF ((i_pixel_column > 390) AND (i_pixel_column < 640) AND
(i_pixel_row < B_HALANG31) AND (i_pixel_row > B_HALANG32))
THEN
M_TF1 <= '1';
END IF;
--karakter
--MAKANAN
IF ((i_pixel_column > makan_ki1 ) AND (i_pixel_column < makan_ka1) AND
(i_pixel_row > makan_a1) AND (i_pixel_row < makan_b1))
THEN
M_TF1 <= '1';
END IF;
--2
IF ((i_pixel_column > makan_2ki ) AND (i_pixel_column < makan_2ka) AND
(i_pixel_row > makan_2a1) AND (i_pixel_row < makan_2b1))
THEN
M_TF1 <= '1';
END IF;
--3
IF ((i_pixel_column > makan_3ki ) AND (i_pixel_column < makan_3ka) AND
(i_pixel_row > makan_3a1) AND (i_pixel_row < makan_3b1))
THEN
M_TF1 <= '1';
END IF;
--4
IF ((i_pixel_column > makan_4ki ) AND (i_pixel_column < makan_4ka) AND
(i_pixel_row > makan_4a1) AND (i_pixel_row < makan_4b1))
THEN
M_TF1 <= '1';
END IF;
--5
IF ((i_pixel_column > makan_5ki ) AND (i_pixel_column < makan_5ka) AND
(i_pixel_row > makan_5a1) AND (i_pixel_row < makan_5b1))
THEN
M_TF1 <= '1';
END IF;
--6
IF ((i_pixel_column > makan_6ki ) AND (i_pixel_column < makan_6ka) AND
(i_pixel_row > makan_6a1) AND (i_pixel_row < makan_6b1))
THEN
M_TF1 <= '1';
END IF;
--7
IF ((i_pixel_column > makan_7ki ) AND (i_pixel_column < makan_7ka) AND
(i_pixel_row > makan_7a1) AND (i_pixel_row < makan_7b1))
THEN
M_TF1 <= '1';
END IF;
--8
IF ((i_pixel_column > makan_8ki ) AND (i_pixel_column < makan_8ka) AND
(i_pixel_row > makan_8a1) AND (i_pixel_row < makan_8b1))
THEN
M_TF1 <= '1';
END IF:
--9
IF ((i_pixel_column > makan_9ki ) AND (i_pixel_column < makan_9ka) AND
(i_pixel_row > makan_9a1) AND (i_pixel_row < makan_9b1))
THEN
M_TF1 <= '1';
END IF;
--10
IF ((i_pixel_column > makan_10ki ) AND (i_pixel_column < makan_10ka) AND
(i_pixel_row > makan_10a1) AND (i_pixel_row < makan_10b1))
THEN
M_TF1 <= '1';
END IF;
--11
IF ((i_pixel_column > makan_11ki ) AND (i_pixel_column < makan_11ka) AND
(i_pixel_row > makan_11a1) AND (i_pixel_row < makan_11b1))
THEN
M_TF1 <= '1';
END IF;
--12
IF ((i_pixel_column > makan_12ki ) AND (i_pixel_column < makan_12ka) AND
(i_pixel_row > makan_12a1) AND (i_pixel_row < makan_12b1))
THEN
M_TF1 <= '1';
END IF;
--13
IF ((i_pixel_column > makan_13ki ) AND (i_pixel_column < makan_13ka) AND
(i_pixel_row > makan_13a1) AND (i_pixel_row < makan_13b1))
THEN
M_TF1 <= '1';
END IF;
--14
IF ((i_pixel_column > makan_14ki ) AND (i_pixel_column < makan_14ka) AND
(i_pixel_row > makan_14a1) AND (i_pixel_row < makan_14b1))
THEN
M_TF1 <= '1';
END IF;
--15
IF ((i_pixel_column > makan_15ki ) AND (i_pixel_column < makan_15ka) AND
(i_pixel_row > makan_15a1) AND (i_pixel_row < makan_15b1))
THEN
M_TF1 <= '1';
END IF;
--16
IF ((i_pixel_column > makan_16ki ) AND (i_pixel_column < makan_16ka) AND
(i_pixel_row > makan_16a1) AND (i_pixel_row < makan_16b1))
THEN
M_TF1 <= '1';
END IF;
--17
IF ((i_pixel_column > makan_17ki ) AND (i_pixel_column < makan_17ka) AND
(i_pixel_row > makan_17a1) AND (i_pixel_row < makan_17b1))
THEN
M_TF1 <= '1';
END IF;
--18
IF ((i_pixel_column > makan_18ki ) AND (i_pixel_column < makan_18ka) AND
(i_pixel_row > makan_18a1) AND (i_pixel_row < makan_18b1))
THEN
M_TF1 <= '1';
END IF;
--19
IF ((i_pixel_column > makan_19ki ) AND (i_pixel_column < makan_19ka) AND
(i_pixel_row > makan_19a1) AND (i_pixel_row < makan_19b1))
THEN
M_TF1 <= '1';
END IF;
--20
IF ((i_pixel_column > makan_20ki ) AND (i_pixel_column < makan_20ka) AND
(i_pixel_row > makan_20a1) AND (i_pixel_row < makan_20b1))
THEN
M_TF1 <= '1';
END IF;
--21
IF ((i_pixel_column > makan_21ki ) AND (i_pixel_column < makan_21ka) AND
(i_pixel_row > makan_21a1) AND (i_pixel_row < makan_21b1))
THEN
M_TF1 <= '1';
END IF;
--22
IF ((i_pixel_column > makan_22ki ) AND (i_pixel_column < makan_22ka) AND
(i_pixel_row > makan_22a1) AND (i_pixel_row < makan_22b1))
THEN
M_TF1 <= '1';
END IF;
--23
IF ((i_pixel_column > makan_23ki ) AND (i_pixel_column < makan_23ka) AND
(i_pixel_row > makan_23a1) AND (i_pixel_row < makan_23b1))
THEN
M_TF1 <= '1';
END IF;
--24
IF ((i_pixel_column > makan_24ki ) AND (i_pixel_column < makan_24ka) AND
(i_pixel_row > makan_24a1) AND (i_pixel_row < makan_24b1))
THEN
M_TF1 <= '1';
END IF;
--25
IF ((i_pixel_column > makan_25ki ) AND (i_pixel_column < makan_25ka) AND
(i_pixel_row > makan_25a1) AND (i_pixel_row < makan_25b1))
THEN
M_TF1 <= '1';
END IF;
----warna
IF M_TF1 = '1' THEN o_red <= X"E8"; o_green <= X"4C"; o_blue <= X"3C";
ELSIF M_TF1 = '0' THEN o_red <= X"00"; o_green <= X"00"; o_blue <= X"00";
END IF;

IF ((i_pixel_column > B_KIRI) AND (i_pixel_column < B_KANAN) AND


(i_pixel_row > B_ATAS) AND (i_pixel_row < B_BAWAH)) THEN
o_red <= X"2C"; o_green <= X"3E"; o_blue <= X"50";
END IF;
IF ((i_pixel_column > waktu_kiri) AND (i_pixel_column < waktu_kanan) AND
(i_pixel_row > waktu_atas) AND (i_pixel_row < waktu_bawah))
THEN
o_red <= X"FF"; o_green <= X"3E"; o_blue <= X"00";
END IF;
IF ((i_pixel_column > skor_kiri) AND (i_pixel_column < skor_kanan) AND
(i_pixel_row > skor_atas) AND (i_pixel_row < skor_bawah))
THEN
o_red <= X"00"; o_green <= X"ee"; o_blue <= X"00";
END IF;
IF B_ATAS <= B_HALANG11 AND B_KIRI <= B_HALANG14 AND
B_BAWAH <= B_HALANG12 AND B_KANAN <= B_HALANG13 THEN

B_ATAS := B_ATAS;
B_BAWAH := B_BAWAH;
END IF;
IF clock40hz'event and clock40hz = '1' THEN
waktu_kanan := waktu_kanan - KECEPATAN_MAIN; ---Arah Naik
END IF;
IF waktu_kanan <= K_halang10 THEN
KECEPATAN := 0;
KECEPATAN_MAIN := 0;
END IF;
--kontrol karakter
IF clock40hz'event and clock40hz = '1' AND i_M_US = '0' AND i_K_US = '1' AND i_H_US = '1' AND i_M_BT = '1' THEN
B_ATAS := B_ATAS - KECEPATAN; ---Arah Naik
B_BAWAH := B_BAWAH - KECEPATAN;
--PENGHALANG 1
IF
B_ATAS < B_HALANG11 AND B_BAWAH > B_HALANG12 AND
B_KIRI < k_HALANG11 AND B_KANAN > k_HALANG10 THEN
B_ATAS := B_HALANG11;
B_BAWAH := B_HALANG11 + 29;
END IF;
IF
B_ATAS < B_HALANG11 AND B_BAWAH > B_HALANG12 AND
B_KIRI < k_HALANG13 AND B_KANAN > k_HALANG12 THEN
B_ATAS := B_HALANG11;
B_BAWAH := B_HALANG11 + 29;
END IF;
IF
B_ATAS < B_HALANG11 AND B_BAWAH > B_HALANG12 AND
B_KIRI < k_HALANG15 AND B_KANAN > k_HALANG14 THEN
B_ATAS := B_HALANG11;
B_BAWAH := B_HALANG11 + 29;
END IF;

--PENGHALANG 2
IF B_ATAS < B_HALANG21 AND B_BAWAH > B_HALANG22 AND
B_KIRI < k_HALANG11 AND B_KANAN > k_HALANG10 THEN
B_ATAS := B_HALANG21;
B_BAWAH := B_HALANG21 + 29;
END IF;
IF
B_ATAS < B_HALANG21 AND B_BAWAH > B_HALANG22 AND
B_KIRI < k_HALANG13 AND B_KANAN > k_HALANG12 THEN
B_ATAS := B_HALANG21;
B_BAWAH := B_HALANG21 + 29;
END IF;
IF
B_ATAS < B_HALANG21 AND B_BAWAH > B_HALANG22 AND
B_KIRI < k_HALANG15 AND B_KANAN > k_HALANG14 THEN
B_ATAS := B_HALANG21;
B_BAWAH := B_HALANG21 + 29; END IF;
--PENGHALANG 3
IF
B_ATAS < B_HALANG31 AND B_BAWAH > B_HALANG32 AND
B_KIRI < k_HALANG11 AND B_KANAN > k_HALANG10 THEN
B_ATAS := B_HALANG31;
B_BAWAH := B_HALANG31 + 29;
END IF;
IF
B_ATAS < B_HALANG31 AND B_BAWAH > B_HALANG32 AND
B_KIRI < k_HALANG13 AND B_KANAN > k_HALANG12 THEN
B_ATAS := B_HALANG31;
B_BAWAH := B_HALANG31 + 29;
END IF;
IF
B_ATAS < B_HALANG31 AND B_BAWAH > B_HALANG32 AND
B_KIRI < k_HALANG15 AND B_KANAN > k_HALANG14 THEN
B_ATAS := B_HALANG31;
B_BAWAH := B_HALANG31 + 29;
END IF;
IF B_ATAS <= 0 THEN
B_ATAS := 0;
B_BAWAH := 29;
END IF;
--ARAH ATAS
IF B_ATAS <= makan_b1 AND B_KIRI <= makan_ka1 AND B_KANAN >= makan_ki1 AND B_BAWAH >=
makan_a1 THEN
makan_ki1 := -125;
makan_ka1 := -130;
makan_a1 := -385;
makan_b1 := -390;
skor_kanan := skor_kanan+60;
waktu_kanan := waktu_kanan+200;

END IF;
IF B_ATAS <= makan_2b1 AND B_KIRI <= makan_2ka AND B_KANAN >= makan_2ki AND B_BAWAH >=
makan_2a1 THEN
makan_2ki := -125;
makan_2ka := -130;
makan_2a1 := -385;
makan_2b1 := -390;
skor_kanan := skor_kanan+60;
END IF;
IF B_ATAS <= makan_3b1 AND B_KIRI <= makan_3ka AND B_KANAN >= makan_3ki AND B_BAWAH >=
makan_3a1 THEN
makan_3ki := -125;
makan_3ka := -130;
makan_3a1 := -385;
makan_3b1 := -390;
skor_kanan := skor_kanan+60;

END IF;
IF B_ATAS <= makan_4b1 AND B_KIRI <= makan_4ka AND B_KANAN >= makan_4ki AND
B_BAWAH >= makan_4a1 THEN
makan_4ki := -125;
makan_4ka := -130;
makan_4a1 := -385;
makan_4b1 := -390;
skor_kanan := skor_kanan+60;
END IF;
IF B_ATAS <= makan_5b1 AND B_KIRI <= makan_5ka AND B_KANAN >= makan_5ki AND B_BAWAH >=
makan_5a1 THEN
makan_5ki := -125;
makan_5ka := -130;
makan_5a1 := -385;
makan_5b1 := -390;
skor_kanan := skor_kanan+60;
END IF;
IF B_ATAS <= makan_6b1 AND B_KIRI <= makan_6ka AND B_KANAN >= makan_6ki AND B_BAWAH >=
makan_6a1 THEN
makan_6ki := -125;
makan_6ka := -130;
makan_6a1 := -385;
makan_6b1 := -390;
skor_kanan := skor_kanan+60;

END IF;
ELSIF clock40hz'event and clock40hz = '1' AND i_M_US = '1' AND i_K_US = '0' AND i_H_US = '1' AND i_M_BT = '1'
THEN
B_ATAS := B_ATAS + KECEPATAN; ---Arah Turun
B_BAWAH := B_BAWAH + KECEPATAN;

--PENGHALANG1
IF
B_BAWAH > B_HALANG12 AND B_ATAS < B_HALANG11 AND
B_KIRI < k_HALANG11 AND B_KANAN > k_HALANG10 THEN
B_BAWAH := B_HALANG12 ;
B_ATAS := B_HALANG12 - 29 ;
END IF;
IF
B_BAWAH > B_HALANG12 AND B_ATAS < B_HALANG11 AND
B_KIRI < k_HALANG13 AND B_KANAN > k_HALANG12 THEN
B_BAWAH := B_HALANG12 ;
B_ATAS := B_HALANG12 - 29 ;
END IF;
IF
B_BAWAH > B_HALANG12 AND B_ATAS < B_HALANG11 AND
B_KIRI < k_HALANG15 AND B_KANAN > k_HALANG14 THEN
B_BAWAH := B_HALANG12 ;
B_ATAS := B_HALANG12 - 29 ;
END IF;
--PENGHALANG 2
IF
B_BAWAH > B_HALANG22 AND B_ATAS < B_HALANG21 AND
B_KIRI < k_HALANG11 AND B_KANAN > k_HALANG10 THEN
B_BAWAH := B_HALANG22 ;
B_ATAS := B_HALANG22 - 29 ;
END IF;

IF
B_BAWAH > B_HALANG22 AND B_ATAS < B_HALANG21 AND
B_KIRI < k_HALANG13 AND B_KANAN > k_HALANG12 THEN
B_BAWAH := B_HALANG22 ;
B_ATAS := B_HALANG22 - 29 ;
END IF;
IF
B_BAWAH > B_HALANG22 AND B_ATAS < B_HALANG21 AND
B_KIRI < k_HALANG15 AND B_KANAN > k_HALANG14 THEN
B_BAWAH := B_HALANG22 ;
B_ATAS := B_HALANG22 - 29 ;
END IF;
--PENGHALANG 3
IF
B_BAWAH > B_HALANG32 AND B_ATAS < B_HALANG31 AND
B_KIRI < k_HALANG11 AND B_KANAN > k_HALANG10 THEN
B_BAWAH := B_HALANG32 ;
B_ATAS := B_HALANG32 - 29 ;
END IF;

IF
B_BAWAH > B_HALANG32 AND B_ATAS < B_HALANG31 AND
B_KIRI < k_HALANG13 AND B_KANAN > k_HALANG12 THEN
B_BAWAH := B_HALANG32 ;
B_ATAS := B_HALANG32 - 29 ;
END IF;
IF
B_BAWAH > B_HALANG32 AND B_ATAS < B_HALANG31 AND
B_KIRI < k_HALANG15 AND B_KANAN > k_HALANG14 THEN
B_BAWAH := B_HALANG32 ;
B_ATAS := B_HALANG32 - 29 ;
END IF;
IF B_BAWAH >= 479 THEN
B_ATAS := 479 -29;
B_BAWAH := 479;
END IF;

--MAKAN ARAH BAWAH


IF B_BAWAH >= makan_a1 AND B_KIRI >= makan_ki1 AND B_KANAN >= makan_ka1 AND B_ATAS <=
makan_b1 THEN
makan_ki1 := -125;
makan_ka1 := -130;
makan_a1 := -385;
makan_b1 := -390;
skor_kanan := skor_kanan+60;

END IF;

IF B_BAWAH >= makan_2a1 AND B_KIRI >= makan_2ka AND B_KANAN >= makan_2ki AND B_ATAS <=
makan_2b1 THEN
makan_2ki := -125;
makan_2ka := -130;
makan_2a1 := -385;
makan_2b1 := -390;
skor_kanan := skor_kanan+60;
END IF;
IF B_BAWAH >= makan_3a1 AND B_KIRI >= makan_3ka AND B_KANAN >= makan_3ki AND B_ATAS <=
makan_3b1 THEN
makan_3ki := -125;
makan_3ka := -130;
makan_3a1 := -385;
makan_3b1 := -390;
skor_kanan := skor_kanan+60;
END IF;
IF B_BAWAH >= makan_4a1 AND B_KIRI >= makan_4ka AND B_KANAN >= makan_4ki THEN
makan_4ki := -125;
makan_4ka := -130;
makan_4a1 := -385;
makan_4b1 := -390;
skor_kanan := skor_kanan+60;
END IF;
IF B_BAWAH >= makan_5a1 AND B_KIRI >= makan_5ka AND B_KANAN >= makan_5ki THEN
makan_5ki := -125;
makan_5ka := -130;
makan_5a1 := -385;
makan_5b1 := -390;
skor_kanan := skor_kanan+60;
END IF;
IF B_BAWAH >= makan_6b1 AND B_KIRI >= makan_6ka AND B_KANAN >= makan_6ki THEN
makan_6ki := -125;
makan_6ka := -130;
makan_6a1 := -385;
makan_6b1 := -390;
skor_kanan := skor_kanan+60;

END IF;

--kanan

ELSIF clock40hz'event and clock40hz = '1' AND i_M_US = '1' AND i_K_US = '1' AND i_H_US = '0' AND i_M_BT = '1' THEN
B_KANAN := B_KANAN + KECEPATAN; ---Arah kanan
B_KIRI := B_KIRI + KECEPATAN;

--PENGHALANG 1
IF
B_KANAN > k_HALANG12 AND B_KIRI < k_HALANG13 AND
B_ATAS < B_HALANG11 AND B_BAWAH > B_HALANG12 THEN
B_KANAN := k_HALANG12 ;
B_KIRI := k_HALANG12 - 29 ;
END IF;
IF
B_KANAN > k_HALANG14 AND B_KIRI < k_HALANG15 AND
B_ATAS < B_HALANG11 AND B_BAWAH > B_HALANG12 THEN
B_KANAN := k_HALANG14 ;
B_KIRI := k_HALANG14 - 29 ;
END IF;
--PENGHALANG 2
IF
B_KANAN > k_HALANG12 AND B_KIRI < k_HALANG13 AND
B_ATAS < B_HALANG21 AND B_BAWAH > B_HALANG22 THEN
B_KANAN := k_HALANG12 ;
B_KIRI := k_HALANG12 - 29 ;
END IF;
IF
B_KANAN > k_HALANG14 AND B_KIRI < k_HALANG15 AND
B_ATAS < B_HALANG21 AND B_BAWAH > B_HALANG22 THEN
B_KANAN := k_HALANG14 ;
B_KIRI := k_HALANG14 - 29 ;
END IF;
--PENGHALANG 3
IF
B_KANAN > k_HALANG12 AND B_KIRI < k_HALANG13 AND
B_ATAS < B_HALANG31 AND B_BAWAH > B_HALANG32 THEN
B_KANAN := k_HALANG12 ;
B_KIRI := k_HALANG12 - 29 ;
END IF;
IF
B_KANAN > k_HALANG14 AND B_KIRI < k_HALANG15 AND
B_ATAS < B_HALANG31 AND B_BAWAH > B_HALANG32 THEN
B_KANAN := k_HALANG14 ;
B_KIRI := k_HALANG14 - 29 ;
END IF;

IF B_KANAN >= 639 THEN


B_KANAN := 639;
B_KIRI := 639 -29;
END IF;

IF B_KANAN >= makan_9ki AND B_KIRI <= makan_9ka AND


B_ATAS <= makan_9b1 AND B_BAWAH >= makan_9a1 THEN
makan_9ki := -125;
makan_9ka := -130;
makan_9a1 := -385;
makan_9b1 := -390;
END IF;
---makan arah kanan
IF B_KANAN >= makan_10ki AND B_KIRI <= makan_10ka AND
B_ATAS <= makan_10b1 AND B_BAWAH >= makan_10a1 THEN
makan_10ki := -125;
makan_10ka := -130;
makan_10a1 := -385;
makan_10b1 := -390;
skor_kanan := skor_kanan+60;
END IF;
IF B_KANAN >= makan_11ki AND B_KIRI <= makan_11ka AND
B_ATAS <= makan_11b1 AND B_BAWAH >= makan_11a1 THEN
makan_11ki := -125;
makan_11ka := -130;
makan_11a1 := -385;
makan_11b1 := -390;
skor_kanan := skor_kanan+60;
END IF;
IF B_KANAN >= makan_12ki AND B_KIRI <= makan_12ka AND
B_ATAS <= makan_12b1 AND B_BAWAH >= makan_12a1 THEN
makan_12ki := -125;
makan_12ka := -130;
makan_12a1 := -385;
makan_12b1 := -390;
skor_kanan := skor_kanan+60;
END IF;
IF B_KANAN >= makan_13ki AND B_KIRI <= makan_13ka AND
B_ATAS <= makan_13b1 AND B_BAWAH >= makan_13a1 THEN
makan_13ki := -125;
makan_13ka := -130;
makan_13a1 := -385;
makan_13b1 := -390;
skor_kanan := skor_kanan+60;
END IF;
IF B_KANAN >= makan_14ki AND B_KIRI <= makan_14ka AND
B_ATAS <= makan_14b1 AND B_BAWAH >= makan_14a1 THEN
makan_14ki := -125;
makan_14ka := -130;
makan_14a1 := -385;
makan_14b1 := -390;
skor_kanan := skor_kanan+60;
END IF;
IF B_KANAN >= makan_17ki AND B_KIRI <= makan_17ka AND
B_ATAS <= makan_17b1 AND B_BAWAH >= makan_17a1 THEN
makan_17ki := -125;
makan_17ka := -130;
makan_17a1 := -385;
makan_17b1 := -390;
skor_kanan := skor_kanan+60;
END IF;
IF B_KANAN >= makan_18ki AND B_KIRI <= makan_18ka AND
B_ATAS <= makan_18b1 AND B_BAWAH >= makan_18a1 THEN
makan_18ki := -125;
makan_18ka := -130;
makan_18a1 := -385;
makan_18b1 := -390;
skor_kanan := skor_kanan+60;
END IF;
IF B_KANAN >= makan_19ki AND B_KIRI <= makan_19ka AND
B_ATAS <= makan_19b1 AND B_BAWAH >= makan_19a1 THEN
makan_19ki := -125;
makan_19ka := -130;
makan_19a1 := -385;
makan_19b1 := -390;
skor_kanan := skor_kanan+60;
END IF;

IF B_KANAN >= makan_20ki AND B_KIRI <= makan_20ka AND


B_ATAS <= makan_20b1 AND B_BAWAH > makan_20a1 THEN
makan_20ki := -125;
makan_20ka := -130;
makan_20a1 := -385;
makan_20b1 := -390;
skor_kanan := skor_kanan+60;
END IF;
IF B_KANAN >= makan_21ki AND B_KIRI <= makan_21ka AND
B_ATAS <= makan_21b1 AND B_BAWAH >= makan_21a1 THEN
makan_21ki := -125;
makan_21ka := -130;
makan_21a1 := -385;
makan_21b1 := -390;
skor_kanan := skor_kanan+60;
END IF;

IF B_KANAN >= makan_22ki AND B_KIRI <= makan_22ka AND


B_ATAS <= makan_22b1 AND B_BAWAH >= makan_22a1 THEN
makan_22ki := -125;
makan_22ka := -130;
makan_22a1 := -385;
makan_22b1 := -390;
skor_kanan := skor_kanan+60;
END IF;
IF B_KANAN >= makan_24ki AND B_KIRI <= makan_24ka AND
B_ATAS <= makan_24b1 AND B_BAWAH >= makan_24a1 THEN
makan_24ki := -125;
makan_24ka := -130;
makan_24a1 := -385;
makan_24b1 := -390;
skor_kanan := skor_kanan+60;
END IF;

IF B_KANAN >= makan_25ki AND B_KIRI <= makan_25ka AND


B_ATAS <= makan_25b1 AND B_BAWAH >= makan_25a1 THEN
makan_25ki := -125;
makan_25ka := -130;
makan_25a1 := -385;
makan_25b1 := -390;
skor_kanan := skor_kanan+60;
END IF;
--kiri
ELSIF clock40hz'event and clock40hz = '1' AND i_M_US = '1' AND i_K_US = '1' AND i_H_US = '1' AND i_M_BT = '0' THEN
B_KANAN := B_KANAN - KECEPATAN; ---Arah Kiri
B_KIRI := B_KIRI - KECEPATAN;
--PENGHALANG
IF
B_KANAN >k_HALANG12 AND B_KIRI < k_HALANG13 AND
B_ATAS < B_HALANG11 AND B_BAWAH > B_HALANG12 THEN
B_KIRI := k_HALANG13 ;
B_KANAN := k_HALANG13 + 29 ; END IF;
IF
B_KANAN > k_HALANG10 AND B_KIRI < k_HALANG11 AND
B_ATAS < B_HALANG11 AND B_BAWAH > B_HALANG12 THEN
B_KIRI := k_HALANG11 ;
B_KANAN := k_HALANG11 + 29 ;
END IF;
--PENGHALANG 2

IF
B_KANAN >k_HALANG12 AND B_KIRI < k_HALANG13 AND
B_ATAS < B_HALANG21 AND B_BAWAH > B_HALANG22 THEN
B_KIRI := k_HALANG13 ;
B_KANAN := k_HALANG13 + 29 ;
END IF;
IF
B_KANAN > k_HALANG10 AND B_KIRI < k_HALANG11 AND
B_ATAS < B_HALANG21 AND B_BAWAH > B_HALANG22 THEN
B_KIRI := k_HALANG11 ;
B_KANAN := k_HALANG11 + 29 ;
END IF;
--PENGHALANG 3
IF
B_KANAN >k_HALANG12 AND B_KIRI < k_HALANG13 AND
B_ATAS < B_HALANG31 AND B_BAWAH > B_HALANG32 THEN
B_KIRI := k_HALANG13 ;
B_KANAN := k_HALANG13 + 29 ;

END IF;
IF
B_KANAN > k_HALANG10 AND B_KIRI < k_HALANG11 AND
B_ATAS < B_HALANG31 AND B_BAWAH > B_HALANG32 THEN
B_KIRI := k_HALANG11 ;
B_KANAN := k_HALANG11 + 29 ;

END IF;

IF B_KIRI <= 0 THEN


B_KIRI := 0;
B_KANAN := 29;
END IF;

--ARAH KIRI
IF B_KIRI <= makan_7ka AND B_KANAN >= makan_7ka AND
B_ATAS <= makan_7b1 AND B_BAWAH >= makan_7a1 THEN
makan_7ki := -125;
makan_7ka := -130;
makan_7a1 := -385;
makan_7b1 := -390;
skor_kanan := skor_kanan+60;

END IF;
IF B_KIRI <= makan_8ka AND B_KANAN >= makan_8ka AND
B_ATAS <= makan_8b1 AND B_BAWAH >= makan_8a1 THEN
makan_8ki := -125;
makan_8ka := -130;
makan_8a1 := -385;
makan_8b1 := -390;
skor_kanan := skor_kanan+60;

END IF;
IF B_KIRI <= makan_9ka AND B_KANAN >= makan_9ka AND
B_ATAS <= makan_9b1 AND B_BAWAH >= makan_9a1 THEN
makan_9ki := -125;
makan_9ka := -130;
makan_9a1 := -385;
makan_9b1 := -390;
skor_kanan := skor_kanan+60;

END IF;
IF B_KIRI <= makan_10ka AND B_KANAN >= makan_10ka AND
B_ATAS <= makan_10b1 AND B_BAWAH >= makan_10a1 THEN
makan_10ki := -125;
makan_10ka := -130;
makan_10a1 := -385;
makan_10b1 := -390;
skor_kanan := skor_kanan+60;

END IF;
IF B_KIRI <= makan_11ka AND B_KANAN >= makan_11ka AND
B_ATAS <= makan_11b1 AND B_BAWAH >= makan_11a1 THEN
makan_11ki := -125;
makan_11ka := -130;
makan_11a1 := -385;
makan_11b1 := -390;
skor_kanan := skor_kanan+60;

END IF;
IF B_KIRI <= makan_15ka AND B_KANAN >= makan_15ka AND
B_ATAS <= makan_15b1 AND B_BAWAH >= makan_15a1 THEN
makan_15ki := -125;
makan_15ka := -130;
makan_15a1 := -385;
makan_15b1 := -390;
skor_kanan := skor_kanan+60;

END IF;
IF B_KIRI <= makan_16ka AND B_KANAN >= makan_16ka AND
B_ATAS <= makan_16b1 AND B_BAWAH >= makan_16a1 THEN
makan_16ki := -125;
makan_16ka := -130;
makan_16a1 := -385;
makan_16b1 := -390;
skor_kanan := skor_kanan+60;

END IF;
IF B_KIRI <= makan_17ka AND B_KANAN >= makan_17ka AND
B_ATAS <= makan_17b1 AND B_BAWAH >= makan_17a1 THEN
makan_17ki := -125;
makan_17ka := -130;
makan_17a1 := -385;
makan_17b1 := -390;
skor_kanan := skor_kanan+60;

END IF;
IF B_KIRI <= makan_18ka AND B_KANAN >= makan_18ka AND
B_ATAS <= makan_18b1 AND B_BAWAH >= makan_18a1 THEN
makan_18ki := -125;
makan_18ka := -130;
makan_18a1 := -385;
makan_18b1 := -390;
skor_kanan := skor_kanan+60;

END IF;

IF B_KIRI <= makan_19ka AND B_KANAN >= makan_19ka AND


B_ATAS <= makan_19b1 AND B_BAWAH >= makan_19a1 THEN
makan_19ki := -125;
makan_19ka := -130;
makan_19a1 := -385;
makan_19b1 := -390;
skor_kanan := skor_kanan+60;

END IF;

IF B_KIRI <= makan_23ka AND B_KANAN <= makan_23ka AND


B_ATAS <= makan_23b1 AND B_BAWAH >= makan_23a1 THEN
makan_23ki := -125;
makan_23ka := -130;
makan_23a1 := -385;
makan_23b1 := -390;
skor_kanan := skor_kanan+60;

END IF;
IF B_KIRI <= makan_24ka AND B_KANAN <= makan_24ka AND
B_ATAS <= makan_24b1 AND B_BAWAH >= makan_24a1 THEN
makan_24ki := -125;
makan_24ka := -130;
makan_24a1 := -385;
makan_24b1 := -390;
skor_kanan := skor_kanan+60;

END IF;

ELSE
B_KIRI := B_KIRI;
B_KANAN := B_KANAN;
B_BAWAH := B_BAWAH;
B_ATAS := B_ATAS;

END IF;

END PROCESS;

tempik : clockdiv
PORT MAP (
CLK => i_H_BT,
DIVOUT => clock40hz
);
END behavioral;

Anda mungkin juga menyukai