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.
D
AFTARP
USTAKA[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
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))
(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)
(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)
(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))
(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;