Anda di halaman 1dari 9

Percobaan V

Perancangan Dan Implementasi Display LCD


Menggunakan Modul VGA Pada FPGA
Rahman Ecky Retnaldi (13116006)
Asisten : Auliya Rendy Aidi (13115046)
Tanggal Percobaan : 20/11/2017
EL2104 Praktikum Sistem Digital
Laboratorium Teknik Elektro
Institut Teknologi Sumatera

Abstrak— Dalam praktikum Modul 5 ini akan dilakuakn beberapa 1. Mendapatkan pengetahuan dan pengalamanpenggunakan
percobaan, diantaranya adalah membuat Display LCD computer interface pada board evaluasi FPGA.
agar menampilkan warna bendera republic Indonesia yaitu merah 2. Memahami cara kerja VGA pada umumnya
di atas dan putih di pada bagian bawah . kemudian pada
percobaan selanjutnya dibuat agar monitor menampilkan sebuah
kotak berwana merah dengan backround putih yang selanjutnya II. LANDASAN TEORI
pada percobaan ketiga , kotak yang telah dibuat dipercobaan kedua Video Graphics Array (VGA) masih menjadi interface yang
tersebut dibuat agar dapat bergerak-gerak ke kiri, kanan, atas, dan popular untuk sebuah tampilan. VGA interface ini masih
bawah dengan menngunakan push button yang ada pada FPGA. banyak ditemukan di beberapa device sekarang, misalnya
Dari ketiga percobaan yang telah dilakukan ini, nantinya dapat
layar LCD dan proyektor. VGA interface ini terdapat juga di
disimpulkan bahwa implementasi interface dari rangkaian FPGA
tidak hanya pada fisik FPGA, namun juga dapat ditampilkan pada
board altera yang kita gunakan saat ini. Pada percobaan kali
LCDmenggunakan modul VGA. ini tampilan VGA digunakan agar tampilan hasil desain yang
kita rancang menjadi lebih menarik, tidak terbatas hanya pada
Kata Kunci— Display LCD, FPGA, VGA. LED atau 7-Segment. Tujuan percobaan kali ini juga adalah
memberikan ilustrasi penggunaan interface I/O yang ada pada
I. PENDAHULUAN FPGA, misalnya GPIO, komunikasi serial menggunakan
Dalam praktikum sebelumnya pada modul 4 , praktikan telah RS232, Audio CODEC, LCD karakter 16x2, dll.
merancang dan mengimplementasikan sebuah rangkaian Interface ke VGA menggunakan 2 jenis sinyal, yaitu : sinyal
logika sekuensial dalam hal ini adalah mengenai traffic light warna (Merah, Hijau, dan Biru) dan sinyal sinkron (horizontal
yang mana menggunakan VGA. VGA atau Video Graphics dan vertical). Berikut adalah penjelasan beberapa sinyal yang
Array ini merupakan sebuah standar tampilan komponen digunakan :
analog yang dipasarkan pertama kali oleh IBM pada tahun a. Horizontal Sync (TTL level)
1987. meskipun standar VGA tidak lagi digunakan karena Sinyal ini akan aktif pada range piksel kolom 0
adanya standar yang lebih baru, VGA masih sampai dengan 639. Sehingga kalau sinyal ini tidak
diimplementasikan pada pocket PC.VGA juga dikenal dengan aktif, yang terjadi adalah pergantian baris.
video card, video adapter, dispalay card, graphics card, b. Vertical Sync (TTL level)
graphics board, display adapter atau graphics adapter. VGA Sinyal ini akan aktif pada range piksel baris 0 sampai
sendiri mengacu pada konektor VGA 15-pin yang masih dengan 479. Sehingga kalau sinyal ini tidak aktif,
digunakan secara luas untuk mengantarkan sinyal video yang terjadi adalah pergantian layar. Atau kembali ke
analog ke monitor. baris pertama.
c. Sinyal RGB (Analog 3 pin: 0,7 – 1 V)
Pada praktikum ini praktikan akan merancang dan Sinyal ini merepresentasikan intensitas untuk
mengimplementasikan Display LCD menggunakan modul masing2 komponen warna merah, hijau, dan biru
VGA pada FPGA . kemudian mempelajari penerapan blok untuk setiap pixel yang saat itu aktif. Sehingga yang
diagram dalam perancangan menggunakan modul VGA, yaitu terjadi ketiga sinyal ini berubah-ubah sesuai pixel
membuat sebuah objek berbentuk kotak dengan ukuran 50 x yang sedang aktif dalam proses scanning (dari kiri ke
50 pixel pada percobaan kedua dan membuat objek kotak kanan untuk setiap baris, selanjutnya dari baris paling
tersebut agar dapat bergerak keatas,kekiiri,kebawah dan atas sampai baris paling bawah).
kekanan pada percobaan yang ketiga. Pada percobaan kali ini kita menggunakan resolusi 640x480
pixel dan menggunakan refresh rate lebih dari 60 Hz. Refresh
Percobaan ini memiliki tujuan sebagai berikut : rate ini digunakan karena pada range kurang dari 30-60 Hz
manusia dapat melihat adanya flicker. Selain itu refresh rate Gambar 3 menunjukkan blok diagram dari FPGA hingga ke
ini juga umum digunakan pada monitor LCD. LCD modern LCD monitor. Chip DAC mengubah sinyal digital ke analog.
memiliki fitur multirate, sehingga kita tidak harus tepat Dalam kasus ini, data RGB digital diubah ke data RGB
membuat refresh ratenya 60 Hz. Proses scanning berawal dari analog, begitu juga untuk sinyal sinkronisasinya. Sedangkan
kiri atas ke kanan lalu ke kiri bawah dan kembali ke kiri atas gambar 4 menunjukkan skematik dari display VGA yang ada
ketika sudah mencapai pixel terakhir. pada board DE1. Untuk board lainnya dapat dibaca di
datasheet masing-masing board. Board DE1 menyediakan 16-
pin konektor untuk output VGA dan Analog Devices
ADV7123 10-bit high speed video DAC. DAC ini
mendapatkan sinyal sinkronisasi dari FPGA.

Gambar 3. Diagram Blok VGA Display

Gambar 1. Razor Scan pada Layar LCD

Gambar 2 dan Tabel 1 menunjukkan spesifikasi timing dari


sinkronisasi VGA. Sebuah sinyal aktif low menunjukkan akhir
dari sebuah sinkronisasi. Misalkan sinyal aktif low untuk horiz
sync menandakan akhir dari scanning satu baris dan awal
untuk baris berikutnya. Data RGB harus didrive 0 untuk
beberapa waktu tertentu thfp dan tvfp.

Gambar 4. Skematik VGA Display

III. METODELOGI
Pada percobaan modul V ini alat dan bahan yang
digunakan yaitu :
1. Board FPGA tipe DE1
2. Catu daya + kabel dan konektor tambahan serta kabel
downloader
3. Monitor LCD

Gambar 2. Timing Sinyal untuk VGA 640x480 piksel 3.1 Percobaan 1

Digambar bendera RI dilayat (atas merah, bawah


putih) pada kayar VGA. Untuk mendapatkan warna
merah R =111111, G = B =000000, sedangkan
putih R = G = B 111111. Cara yang dilakukan
adalah dengan mengeluarkan warna merah untuk
pixelpixel pada baris atas (nomor baris < 241),
warna putih untuk baris bawah.

Gambar 5. Percobaan 1

Tabel 1. Nilai-nilai parameter pada Gambar 1


LIBRARY IEEE; IF (i_pixel_column = 5) OR (i_pixel_column = 319) OR
USE IEEE.STD_LOGIC_1164.ALL; (i_pixel_column = 638) THEN grid <= '1';
USE IEEE.STD_LOGIC_ARITH.ALL; ELSE grid <= '0';
USE IEEE.STD_LOGIC_UNSIGNED.ALL; END IF;

ENTITY color_rom_vhd IS IF (M_TF1 = '1' AND i_M_US= '1' ) THEN o_red <=
PORT( X"FF"; o_green <= X"00"; o_blue <= X"00";
i_M_US : IN STD_LOGIC; ELSIF (M_TF2 = '1' AND i_M_BT= '1' ) THEN o_red <=
i_K_US : IN STD_LOGIC; X"FF"; o_green <= X"00"; o_blue <= X"00";
i_H_US : IN STD_LOGIC; ELSIF (K_TF1 = '1' AND i_K_US= '1' ) THEN o_red <=
i_M_BT : IN STD_LOGIC; X"FF"; o_green <= X"ff"; o_blue <= X"ff";
i_K_BT : IN STD_LOGIC; ELSIF (K_TF2 = '1' AND i_K_BT= '1' ) THEN o_red <=
i_H_BT : IN STD_LOGIC; X"FF"; o_green <= X"ff"; o_blue <= X"ff";
i_pixel_column : IN STD_LOGIC_VECTOR( 9 ELSIF (H_TF1 = '1' AND i_H_US= '1' ) THEN o_red <=
DOWNTO 0 ); X"00"; o_green <= X"66"; o_blue <= X"00";
i_pixel_row : IN STD_LOGIC_VECTOR( 9 ELSIF (H_TF2 = '1' AND i_H_BT= '1' ) THEN o_red <=
DOWNTO 0 ); X"00"; o_green <= X"66"; o_blue <= X"00";
o_red : OUT STD_LOGIC_VECTOR( 7 ELSIF (M_TF1 = '1' AND i_M_US= '0' ) THEN o_red <=
DOWNTO 0 ); X"EE"; o_green <= X"EE"; o_blue <= X"EE";
o_green : OUT STD_LOGIC_VECTOR( 7 ELSIF (M_TF2 = '1' AND i_M_BT= '0' ) THEN o_red <=
DOWNTO 0 ); X"EE"; o_green <= X"EE"; o_blue <= X"EE";
o_blue : OUT STD_LOGIC_VECTOR( 7 ELSIF (K_TF1 = '1' AND i_K_US= '0' ) THEN o_red <=
DOWNTO 0 )); X"EE"; o_green <= X"EE"; o_blue <= X"EE";
END color_rom_vhd; ELSIF (K_TF2 = '1' AND i_K_BT= '0' ) THEN o_red <=
X"EE"; o_green <= X"EE"; o_blue <= X"EE";
ARCHITECTURE behavioral OF color_rom_vhd IS ELSIF (H_TF1 = '1' AND i_H_US= '0' ) THEN o_red <=
X"EE"; o_green <= X"EE"; o_blue <= X"EE";
CONSTANT R_TF_0 : INTEGER := 0; ELSIF (H_TF2 = '1' AND i_H_BT= '0' ) THEN o_red <=
CONSTANT R_TF_1 : INTEGER := 240; X"EE"; o_green <= X"EE"; o_blue <= X"EE";
CONSTANT R_TF_2 : INTEGER := 479; ELSIF (grid = '1') THEN o_red <= X"EE";
o_green <= X"EE"; o_blue <= X"EE";
ELSE o_red <= X"00"; o_green <= X"00"; o_blue <=
SIGNAL M_TF1, M_TF2 : STD_LOGIC; X"00";
SIGNAL K_TF1, K_TF2 : STD_LOGIC; END IF;
SIGNAL H_TF1, H_TF2 : STD_LOGIC;
SIGNAL grid : STD_LOGIC;

BEGIN END PROCESS; Gambar 6. Script percobaan 1

3.2
END Percobaan 2
behavioral;
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, K_TF2, H_TF1, H_TF2) Digambar sebuah kotak/bujur sangkar (solid)
BEGIN berukuran 50 pixel x 50 pixel pada layar VGA.
Caranya adalah dengan memberi warna tertentu
pada pixelpixel tertentu. Misalkan, jika ujung kiri
IF ((i_pixel_row > R_TF_0) AND (i_pixel_row < atas kotak tadi ingin diletakan pada baris 10 kolom
R_TF_1) ) THEN M_TF1 <= '1'; 10, maka pixel yang harus diwarnai berbeda
ELSE M_TF1 <= '0'; dengan lainnya adalah semua pixel yang ada baris
10 sampai 59 dan kolom 10 sampai 59.
END IF;

IF ((i_pixel_row > R_TF_0) AND (i_pixel_row <


R_TF_1) ) THEN M_TF2 <= '1';
ELSE M_TF2 <= '0'; Gambar 7. Percobaan 2
END IF;

IF ((i_pixel_row > R_TF_1) AND (i_pixel_row <


R_TF_2) ) THEN K_TF1 <= '1';
ELSE K_TF1 <= '0';
END IF;

IF ((i_pixel_row > R_TF_1) AND (i_pixel_row <


R_TF_2) ) THEN K_TF2 <= '1';
ELSE K_TF2 <= '0';
END IF;
LIBRARY IEEE; Gambar 8. Script percobaan 2
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_ARITH.ALL; 3.3 Percobaan 3
USE IEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITY color_rom_vhd IS
PORT( Ujung kiri atas dari gambar harus dibuat agar dapat
i_M_US : IN STD_LOGIC; diubah-ubah (menjadi input)
i_K_US : IN STD_LOGIC;
i_H_US : IN STD_LOGIC;
i_M_BT : IN STD_LOGIC;
i_K_BT : IN STD_LOGIC;
i_H_BT : IN STD_LOGIC;
i_pixel_column : IN STD_LOGIC_VECTOR( 9 Membuat dua buah FSM/counter: satu FSM untuk
DOWNTO 0 ); menghasilkan posisi batas atas (baris), satu FSM
i_pixel_row : IN STD_LOGIC_VECTOR( 9 untuk menghasilkan posisi batas kiri. Tentu saja
DOWNTO 0 ); counter ini harus dibatasi maksimum dan
o_red : OUT STD_LOGIC_VECTOR( 7 minimumnya sesuai jumlah baris dan kolom yang
ada di layar.
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


Membuat input untuk perintah up/down counting
pada kedua FSM menggunakan push-button.
CONSTANT R_TF_0 : INTEGER := 10;
CONSTANT R_TF_1 : INTEGER := 59;
CONSTANT C_TF1_R : INTEGER := 10;
CONSTANT C_TF1_L : INTEGER := 59;
Gambar 9. Percobaan 3
SIGNAL M_TF1, M_TF2 : STD_LOGIC;
SIGNAL K_TF1, K_TF2 : STD_LOGIC; LIBRARY IEEE;
SIGNAL H_TF1, H_TF2 : STD_LOGIC; USE IEEE.STD_LOGIC_1164.ALL;
SIGNAL grid : STD_LOGIC; USE IEEE.STD_LOGIC_ARITH.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
BEGIN
ENTITY color_rom_vhd IS
PROCESS(i_pixel_row,i_pixel_column, i_M_US , PORT(
i_K_US , i_H_US , i_M_BT , i_K_BT , i_H_BT, i_M_US : IN STD_LOGIC; -- atas
M_TF1, M_TF2, K_TF1, K_TF2, H_TF1, H_TF2) i_K_US : IN STD_LOGIC; -- bawah
BEGIN i_H_US : IN STD_LOGIC; -- kanan
i_M_BT : IN STD_LOGIC; -- kiri
IF ((i_pixel_row > R_TF_0) AND (i_pixel_row < i_K_BT : IN STD_LOGIC; -- kecepatan
R_TF_1) ) AND ((i_pixel_column >= C_TF1_R) AND i_H_BT : IN STD_LOGIC; -- waktu
(i_pixel_column < C_TF1_L) ) THEN M_TF1 <= '1'; i_pixel_column : IN STD_LOGIC_VECTOR( 9
ELSE M_TF1 <= '0'; DOWNTO 0 );
END IF; i_pixel_row : IN STD_LOGIC_VECTOR( 9
DOWNTO 0 );
IF (M_TF1 = '1' AND i_M_US= '1' ) THEN o_red <= o_red : OUT STD_LOGIC_VECTOR( 7
X"FF"; o_green <= X"00"; o_blue <= X"00"; DOWNTO 0 );
o_green : OUT STD_LOGIC_VECTOR( 7
DOWNTO 0 );
ELSE o_red <= X"ff"; o_green <= X"ff"; o_blue <= o_blue : OUT STD_LOGIC_VECTOR( 7
X"ff"; DOWNTO 0 ));
END IF; END color_rom_vhd;

ARCHITECTURE behavioral OF color_rom_vhd IS


END PROCESS;
CONSTANT BATASBARIS : INTEGER := 479;
CONSTANT BATASKOLOM : INTEGER := 639;
END behavioral;
ELSIF clock40hz'event and clock40hz = '1' AND
ARCHITECTURE behavioral OF color_rom_vhd IS i_M_US = '1' AND i_K_US = '0' AND i_H_US = '1'
AND i_M_BT = '1' THEN
CONSTANT BATASBARIS : INTEGER := 479; BATASATAS := BATASATAS + KECEPATAN;
CONSTANT BATASKOLOM : INTEGER := 639; ---Arah Turun
BATASBAWAH := BATASBAWAH +
SHARED VARIABLE BATASATAS : INTEGER := KECEPATAN;
10;
SHARED VARIABLE BATASKIRI : INTEGER := 10; IF BATASBAWAH >= 479 THEN
SHARED VARIABLE BATASKANAN : INTEGER := BATASATAS := 479 -49;
60; BATASBAWAH := 479;
SHARED VARIABLE BATASBAWAH : INTEGER := END IF;
60;

SIGNAL M_TF1, M_TF2 : STD_LOGIC; ELSIF clock40hz'event and clock40hz = '1' AND
SIGNAL K_TF1, K_TF2 : STD_LOGIC; i_M_US = '1' AND i_K_US = '1' AND i_H_US = '0'
SIGNAL H_TF1, H_TF2 : STD_LOGIC; AND i_M_BT = '1' THEN
SIGNAL grid : STD_LOGIC; BATASKANAN := BATASKANAN +
KECEPATAN; ---Arah kanan
SHARED VARIABLE KECEPATAN : INTEGER := 0; BATASKIRI := BATASKIRI + KECEPATAN;
SIGNAL clock40hz : STD_LOGIC;
IF BATASKANAN >= 639 THEN
COMPONENT CLOCKDIV is BATASKANAN := 639;
port ( CLK : IN std_logic; BATASKIRI := 639 -49;
DIVOUT : buffer std_logic); END IF;
end component;
ELSIF clock40hz'event and clock40hz = '1' AND
BEGIN i_M_US = '1' AND i_K_US = '1' AND i_H_US = '1'
AND i_M_BT = '0' THEN
PROCESS(i_pixel_row,i_pixel_column, i_M_US , BATASKANAN := BATASKANAN -
i_K_US , i_H_US , i_M_BT , i_K_BT , i_H_BT, KECEPATAN; ---Arah Kiri
M_TF1, M_TF2, K_TF1, K_TF2, H_TF1, H_TF2) BATASKIRI := BATASKIRI - KECEPATAN;

BEGIN IF BATASKIRI <= 0 THEN


BATASKIRI := 0;
IF clock40hz'event and clock40hz = '1' THEN BATASKANAN := 49;
IF i_K_BT = '0' THEN END IF;
KECEPATAN := 2;
ELSE ELSE
KECEPATAN := 100;
END IF; BATASKIRI := BATASKIRI;
END IF; BATASKANAN := BATASKANAN;
BATASBAWAH := BATASBAWAH;
IF clock40hz'event and clock40hz = '1' AND i_M_US = BATASATAS := BATASATAS;
'0' AND i_K_US = '1' AND i_H_US = '1' AND i_M_BT
= '1' THEN
BATASATAS := BATASATAS - KECEPATAN; END IF;
---Arah Naik
BATASBAWAH := BATASBAWAH - IF ((i_pixel_column > BATASKIRI) AND
KECEPATAN; (i_pixel_column < BATASKANAN) AND (i_pixel_row
>BATASATAS) AND (i_pixel_row < BATASBAWAH))
IF BATASATAS <= 0 THEN THEN
BATASATAS := 0; o_red <= X"FF"; o_green <= X"00"; o_blue <=
BATASBAWAH := 49; X"00";
END IF; ELSE
o_red <= X"FF"; o_green <= X"FF"; o_blue <=
ELSIF clock40hz'event and clock40hz = '1' AND X"FF";
i_M_US = '1' AND i_K_US = '0' AND i_H_US = '1' END IF;
AND i_M_BT = '1' THEN
BATASATAS := BATASATAS + KECEPATAN; END PROCESS;
---Arah Turun
BATASBAWAH := BATASBAWAH + tempik : clockdiv
KECEPATAN; PORT MAP (
END PROCESS;
Gambar 12. Script pembagian warna

tempik : clockdiv
PORT MAP (
CLK => i_H_BT, Kemudian untuk membuat warna merah digunakan R=111111
DIVOUT => clock40hz dan B=000000 serta warna putih R=G=B=111111. script yang
); digunakan unuk menampilkan warna merah dan putih adalah
sebagai berikut :

END behavioral; --warna merah

IF (M_TF1 = '1' AND i_M_US= '1' ) THEN o_red <=


X"FF"; o_green <= X"00"; o_blue <= X"00";
Gambar 10. Script percobaan 3

---warna putih
ELSIF (K_TF1 = '1' AND i_K_US= '1' ) THEN o_red <=
X"FF"; o_green <= X"ff"; o_blue <= X"ff";

Gambar 13. Script pewarnaan merah-putih

Semua Kode diatas akan memberikan perintah agar mulai dari


pixel baris 0 sampai pixel baris 241 berwarna merah ,
kemudian sisanya pixel baris 241 sampai 479 berwarna putih.
o_red <= X”FF” pada script diatas setara dengan R =
’111111’. Setelah script di jalankan maka diperoleh hasil
sebagai berikut :

Gambar 11. Ilustrasi Blok Diagram Prosedur Percobaan 3

IV. HASIL DAN ANALISIS


4.1 Percobaan 1
Dalam percobaan 1 ini dibuat tampilan Display LCD
computer agar bisa menampilkan output warna merah-putih.
Untuk membuatnya kita bagi layar menjadi 2 bagian yaitu 0
sampai 240 berwarna merah serta dari 241 sampai 479
berwarna berwarna putih. Pembagian ini direpresentasikan
dengan kode vhdl yang digunakan pada modul 4 kemarin yaitu
color_rom_vhd yang kemudian dilakukan modifikasi sebagai
berikut :

Gambar 14. Hasil pada display LCD percobaan 1

Dari gambar diatas ,VGA menunjukan bahwa Proses scanning


yang dilakukan dimulai dari baris dan kolom paling atas yaitu
(0,0) sampai (0,639). Kemudian dilanjutkan dari baris
berikutnya (1,0) sampai (1,639), seperti itu seterusnya hingga
(240,639). Dalam hal ini pada titik (0,0) sampai (240,639)
akan menampilkan warna merah. Sedangkan pada titik (241,0)
sampai (479,639) akan menampilkan warna putih.

4.2 Percobaan 2
Pada percobaan ini dibuat sebuah kotak kecil dengan
ukuran 50 pixel x 50 pixel pada layar VGA. Kemudian kotak
kecil ini akan di letakan pada titik (10,10) ,(10,59) (59,10) dan
(59,59). Hal ini direpresentasikan kedalam kode vhdl 4.3 Percobaan 3
color_rom_vhd yang telah dimodifikasi sebbagai berikut : Dalam percobaan 3 ini dibuat kotak yang sama seperti
pada percobaan sebelumnya. Sehingga script pembuatan kotak
ini menggunakan script dari percobaan sebelumnya. Tapi
script tersebut dimodifikasi dengan diberi tambahan agar
kotak tersebut dapat digerak-gerakan ke kiri, kanan, atas dan
bawah sesuai input push bottom pada FPGA. Selain itu pada
percobaan ini menggunakan clockdiv constant div:
integer:=2500000. Penggunaan clock div ini bertujuan agar
pada saat kotak bergerak,gerakan tersebut dapat teramati oleh
pengamat.
Untuk membuat kotak dapat di geser digunakan assigmen
pin planer pada push bottom yaitu sebagai berikut :
Gambar 15. Script pembuatan kotak PIN_R22 => ke kiri
PIN_R21 => ke atas
Konstanta 10 dan 59 diatas merupakan nilai-nilai pixel yang PIN_T22 => ke kanan
membatasi kotak yang akan dibuat. Sedangkan untuk PIN _T21 => ke bawah
membuat warna kotak tersebut menjadi merah dan Selain menggunakan inputan push bottom digunakan juga
backroundnya berwarna putih digunakan algoritma sebagai inputan SW (0) pada i_K_BT untuk mengatur kecepatan dari
berikut : kotak tersebut. Perhatikan potongan algoritma berikut :

IF clock40hz'event and clock40hz = '1' THEN


IF i_K_BT = '0' THEN
Gambar 16. Algoritma pemberian warna KECEPATAN := 2;
ELSE
KECEPATAN := 100;
Dari semua color_rom_vhd yang telah dimodifikasi seperti END IF;
diatas akan menghasilkan keluaran sebagai berikut : END IF;

Dari kode diatas dapat lihat bahwa kecepatan kotak akan


berubah ketika logika bernilai 1 atau 0. Perubahan nilai logika
ini direpresentasikan menggunaan SW[0] pada FPGA. Dimana
ketika sinyal berlogika 0 maka kecepatan bujur sangkar akan 2
kali lipat kecepatanya sedangkan ketika sinyal berlogika 1
maka kecepatanya akan menjadi 100 kali lipat. Berikutnya
adalah script pergeseran kotak yaitu sebagai berikut :

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
Gambar 17. Hasil pada Display LCD percobaan 2
= '1' THEN
BATASATAS := BATASATAS - KECEPATAN; -
--Arah Naik
Gambar diaas menunjukan VGA melakukan Proses scanning BATASBAWAH := BATASBAWAH -
untuk pemberian warna sama seperti pada percobaan 1, yaitu KECEPATAN;
pertama-tama diberi warna mulai dari koordinat (10,10)
dilanjutkan sampai (10,59). Selanjutnya diikuti pewarnaan IF BATASATAS <= 0 THEN
setiap baris mulai dari pixel baris 10 sampai pixel baris ke 59. BATASATAS := 0;
Selain dari koordinat tersebut maka akan berwarna warna BATASBAWAH := 49;
putih. 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
BATASATAS := BATASATAS + KECEPATAN;
---Arah Turun
BATASBAWAH := BATASBAWAH +
KECEPATAN;

IF BATASBAWAH >= 479 THEN


Berikut adalah hasil implementasi yang dilakukan dengan
BATASBAWAH := BATASBAWAH + KECEPATAN; meggerakan kotak kearah kanan :
IF BATASBAWAH >= 479 THEN
BATASATAS := 479 -49;
BATASBAWAH := 479;
END IF;

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
BATASKANAN := BATASKANAN +
KECEPATAN; ---Arah kanan
BATASKIRI := BATASKIRI + KECEPATAN;

IF BATASKANAN >= 639 THEN


BATASKANAN := 639;
BATASKIRI := 639 -49;
END IF; Gambar 20 . Hasil implementasi percobaan 3

ELSIF clock40hz'event and clock40hz = '1' AND


i_M_US = '1' AND i_K_US = '1' AND i_H_US = '1' Percobaan 3 ini bila di gambarkan dalam bentuk FSM akan di
AND i_M_BT = '0' THEN peroleh FSM sebagai berikut :
BATASKANAN := BATASKANAN -
KECEPATAN; ---Arah Kiri
BATASKIRI := BATASKIRI - KECEPATAN;

IF BATASKIRI <= 0 THEN S5


BATASKIRI := 0;
BATASKANAN := 49;
END IF;

ELSE

BATASKIRI := BATASKIRI;
BATASKANAN := BATASKANAN; S4 S1 S2
BATASBAWAH := BATASBAWAH;
BATASATAS := BATASATAS;

Gambar 19. Script untuk mengatur pergeseran percobaan 3

Perhatikan script diatas karena pada percobaan ini


menggunakan FPGA dengan sifat active low maka ketika
berlogika 0 pada keadaan sebenarnya adalah berlogika 1. Kita S3
lihat pada bagian script paling atas yaitu pada saat i_M_US
berlogika 0 atau push bottom key (1) di tekan maka kotak
akan bergerak keatas. Begitu juga pada saat i_k_US, I_H_US
,dan I_M_BT,berlogika 0 atau push bottom key (3), key( 2), Gambar 21. FSM percobaan 3
dan key(1) ditekan maka kotak akan bergerak
kebawah,kekanan dan kekiri. Namun kecepatan pergeseran
kotak tersebut mengikuti sesuai dengan inputan SW[0] yang di
berikan. Kemudian agar kotak tersebut tidak keluar dari layar S1 dalam FSM diatas menunjukan state pada saat kotak dalam
LCD diberikan batasan-batasan yaitu untuk pergerakan keatas keadaan diam S2, S3,S4, dan S5 berlogika ‘1’ atau belum push
BATASATAS := 0; BATASBAWAH := 49,pergerakan bottom ditekan . karena menggunakan active low maka pada
kebawah BATASATAS := 479 -49; BATASBAWAH := 479;, saat belum ditekan berlogika 1. Kemudian pada saat S2,
pergerakan kekanan BATASKANAN := 639;BATASKIRI := S3,S4, dan S5 berlogika ‘0’ atau push bottom di tekan maka
639 -49;, dan untuk pergerakan kekiri BATASKIRI := S2 adalah kanan,S3 adalah bawah, S4 adalah kiri dan S5
0;BATASKANAN := 49; adalah atas.
V. SIMPULAN
 Dalam melakukan implementasi rangkaian skuensial
kedalam FPGA dapat dilakukan dengan berbagai cara
salahsatunya adalah dengan menggunakan modul VGA
dimana output yang dikeluarkannya berupa tampilan pada
disply LCD.
 VGA adalah sebuah interface standar yang dapat
digunakan untuk menghasilkan suatu tampilan pada
Display LCD. VGA memiliki beberapa jenis sinyal yaitu
sinyal RGB, sinyal Horizontal Sync, dan sinyal Vertikal
Sync ,ketiga sinyal ini digunakan dalam praktikum modul
ini.
 Pada modul ini implementasi dilakukan untuk membuat
objek kotak yang dapat diubah-ubah ukuranya dan dapat
digerakan keatas,kekiri,kekanan dan kebawah sesuai
keinginan. Dalam impelmentasi ini digunakan beberapa
input seperti Switch untuk mengaktifkan display dan Push
Button untuk menggerakan bujur sangkat ke empat arah
yang berbeda selain itu juga digunakan counter clock
yang bertujuan agar pergerakan benda dapat diamati atau
terlihat..

REFERENSI
[1]. Brown, Stephen et ZvonkoVranesic, Fundamentals of
Digital Circuit with VHDL Design 3. McGraw-Hill, USA,
2009.
[2]. Brian Holdsworth and Clive Woods, Digital Logic Design
Fourth Edition, N.wnes, 2002.
[3]. Mervin T Hutabarat, Praktikum Sistem Digital,
Laboratorium Dasar Teknik Elektro ITERA, Lampung,
2017.
[4]. http://id.wikipedia.org/wiki/VGA, 22 November 2017,
14:35.

Anda mungkin juga menyukai