MODUL 6 PROYEK PERANCANGAN RANGKAIAN DIGITAL
Satria Indrawan Putra (18011034) Albhikautsar Dharma Kesuma (13511058)
Asisten: Luqman Muh. Zagi (13208032) Tanggal Percobaan: 06/12/12
EL2195-Praktikum Sistem Digital Laboratorium Dasar Teknik Elektro - Sekolah Teknik Elektro dan
Informatika ITB
Abstrak
Pada percobaan ini, dilakukan pembuatan
proyek rancangan rangkaian digital, di mana praktikan
membuat sebuah rangcangan rangkaian yang mencakup
seluruh praktikum sebelum ini yang diimplementasikan
dengan aplikasi dengan FPGA dan display LCD.
Proyek yang dibuat oleh praktikan adalah game labirin.
Kata kunci: LCD, VGA, FPGA
1. PENDAHULUAN
Praktikum ini adalah proyek
rancangan praktikan yang merupakan
semacam program yang dijalankan dengan
menggunakan board FPGA dan ditampilkan
di display LCD. Yang dibuat oleh praktikan
adalah sebuah game labirin, di mana pemain
harus menggerakkan sebuah kotak dari garis
start menuju garis finish dengan
menggunakan tombol di board FPGA. Tujuan
dari praktikum ini adalah untuk
menspesifikasikan suatu sistem digital
sederhana dan untuk mengalasi sisem yang
sedan dikerjakan.
2. STUDI PUSTAKA
2.1. Pemilihan Proyek Standar
Percobaan ini terdiri dari tahapan
desain, implementasi, dan pengujian
sistem yang dibuat oleh tim Anda.
Diharapkan proyek Anda dapat
selesai pada waktu yang ditentukan.
Anda dapat menentukan sendiri
proyek yang anda buat. Persyaratan
proyek tersebut:
1. Menggunakan satu atau lebih
interface yang ada di board:
VGA, sound card (AUDIO
CODEC), LCD, USB, koneksi
serial, atau lainnya
2. Interaktif: mempunyai input,
push button, mouse,
keyboard, atau lainnya
3. Mempunyai bagian FSM
4. Sedikitnya terdiri dari 3 blok
2.2. Petunjuk Desain
1. Anda wajib menggunakan
VHDL dalam penegerjaan
tugas Anda. Disarankan
menggunakan pendekatan
struktural bukan behavioral.
2. Import pin assignment/buat
pin assignment baru seperti
percobaan sebelumnya untuk
menspesifikasikan lokasi pin.
3. METODOLOGI
Langkah-langkah yang dilakukan
praktikan dalam mengerjakan proyek ini
adalah:
1. Mencari data-data yang perlu
untuk implementasi proyek ini, di
antaranya adalah source code-
source code dasar seperti
display_vhd, vga_vhd, dan lain-
lain.
2. Membuat source code utama,
yaitu TUBES.vhd, di mana state-
state proyek dinyatakan di sini.
State-nya mencakup: state saat
pemain menekan tombol arah
(kanan, kiri, atas, bawah), state
saat kotak digerakkan melebihi
batas labirin, dan state di mana
game akan di-reset dan kotak
kembali ke garis start.
3. Membuat souce code tambahan
yaitu pointer.vhd yaitu sebagai
kotak yang akan digerakkan dan
labirin.vhd sebagai bentuk
labirinnya.
4. Simulasi di lab, ternyata masih
terdapat beberapa kesalahan pada
kode yang kami buat, di mana
pernyataan warna dari
pointer.vhd dan labirin.vhd tidak
bisa digunakan bersama, sehingga
kami harus menggabung kode
pointer dan labirin.
Berikut kami lampirkan FSM (Finite State
Machine) dari proyek yang kami kerjakan
Dan juga ilustrasi dari blok diagram yang
kamu gunakan dalam proyek kami
4. HASIL DAN ANALISIS
Berikut ini adalah hasil implementasi
proyek kami pada display LCD:
Spesifikasi game:
Game ini dimainkan dengan
menggunakan tombol di FPGA. Tombol yang
digunakan adalah KEY0 sebagai arah kanan,
KEY1 sebagai arah bawah, KEY2 sebagai arah
atas, dan KEY3 sebagai arah kiri. Kotak harus
digerakkan dari garis start di tengah menuju
garis finish di pojok kiri bawah tanpa melebihi
batas dari labirin. Apabila kotak digerakkan
melebihi batas labirin, game akan me-reset
dan kotak kembali pada posisi semula yaitu di
garis start. Apabila kotak berhasil digerakkan
menuju garis finish, keadaannya sama seperti
apabila kotak digerakkan melewati batas
labirin, yaitu game reset.
Ada enam buah state dari proyek
yang kami buat, berikut akan kami jelaskan
bagaimana keberjalanan dalam state tersebut.
State 1 (S1) adalah state dimana kotak dalam
keadaan diam menunggu untuk masukan dari
pengguna yang nantinya akan menentukan
kemana kotak akan begerak.
State 2 (S2). State ini akan menentukan apakah
kotak akan bergerak ke kanan atau akan
melebihi dari labirin yang sudah ditentukan.
Apabila kotak masih dapat bergerkan maka
akan kembali ke (S1) namun apabila kotak
melewati batas labirin, permainan ini akan
masuk ke state 6 (S6).
State 3 (S3). State ini akan menentukan apakah
kotak akan bergerak ke kiri atau akan melebihi
dari labirin yang sudah ditentukan. Apabila
kotak masih dapat bergerkan maka akan
kembali ke (S1) namun apabila kotak melewati
batas labirin, permainan ini akan masuk ke
state 6 (S6).
State (S4). State ini akan menentukan apakah
kotak akan bergerak ke atas atau akan
melebihi dari labirin yang sudah ditentukan.
Apabila kotak masih dapat bergerkan maka
akan kembali ke (S1) namun apabila kotak
melewati batas labirin, permainan ini akan
masuk ke state 6 (S6).
State 5 (S5). State ini akan menentukan apakah
kotak akan bergerak ke bawahatau akan
melebihi dari labirin yang sudah ditentukan.
Apabila kotak masih dapat bergerkan maka
akan kembali ke (S1) namun apabila kotak
melewati batas labirin, permainan ini akan
masuk ke state 6 (S6).
State 6 (S6) adalah state dimana kotak sudah
melewati batas dari labirin. Pada state 6 ini
permainan akan direset dan akan
dikembalikan pada posisi awal kotak
diletakan.
Keseluruan state akan kembali ke state 1
untuk menunggu masukan dari user.
Dalam pembuatan labirin tersebut
digunakan sebuah file yang sudah kami buat
yang bernama “tubes.vhd”. File ini secara
garis besar sama dengan color_rom_vhdl.vhd
yang digunakan pada praktikum sebelumnya
yang berguna untuk membuat batasan-
batasan dari labirin yang akan dibuat.
Digunakan pula “clockdiv.vhd” yang berguna
untuk membuat timing sehingga kotak dapat
bergerak.
Untuk desain labirin, hasil sudah
sesuai dengan spesifikasi yang diharapkan,
namun penggerakkan kotak tidak berhasil,
sehingga pe-reset-an game saat kotak
digerakkan melewati batas labirin dan kondisi
finish tidak diketahui.
Pengnujian untuk untuk mengecek
keberhasilan proyek kami adalah dengan
berhasilnya menjalankan kotak dari garis start
sampai garis finish dan kotak keluar dari batas
yang sudah ditentukan untuk mengetes
keberhasilan reset dari proyek kami.
Hasil dari proyek kami tidak sesuai
dengan spec yang kami inginkan karena
permainan kami tidak dapat berlangsung
dengan baik karena kotak tidak dapat
bergerak dari tempat yang dimaksud.
Analisis:
Desain labirin dan posisi kotak sukses
dimplementasikan di display LCD.
Sayangnya, kotak tidak dapat digerakkan.
Analisis kami adalah, sepertinya terdapat
kesalahan kode dalam state-nya, yaitu state
saat pemain menekan tombol arah pada
FPGA. Selanjutnya, state ketika kotak
digerakkan melebihi batas labirin juga tidak
bisa dilihat berjalan atau tidak karena kotak
yang tidak bisa digerakkan tersebut.
Kesalahan pada pendesaianan proyek kami
pula terjadi kesalahan dalam pemanggilan
kode-kode portmap yang menyebabkan kotak
tidak dapat bergerak sebagaimana mustinya.
Dalam proyek besar ini, kami tidak
dapat membuat hasil simulasi maupun video
tentang bagaimana permainan ini berlangsung
dikarenakan hal yang sudah disebutkan
diatas.
Pembagian tugas dalam pembuatan
proyek ini adalah bahwa kami berdua masing-
masing saling membantu dalam pengerjaan
kode vhdl, pembuatan laporan, maupun pada
saat perbaikan-perbaikan kode vhdl pada saat
praktikum pertama dan kedua dalam
pengerjaan proyek ini. Tidak ada seseorang
yang lebih berat bekerja.
5. KESIMPULAN
Mengassign portmap adalah hal yang
sangat penting dalam pengkodean dan
pengimplementasian pada FPGA. Proyek
kami sebagian besar salah dikarenakan
kegagalan dalam pemanggilan variabel-
variabel yang digunakan dalam pengkodean
vhdl ini. Jadi pada sampai halnya bahwa
proyek kami tidak dapat dijalankan dengan
sebagaimana mustinya, sehingga permainan
ini tidak dapat dijalankan.
DAFTAR PUSTAKA
[1] Mervin T. Hutabarat, Praktikum Sistem Digital EL-2195, Laboratorium Dasar Teknik Elektro, Bandung, 2012.
tubes.vhd
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_ARITH.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY tubes IS
PORT(
CLOCK_50 : IN STD_LOGIC;
KEY : IN STD_LOGIC_VECTOR( 3 DOWNTO 0 );
i_pixel_rowkotak : INOUT STD_LOGIC_VECTOR( 9 DOWNTO 0 );
i_pixel_columnkotak : INOUT STD_LOGIC_VECTOR( 9 DOWNTO 0 );
VGA_R : OUT STD_LOGIC_VECTOR( 5 DOWNTO 0 );
VGA_G : OUT STD_LOGIC_VECTOR( 5 DOWNTO 0 );
VGA_B : OUT STD_LOGIC_VECTOR( 5 DOWNTO 0 );
VGA_HS : OUT STD_LOGIC;
VGA_VS : OUT STD_LOGIC;
VGA_CLK : OUT STD_LOGIC;
VGA_BLANK : OUT STD_LOGIC;
GPIO_0 : OUT STD_LOGIC_VECTOR( 35 DOWNTO 0 ));
END tubes;
ARCHITECTURE behavioral OF tubes IS
TYPE executionStage IS (s1,s2,s3,s4,s5,s6);
SIGNAL state : executionStage;
SIGNAL BA,BB,BL,BR : STD_LOGIC_VECTOR( 9 DOWNTO 0 );
SIGNAL red_color : STD_LOGIC_VECTOR( 7 DOWNTO 0 );
SIGNAL green_color : STD_LOGIC_VECTOR( 7 DOWNTO 0 );
SIGNAL blue_color : STD_LOGIC_VECTOR( 7 DOWNTO 0 );
SIGNAL BA2, BB2, BL2, BR2 : STD_LOGIC_VECTOR( 9 DOWNTO 0 );
SIGNAL x : STD_LOGIC_VECTOR( 9 DOWNTO 0 );
SIGNAL y : STD_LOGIC_VECTOR( 9 DOWNTO 0 );
SIGNAL DIV : bit;
COMPONENT display_vhd IS
PORT(
i_clk : 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 );
VGA_HS : OUT STD_LOGIC;
VGA_VS : OUT STD_LOGIC;
VGA_CLK : OUT STD_LOGIC;
VGA_BLANK : OUT STD_LOGIC);
END COMPONENT;
COMPONENT Labirin IS
PORT(
i_clk : IN STD_LOGIC;
BA,BB,BL,BR : IN STD_LOGIC_VECTOR(9 DOWNTO 0);
i_pixel_column : IN STD_LOGIC_VECTOR( 9 DOWNTO 0 );
i_pixel_rowkotak : IN STD_LOGIC_VECTOR( 9 DOWNTO 0 );
i_pixel_columnkotak : 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 COMPONENT;
COMPONENT CLOCKDIV IS
PORT( CLK: IN std_logic;
DIVOUT: buffer BIT);
END COMPONENT;
BEGIN
TEST : CLOCKDIV PORT MAP (DIVOUT => DIV, CLK => CLOCK_50);
PROCESS (KEY(3), KEY(2), KEY(1), KEY(0), state) --3 kanan 2 kiri 1 atas 0 bawah
BEGIN
if (DIV'event and DIV = '1') then --current state
case state is
when s1 => IF (KEY(3)='0' AND KEY(2)='1' AND KEY(1)='1' AND
KEY(0)='1') THEN
state <= s2; --kanan
elsif (KEY(3)='1' AND KEY(2)='0' AND KEY(1)='1' AND
KEY(0)='1') THEN
state <= s3; --kiri
elsif (KEY(3)='1' AND KEY(2)='1' AND KEY(1)='0' AND
KEY(0)='1') THEN
state <= s4; --atas
elsif (KEY(3)='1' AND KEY(2)='1' AND KEY(1)='1' AND
KEY(0)='0') THEN
state <= s5; --bawah
END IF;
when s2 =>IF (((i_pixel_columnkotak>= 10) AND (i_pixel_columnkotak<= 30) --
kanan
AND (i_pixel_rowkotak>= 10) AND
(i_pixel_rowkotak<= 470))
OR ((i_pixel_columnkotak>= 10) AND
(i_pixel_columnkotak<= 260)
AND (i_pixel_rowkotak>= 10) AND
(i_pixel_rowkotak<= 30))
OR ((i_pixel_columnkotak>= 610) AND
(i_pixel_columnkotak<= 630)
AND (i_pixel_rowkotak>= 10) AND
(i_pixel_rowkotak<= 470))
OR ((i_pixel_columnkotak>= 400) AND
(i_pixel_columnkotak<= 630)
AND (i_pixel_rowkotak>= 10) AND
(i_pixel_rowkotak<= 30))
OR ((i_pixel_columnkotak>= 450) AND
(i_pixel_columnkotak<= 510)
AND (i_pixel_rowkotak>= 130) AND
(i_pixel_rowkotak<= 390))
OR ((i_pixel_columnkotak>= 90) AND
(i_pixel_columnkotak<= 150)
AND (i_pixel_rowkotak>= 130) AND
(i_pixel_rowkotak<= 470))
OR ((i_pixel_columnkotak>= 290) AND
(i_pixel_columnkotak<= 350)
AND (i_pixel_rowkotak>= 240) AND
(i_pixel_rowkotak<= 350))
OR ((i_pixel_columnkotak>= 90) AND
(i_pixel_columnkotak<= 510)
AND (i_pixel_rowkotak>= 130) AND
(i_pixel_rowkotak<= 190))
OR ((i_pixel_columnkotak>= 290) AND
(i_pixel_columnkotak<= 510)
AND (i_pixel_rowkotak>= 330) AND
(i_pixel_rowkotak<= 450))
OR ((i_pixel_columnkotak>= 90) AND
(i_pixel_columnkotak<= 470)
AND (i_pixel_rowkotak>= 450) AND
(i_pixel_rowkotak<= 470))
--likalikukehidupan
OR((i_pixel_columnkotak>= 260) AND
(i_pixel_columnkotak<= 280)
AND (i_pixel_rowkotak>= 10) AND
(i_pixel_rowkotak<= 30))
OR ((i_pixel_columnkotak>= 260) AND
(i_pixel_columnkotak<= 320)
AND (i_pixel_rowkotak>= 30) AND
(i_pixel_rowkotak<= 50))
OR ((i_pixel_columnkotak>= 300) AND
(i_pixel_columnkotak<= 360)
AND (i_pixel_rowkotak>= 10) AND
(i_pixel_rowkotak<= 30))
OR ((i_pixel_columnkotak>= 340) AND
(i_pixel_columnkotak<= 360)
AND (i_pixel_rowkotak>= 30) AND
(i_pixel_rowkotak<= 80))
OR ((i_pixel_columnkotak>= 260) AND
(i_pixel_columnkotak<= 340)
AND (i_pixel_rowkotak>= 60) AND
(i_pixel_rowkotak<= 80))
OR ((i_pixel_columnkotak>= 260) AND
(i_pixel_columnkotak<= 280)
AND (i_pixel_rowkotak>= 80) AND
(i_pixel_rowkotak<= 120))
OR ((i_pixel_columnkotak>= 280) AND
(i_pixel_columnkotak<= 400)
AND (i_pixel_rowkotak>= 100) AND
(i_pixel_rowkotak<= 120))
OR ((i_pixel_columnkotak>= 380) AND
(i_pixel_columnkotak<= 400)
AND (i_pixel_rowkotak>= 10) AND
(i_pixel_rowkotak<= 100))) THEN
i_pixel_columnkotak <= i_pixel_columnkotak+ 1;
state <= s1;
ELSE
state <= s6;
END IF;
when s3 => IF (((i_pixel_columnkotak>= 10) AND (i_pixel_columnkotak<= 30) --kiri
AND (i_pixel_rowkotak>= 10) AND
(i_pixel_rowkotak<= 470))
OR ((i_pixel_columnkotak>= 10) AND
(i_pixel_columnkotak<= 260)
AND (i_pixel_rowkotak>= 10) AND
(i_pixel_rowkotak<= 30))
OR ((i_pixel_columnkotak>= 610) AND
(i_pixel_columnkotak<= 630)
AND (i_pixel_rowkotak>= 10) AND
(i_pixel_rowkotak<= 470))
OR ((i_pixel_columnkotak>= 400) AND
(i_pixel_columnkotak<= 630)
AND (i_pixel_rowkotak>= 10) AND
(i_pixel_rowkotak<= 30))
OR ((i_pixel_columnkotak>= 450) AND
(i_pixel_columnkotak<= 510)
AND (i_pixel_rowkotak>= 130) AND
(i_pixel_rowkotak<= 390))
OR ((i_pixel_columnkotak>= 90) AND
(i_pixel_columnkotak<= 150)
AND (i_pixel_rowkotak>= 130) AND
(i_pixel_rowkotak<= 470))
OR ((i_pixel_columnkotak>= 290) AND
(i_pixel_columnkotak<= 350)
AND (i_pixel_rowkotak>= 240) AND
(i_pixel_rowkotak<= 350))
OR ((i_pixel_columnkotak>= 90) AND
(i_pixel_columnkotak<= 510)
AND (i_pixel_rowkotak>= 130) AND
(i_pixel_rowkotak<= 190))
OR ((i_pixel_columnkotak>= 290) AND
(i_pixel_columnkotak<= 510)
AND (i_pixel_rowkotak>= 330) AND
(i_pixel_rowkotak<= 450))
OR ((i_pixel_columnkotak>= 90) AND
(i_pixel_columnkotak<= 470)
AND (i_pixel_rowkotak>= 450) AND
(i_pixel_rowkotak<= 470))
--likalikukehidupan
OR((i_pixel_columnkotak>= 260) AND
(i_pixel_columnkotak<= 280)
AND (i_pixel_rowkotak>= 10) AND
(i_pixel_rowkotak<= 30))
OR ((i_pixel_columnkotak>= 260) AND
(i_pixel_columnkotak<= 320)
AND (i_pixel_rowkotak>= 30) AND
(i_pixel_rowkotak<= 50))
OR ((i_pixel_columnkotak>= 300) AND
(i_pixel_columnkotak<= 360)
AND (i_pixel_rowkotak>= 10) AND
(i_pixel_rowkotak<= 30))
OR ((i_pixel_columnkotak>= 340) AND
(i_pixel_columnkotak<= 360)
AND (i_pixel_rowkotak>= 30) AND
(i_pixel_rowkotak<= 80))
OR ((i_pixel_columnkotak>= 260) AND
(i_pixel_columnkotak<= 340)
AND (i_pixel_rowkotak>= 60) AND
(i_pixel_rowkotak<= 80))
OR ((i_pixel_columnkotak>= 260) AND
(i_pixel_columnkotak<= 280)
AND (i_pixel_rowkotak>= 80) AND
(i_pixel_rowkotak<= 120))
OR ((i_pixel_columnkotak>= 280) AND
(i_pixel_columnkotak<= 400)
AND (i_pixel_rowkotak>= 100) AND
(i_pixel_rowkotak<= 120))
OR ((i_pixel_columnkotak>= 380) AND
(i_pixel_columnkotak<= 400)
AND (i_pixel_rowkotak>= 10) AND
(i_pixel_rowkotak<= 100))) THEN
i_pixel_columnkotak<= i_pixel_columnkotak- 1;
state <= s1;
ELSE
state <= s6;
END IF;
when s4 => IF (((i_pixel_columnkotak>= 10) AND (i_pixel_columnkotak<= 30) --atas
AND (i_pixel_rowkotak>= 10) AND
(i_pixel_rowkotak<= 470))
OR ((i_pixel_columnkotak>= 10) AND
(i_pixel_columnkotak<= 260)
AND (i_pixel_rowkotak>= 10) AND
(i_pixel_rowkotak<= 30))
OR ((i_pixel_columnkotak>= 610) AND
(i_pixel_columnkotak<= 630)
AND (i_pixel_rowkotak>= 10) AND
(i_pixel_rowkotak<= 470))
OR ((i_pixel_columnkotak>= 400) AND
(i_pixel_columnkotak<= 630)
AND (i_pixel_rowkotak>= 10) AND
(i_pixel_rowkotak<= 30))
OR ((i_pixel_columnkotak>= 450) AND
(i_pixel_columnkotak<= 510)
AND (i_pixel_rowkotak>= 130) AND
(i_pixel_rowkotak<= 390))
OR ((i_pixel_columnkotak>= 90) AND
(i_pixel_columnkotak<= 150)
AND (i_pixel_rowkotak>= 130) AND
(i_pixel_rowkotak<= 470))
OR ((i_pixel_columnkotak>= 290) AND
(i_pixel_columnkotak<= 350)
AND (i_pixel_rowkotak>= 240) AND
(i_pixel_rowkotak<= 350))
OR ((i_pixel_columnkotak>= 90) AND
(i_pixel_columnkotak<= 510)
AND (i_pixel_rowkotak>= 130) AND
(i_pixel_rowkotak<= 190))
OR ((i_pixel_columnkotak>= 290) AND
(i_pixel_columnkotak<= 510)
AND (i_pixel_rowkotak>= 330) AND
(i_pixel_rowkotak<= 450))
OR ((i_pixel_columnkotak>= 90) AND
(i_pixel_columnkotak<= 470)
AND (i_pixel_rowkotak>= 450) AND
(i_pixel_rowkotak<= 470))
--likalikukehidupan
OR((i_pixel_columnkotak>= 260) AND
(i_pixel_columnkotak<= 280)
AND (i_pixel_rowkotak>= 10) AND
(i_pixel_rowkotak<= 30))
OR ((i_pixel_columnkotak>= 260) AND
(i_pixel_columnkotak<= 320)
AND (i_pixel_rowkotak>= 30) AND
(i_pixel_rowkotak<= 50))
OR ((i_pixel_columnkotak>= 300) AND
(i_pixel_columnkotak<= 360)
AND (i_pixel_rowkotak>= 10) AND
(i_pixel_rowkotak<= 30))
OR ((i_pixel_columnkotak>= 340) AND
(i_pixel_columnkotak<= 360)
AND (i_pixel_rowkotak>= 30) AND
(i_pixel_rowkotak<= 80))
OR ((i_pixel_columnkotak>= 260) AND
(i_pixel_columnkotak<= 340)
AND (i_pixel_rowkotak>= 60) AND
(i_pixel_rowkotak<= 80))
OR ((i_pixel_columnkotak>= 260) AND
(i_pixel_columnkotak<= 280)
AND (i_pixel_rowkotak>= 80) AND
(i_pixel_rowkotak<= 120))
OR ((i_pixel_columnkotak>= 280) AND
(i_pixel_columnkotak<= 400)
AND (i_pixel_rowkotak>= 100) AND
(i_pixel_rowkotak<= 120))
OR ((i_pixel_columnkotak>= 380) AND
(i_pixel_columnkotak<= 400)
AND (i_pixel_rowkotak>= 10) AND
(i_pixel_rowkotak<= 100))) THEN
i_pixel_rowkotak<= i_pixel_rowkotak- 1;
state <= s1;
ELSE
state <= s6;
END IF;
when s5 => IF (((i_pixel_columnkotak>= 10) AND (i_pixel_columnkotak<= 30) --
bawah
AND (i_pixel_rowkotak>= 10) AND
(i_pixel_rowkotak<= 470))
OR ((i_pixel_columnkotak>= 10) AND
(i_pixel_columnkotak<= 260)
AND (i_pixel_rowkotak>= 10) AND
(i_pixel_rowkotak<= 30))
OR ((i_pixel_columnkotak>= 610) AND
(i_pixel_columnkotak<= 630)
AND (i_pixel_rowkotak>= 10) AND
(i_pixel_rowkotak<= 470))
OR ((i_pixel_columnkotak>= 400) AND
(i_pixel_columnkotak<= 630)
AND (i_pixel_rowkotak>= 10) AND
(i_pixel_rowkotak<= 30))
OR ((i_pixel_columnkotak>= 450) AND
(i_pixel_columnkotak<= 510)
AND (i_pixel_rowkotak>= 130) AND
(i_pixel_rowkotak<= 390))
OR ((i_pixel_columnkotak>= 90) AND
(i_pixel_columnkotak<= 150)
AND (i_pixel_rowkotak>= 130) AND
(i_pixel_rowkotak<= 470))
OR ((i_pixel_columnkotak>= 290) AND
(i_pixel_columnkotak<= 350)
AND (i_pixel_rowkotak>= 240) AND
(i_pixel_rowkotak<= 350))
OR ((i_pixel_columnkotak>= 90) AND
(i_pixel_columnkotak<= 510)
AND (i_pixel_rowkotak>= 130) AND
(i_pixel_rowkotak<= 190))
OR ((i_pixel_columnkotak>= 290) AND
(i_pixel_columnkotak<= 510)
AND (i_pixel_rowkotak>= 330) AND
(i_pixel_rowkotak<= 450))
OR ((i_pixel_columnkotak>= 90) AND
(i_pixel_columnkotak<= 470)
AND (i_pixel_rowkotak>= 450) AND
(i_pixel_rowkotak<= 470))
--likalikukehidupan
OR((i_pixel_columnkotak>= 260) AND
(i_pixel_columnkotak<= 280)
AND (i_pixel_rowkotak>= 10) AND
(i_pixel_rowkotak<= 30))
OR ((i_pixel_columnkotak>= 260) AND
(i_pixel_columnkotak<= 320)
AND (i_pixel_rowkotak>= 30) AND
(i_pixel_rowkotak<= 50))
OR ((i_pixel_columnkotak>= 300) AND
(i_pixel_columnkotak<= 360)
AND (i_pixel_rowkotak>= 10) AND
(i_pixel_rowkotak<= 30))
OR ((i_pixel_columnkotak>= 340) AND
(i_pixel_columnkotak<= 360)
AND (i_pixel_rowkotak>= 30) AND
(i_pixel_rowkotak<= 80))
OR ((i_pixel_columnkotak>= 260) AND
(i_pixel_columnkotak<= 340)
AND (i_pixel_rowkotak>= 60) AND
(i_pixel_rowkotak<= 80))
OR ((i_pixel_columnkotak>= 260) AND
(i_pixel_columnkotak<= 280)
AND (i_pixel_rowkotak>= 80) AND
(i_pixel_rowkotak<= 120))
OR ((i_pixel_columnkotak>= 280) AND
(i_pixel_columnkotak<= 400)
AND (i_pixel_rowkotak>= 100) AND
(i_pixel_rowkotak<= 120))
OR ((i_pixel_columnkotak>= 380) AND
(i_pixel_columnkotak<= 400)
AND (i_pixel_rowkotak>= 10) AND
(i_pixel_rowkotak<= 100))) THEN
i_pixel_rowkotak<= i_pixel_rowkotak+ 1;
state <= s1;
ELSE
state <= s6;
END IF;
when s6 =>
i_pixel_columnkotak<= "0000110000";
i_pixel_rowkotak<= "0000110000";
state <= s1;
end case;
END IF;
END PROCESS;
PROCESS (i_pixel_columnkotak, i_pixel_rowkotak)
BEGIN
BA2 <= i_pixel_columnkotak;
BB2 <= i_pixel_columnkotak + 10;
BL2 <= i_pixel_rowkotak;
BR2 <= i_pixel_rowkotak + 10;
END PROCESS;
module_vga : display_vhd
PORT MAP (
i_clk => CLOCK_50,
VGA_R => VGA_R,
VGA_G => VGA_G,
VGA_B => VGA_B,
VGA_HS => VGA_HS,
VGA_VS => VGA_VS,
VGA_CLK => VGA_CLK,
VGA_BLANK => VGA_BLANK
);
color_rom0 : Labirin
PORT MAP (
i_clk => CLOCK_50,
i_pixel_rowkotak => i_pixel_rowkotak,
i_pixel_columnkotak => i_pixel_columnkotak,
BA => BA2,
BB => BB2,
BL => BL2,
BR => BR2,
o_red => red_color,
o_green => green_color,
o_blue => blue_color);
clock0 : clockdiv
port map (
clk => CLOCK_50,
divout => div
);
END behavioral;