MOD DISPLAY
L 5 PERA PERANC NCAN ANGA GAN N DAN DAN IMPL IMPLEM EMEN ENTA TASI CD MENGGUNAKAN MODUL VGA PADA FPGA
Brian Radhitya (13213102) Asisten: Adityo Prabowo / 13211106 Tanggal Percobaan: 27/11/2014 EL2102-Praktikum Sistem Digital Laboratorium Dasar Teknik Elektro - Sekolah Teknik Elektro dan Informatika ITB
Abstrak
Dala Dalam m modul odul kal kali ini ini total otal tiga iga per percc baan yang dikerjakan. Percobaan ya yang pe pertama ad adalah membuat bendera merah putih pada LCD. Kemudian dilanj tkan dengan membuat buju bujurr sang sangka karr dan perc percob obaa aann terakhir membuat bujur sang sangka karr yyan angg dap dapat at berg berger erak ak.. Se Se ua rancangan dalam percobaan dibuat dengan metode sekuensial dalam modul VGA pada FPGA. Kemudian ke uarannya dihubungkan dengan LCD.
dan dan kemb kembal alii ke kiri kiri at at s ketika sudan mencapai pixel terakhir. Gambar berikut ini menunjukkan proses scanning yang te jadi:
Kata kunci: LCD, VGA, FPGA. 1.
PENDAHULUAN
Rangkaian logika sekue sial merupakan rangkaian logika yang kelua annya bergantung pada perilaku rangkaian sebel mnya. Pada modul sebelumnya, telah dilakukan percob percobaan aan mengena mengenaii rangkaia rangkaia logika sekuensial. Pada percobaa baan ini akan kan dilak ukan implementasi rangkaian logika sekuensial pada board FPGA dengan keluaran keluaran display display LCD. Semua percobaan dalam dalam modul modul ini ini mengguna menggunaka ka modul VGA pada boa board FPGA. Percoba obaan-perco aan tersebut antara lain lain membua membuatt bendera bendera mera merah putih, membuat bujur sangkar dan membuat ujur sangkar yang dapat bergerak. Pada Pada lapo lapora ran n ini ini akan akan dipa dipapa parr an teori dan rumus yang mendasari percobaan, me todologi praktkum, hasil percobaan beserta analisisnya, serta kesimp kesimpula ulan n berdasar berdasarkan kan anali analissis yang telah dibuat. 2.
S TUDI PUSTAKA
Video Graphics Array masih menjadi interface yang popular untuk sebuah t mpilan. Salah satu perangkat yang menggunakan interface ini adalah LCD. Interface ke VGA me ggunakan 2 jenis sinyal, yaitu : sinyal warna (merah, hijau, dan bir biru) da dan si sinya nyal si sinkron (ho (horriz ntal dan vertikal). Pada percobaan kali ini digu resolusi 640 x 480 pixel dan m rate lebih dari 60 Hz. Refresh karena karena pada pada range range kura kurang ng da dapat dapat melih melihat at adany adanyaa fli flicke cke berawal berawal dari dari kiri kiri atas atas ke kana kana
akan LCD dengan nggunakan refresh rate ini digunakan i 30-60Hz manusia . Proses scanning lalu ke kiri bawah
Sinyal RGB keluaran F GA bersifat digital. Chip DAC mengubah sinyal digital ke analog. Sinyal sinkronisasinya pun iubah menjadi analog. Sete Setela lah h diub diubah ah men menja ja i analog barulah sinyal dapat dapat ditamp ditampilk ilkan an pad LCD. Gambar di bawah ini menunjukkan blok d iagram dari FPGA hingga ke monitor LCD:
[1] 3.
METODOLOGI
Dala Dalam m mod modul ul ini, ini, al al t dan komponen yang digunakan adalah kom uter yang telah terinstal software Altera Quartus®, monitor LCD, FPGA development board tipe ALTERA DE1, dan kabel downloader USB-Blast r. Langkah percobaanperc percob obaa aan n akan akan dij dijel elaask n pada subbab di bawah. 3.1
PERCOBAAN 1
Berikut ini adalah percobaan pertama: 1.
langkah-langkah
dalam
Membuat Membuat folde folder sebagai direktori kerja baru baru.. Kemud Kemudia ia meng-copy file vga.vhd, pll_vhd.vhd, display_vhd.vhd, dan color_rom_vhd. hd ke folder yang telah
Laporan Laporan Prakt Praktikum ikum - Labora Laboratori torium um Das Das r Teknik Elektro – STEI ITB
1
dibuat. Source code masing-masing file ditunjukkan pada bagian Lampiran. 2.
Memodifikasi file color_rom_vhd.vhd.
3.
Menjalankan program Altera Quartus® kemudian membuat project baru. Pada percobaan ini, file yang digunakan sebagai top level entity adalah display_vhd.vhd.
4.
4.
Setelah itu dilakukan compile.
5.
Setelah compile berhasil, didownload ke FPGA.
6.
Kemudian menghubungkan port VGA FPGA dengan monitor LCD.
3.2
6.
program
Kemudian menghubungkan port VGA FPGA dengan monitor LCD.
H ASIL DAN A NALISIS
Pada bagian ini akan dijelaskan hasil percobaan dan analisis dari hasil percobaan tersebut. 4.1
PERCOBAAN 1
Pada percobaan ini, praktikan merancang sistem yang diimplementasikan pada FPGA dan memberikan keluaran bendera merah putih pada monitor LCD. Berikut ini adalah keluaran pada monitor LCD.
PERCOBAAN 2
1.
Membuat folder sebagai direktori kerja baru. Kemudian meng-copy file top_level_vhd.vhd, vga.vhd, pll_vhd.vhd, display_vhd.vhd, dan color_rom_vhd.vhd ke folder yang telah dibuat. Source code masing-masing file ditunjukkan pada bagian Lampiran.
2.
Memodifikasi file color_rom_vhd.vhd.
3.
Menjalankan program Altera Quartus® kemudian membuat project baru. Pada percobaan ini, file yang digunakan sebagai top level entity adalah top_level_vhd.vhd.
4.
Setelah itu dilakukan compile.
5.
Setelah compile berhasil, didownload ke FPGA.
6.
Kemudian menghubungkan port VGA FPGA dengan monitor LCD.
3.3
program
PERCOBAAN 3
1.
Membuat folder sebagai direktori kerja baru. Kemudian meng-copy file top_level_vhd.vhd, vga.vhd, pll_vhd.vhd, display_vhd.vhd, dan color_rom_vhd.vhd ke folder yang telah dibuat. Source code masing-masing file ditunjukkan pada bagian Lampiran. Memodifikasi file color_rom_vhd.vhd.
3.
Menjalankan program Altera Quartus® kemudian membuat project baru. Pada percobaan ini, file yang digunakan sebagai top level entity adalah top_level_vhd.vhd. Setelah itu dilakukan compile.
5.
Setelah compile berhasil, didownload ke FPGA.
Dari gambar di atas dapat dilihat bahwa sebagian monitor berwarna merah dan sebagian lagi berwarna putih. Hal ini direalisasikan dengan cara memberi warna merah pada pixel baris 0 sampai 239, dan memberi warna putih pada baris lainnya, seperti yang tertulis pada source code color_rom_vhd.vhd. Proses yang dilakukan modul VGA secara singkat adalah melakukan scanning mulai dari pixel (0,0) hingga pixel (239,639) dan memberikan warna merah pada pixel-pixel tersebut. Begitu juga dengan bagian yang berwarna putih. Source code untuk merepresentasikan logika tersebut adalah : IF (i_pixel_row < 239) THEN o_red <= X"FF"; o_green <= X"00";
2.
4.
Gambar 1 Hasil percobaan 1
o_blue <= X"00"; ELSE o_red <= X"FF"; o_green <= X"FF"; o_blue <= X"FF";
program
END IF;
Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB
2
Pada bagian source code, warna merah direpresentasikan dengan kode X”FF” untuk “o_red” dan X”00” untuk “o_green” dan “o_blue”. Kode tersebut merupakan representasi bilangan 11111111 (untuk FF) dan 00000000 (untuk 00) dengan hexadecimal. 4.2
PERCOBAAN 2
Pada percobaan ini akan dibuat bujur sangkar berukuran 50 x 50 pixel tampil pada monitor LCD. Titik-titik sudut bujur sangkar tersebut terletak pada (10,10), (10,59), (59,10) dan (59,59). Pada bagian source code color_rom_vhd.vhd, digunakan 2 konstanta yaitu “topleft” dan “bottomright”. Untuk membentuk bujur sangkar digunakan logika berikut, (i_pixel_row >= topleft) (i_pixel_row <= bottomright) (i_pixel_column >= topleft) (i_pixel_column <=bottomright)
AND AND AND
Logika tersebut menandai pixel-pixel yang terletak di antara bujur sangkar. Untuk memberi warna merah digunakan logika seperti pada percobaan satu. Untuk source code yang lebih lengka dapat dilihat pada bagian Lampiran. Hasil yang ditunjukkan pada monitor LCD adalah sebagai berikut:
kecepatan. Untuk dapat mengubah kecepatan, pada bagian source code dapat dilihat bahwa ketika switch bernilai logika 0, maka bujur sangkar akan bergerak 3 kali lebih cepat. Pada source code, i_M_US menyatakan tombol atas, i_K_US menyatakan tombol bawah, i_H_US menyatakan tombol kanan, dan i_M_BT menyatakan tombol kiri. Sementara i_H_BT menyatakan switch pengubah kecepatan. Pada source code juga digunakan 4 konstanta untuk menyatakan masing-masing titik sudut pada bujur sangkar. Jika salah satu tombol ditekan, titik-titik sudut akan bergerak ke arah yang bersesuaian dengan tombol. Ketika bujur sangkar sudah mencapai ujung monitor, bujur sangkar tersebut akan berhenti. Dalam source code, logika 0 berarti aktif. Hal ini terjadi karena pushbutton FPGA bersifat active low. 5.
K ESIMPULAN
Terdapat banyak interface I/O pada FPGA. Pada modul kali ini, dimanfaatkan salah satu interface yaitu VGA. Sinyal VGA yang terdiri dari sinyal RGB dan sinkronisasi yang berupa sinyal digital diubah menjadi sinyal analog dengan chip DAC. Setelah sinyal diubah barulah diimplementasikan pada monitor LCD. Pada percobaan pertama dibuat bendera merah putih untuk muncul pada layar monitor. Hasil yang ditunjukkan sesuai dengan yang diharapkan. Pada percobaan kedua dibuat bujur sangkar dengan ukuran 50 x 50 pixel yang juga menunjukkan hasil yang sesuai. Pada percobaan ketiga dibuat bujur sangkar yang dapat digerakkan sesuai tombol yang ditekkan. Selain itu kecepatan bujur sangkar juga dapat diubahubah dengan switch. D AFTAR PUSTAKA
[1]
Gambar 2 Hasil percobaan 2 4.3
PERCOBAAN 3
Mervin T. Hutabarat, Praktikum Sistem Digital , Laboratorium Dasar Teknik Elektro, ITB, 2014.
Pada percobaan ini sedikit dilakukan modifikasi pada modul percobaan 2. Bujur sangkar pada percobaan 2 akan dibuat bergerak pada percobaan ini dengan masukan berupa pushbutton dari user. Masukan tersebut dapat menggerakkan bujur sangkar ke arah atas, bawah, kiri dan kanan. Pada kode vhdl, tidak digunakan komponen clockdiv. Fungsi clockdiv digantikan oleh source code yang dapat dilihat pada bagian Lampiran. Masukan yang dapat diberikan user adalah 4 tombol arah serta 1 switch yang dapat mengatur Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB
3
L AMPIRAN
1.
o_red o_green o_blue
Source code vga.vhd
o_horiz_sync o_vert_sync
LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_ARITH.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY vga IS PORT( i_clk : STD_LOGIC; i_red : STD_LOGIC; i_green : STD_LOGIC; i_blue : STD_LOGIC; o_red : STD_LOGIC; o_green : STD_LOGIC; o_blue : STD_LOGIC; o_horiz_sync : STD_LOGIC; o_vert_sync : STD_LOGIC; o_pixel_row : STD_LOGIC_VECTOR( 9 DOWNTO 0 ); o_pixel_column : STD_LOGIC_VECTOR( 9 DOWNTO 0 )); END vga; ARCHITECTURE behavioral OF vga TH THB1 THB2 THD
: : : :
INTEGER INTEGER INTEGER INTEGER
:= := := :=
800; 660; 756; 640;
CONSTANT CONSTANT CONSTANT CONSTANT
TV TVB1 TVB2 TVD
: : : :
INTEGER INTEGER INTEGER INTEGER
:= := := :=
525; 494; 495; 480;
SIGNAL clock_25MHz SIGNAL horiz_sync SIGNAL vert_sync SIGNAL video_on SIGNAL video_on_v SIGNAL video_on_h SIGNAL h_count STD_LOGIC_VECTOR( 9 SIGNAL v_count STD_LOGIC_VECTOR( 9
: : : : : :
IN IN
IN OUT OUT OUT OUT OUT OUT OUT
<=
IF
AND
(clock_25MHz
=
clock_25MHz <= '1'; ELSE clock_25MHz <= '0'; END IF; END IF; END PROCESS; PROCESS BEGIN WAIT UNTIL( clock_25MHz'EVENT ) AND ( clock_25MHz = '1' ); IF ( h_count = TH-1 ) THEN h_count <= (others=>'0'); ELSE h_count <= h_count + 1; END IF; IF ( h_count <= THB2-1 ) AND (h_count >= THB1-1 ) THEN horiz_sync <= '0'; ELSE horiz_sync <= '1'; END IF; IF ( v_count >= TV-1 ) AND ( h_count >= 699 ) THEN v_count <= (others=>'0'); ELSE IF ( h_count = 699 ) THEN v_count <= v_count + 1; END IF; END IF;
STD_LOGIC; STD_LOGIC; STD_LOGIC; STD_LOGIC; STD_LOGIC; STD_LOGIC; :
DOWNTO 0 ); : DOWNTO 0 );
video_on_h
i_clk'EVENT
'0') THEN
IN
IF ( v_count <= TVB2-1 ) AND ( v_count >= TVB1-1 ) THEN vert_sync <= '0'; ELSE vert_sync <= '1'; END IF; IF
BEGIN video_on video_on_v;
<= horiz_sync; <= vert_sync;
PROCESS (i_clk) BEGIN IF i_clk='1' THEN
IS
CONSTANT CONSTANT CONSTANT CONSTANT
<= i_red AND video_on; <= i_green AND video_on; <= i_blue AND video_on;
AND
( h_count <= THD-1 ) THEN video_on_h <= '1'; o_pixel_column <=
h_count; ELSE video_on_h END IF;
<= '0';
Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB
4
END PROCESS; IF ( v_count <= TVD-1 ) THEN video_on_v <= '1'; o_pixel_row <= v_count; ELSE video_on_v <= '0'; END IF;
3.
LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_ARITH.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL;
END PROCESS; END behavioral; 2. Source
Code Percobaan 1
color_rom_vhd.vhd
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 STD_LOGIC; i_K_US STD_LOGIC; i_H_US STD_LOGIC; i_M_BT STD_LOGIC; i_K_BT STD_LOGIC; i_H_BT STD_LOGIC; i_pixel_column STD_LOGIC_VECTOR( 9 DOWNTO i_pixel_row STD_LOGIC_VECTOR( 9 DOWNTO o_red STD_LOGIC_VECTOR( 7 DOWNTO o_green STD_LOGIC_VECTOR( 7 DOWNTO o_blue STD_LOGIC_VECTOR( 7 DOWNTO END color_rom_vhd; ARCHITECTURE color_rom_vhd
: :
IN IN
:
IN
:
IN
:
IN
: :
IN IN
0 ); :
IN
0 ); :
OUT
0 ); :
OUT
:
OUT
0 );
behavioral
BEGIN PROCESS(i_pixel_row) BEGIN IF (i_pixel_row < 239) THEN o_red <= X"FF"; o_green <= X"00"; o_blue <= X"00"; ELSE o_red <= X"FF"; o_green <= X"FF"; o_blue <= X"FF"; END IF;
ENTITY display_vhd PORT( i_clk STD_LOGIC; i_M_US STD_LOGIC; i_K_US STD_LOGIC; i_H_US STD_LOGIC; i_M_BT STD_LOGIC; i_K_BT STD_LOGIC; i_H_BT STD_LOGIC; VGA_R STD_LOGIC_VECTOR( 5 VGA_G STD_LOGIC_VECTOR( 5 VGA_B STD_LOGIC_VECTOR( 5 VGA_HS STD_LOGIC; VGA_VS STD_LOGIC; VGA_CLK STD_LOGIC; VGA_BLANK STD_LOGIC); END display_vhd; ARCHITECTURE display_vhd IS
0 ));
IS
Source Code display_vhd.vhd Percobaan 1
OF
IS :
IN
:
IN
:
IN
:
IN
:
IN
:
IN
:
IN
:
OUT
:
OUT
:
OUT
:
OUT
:
OUT
:
OUT
:
OUT
DOWNTO 0 ); DOWNTO 0 ); DOWNTO 0 );
behavioral
SIGNAL red STD_LOGIC_VECTOR (5 DOWNTO SIGNAL green STD_LOGIC_VECTOR (5 DOWNTO SIGNAL blue STD_LOGIC_VECTOR (5 DOWNTO SIGNAL red_color STD_LOGIC_VECTOR (7 DOWNTO SIGNAL green_color STD_LOGIC_VECTOR (7 DOWNTO SIGNAL blue_color STD_LOGIC_VECTOR (7 DOWNTO SIGNAL pixel_row STD_LOGIC_VECTOR (9 DOWNTO SIGNAL pixel_column STD_LOGIC_VECTOR (9 DOWNTO SIGNAL red_on STD_LOGIC;
OF
: 0); : 0); : 0); : 0); : 0); : 0); : 0); : 0);
Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB
:
5
SIGNAL green_on STD_LOGIC; SIGNAL blue_on STD_LOGIC;
: :
COMPONENT vga IS PORT( i_clk : STD_LOGIC; i_red : STD_LOGIC; i_green : STD_LOGIC; i_blue : STD_LOGIC; o_red : STD_LOGIC; o_green : STD_LOGIC; o_blue : STD_LOGIC; o_horiz_sync : STD_LOGIC; o_vert_sync : STD_LOGIC; o_pixel_row : STD_LOGIC_VECTOR( 9 DOWNTO 0 ); o_pixel_column : STD_LOGIC_VECTOR( 9 DOWNTO 0 )); END COMPONENT; COMPONENT color_rom_vhd IS PORT( i_M_US STD_LOGIC; i_K_US STD_LOGIC; i_H_US STD_LOGIC; i_M_BT STD_LOGIC; i_K_BT STD_LOGIC; i_H_BT STD_LOGIC; i_pixel_column STD_LOGIC_VECTOR( 9 DOWNTO 0 i_pixel_row STD_LOGIC_VECTOR( 9 DOWNTO 0 o_red STD_LOGIC_VECTOR( 7 DOWNTO 0 o_green STD_LOGIC_VECTOR( 7 DOWNTO 0 o_blue STD_LOGIC_VECTOR( 7 DOWNTO 0 END COMPONENT;
IN IN IN OUT OUT OUT OUT OUT OUT
=> => => => => => => => =>
'1', '1', red_on, green_on, blue_on, VGA_HS, VGA_VS, pixel_row, pixel_column);
color_rom0 : color_rom_vhd PORT MAP ( i_M_US => i_M_US, i_K_US => i_K_US, i_H_US => i_H_US, i_M_BT => i_M_BT, i_K_BT => i_K_BT, i_H_BT => i_H_BT, i_pixel_column => pixel_column, i_pixel_row => pixel_row, o_red => red_color, o_green => green_color, o_blue => blue_color); red <= red_color (7 DOWNTO 2) ; green <= green_color(7 DOWNTO 2) ; blue <= blue_color (7 DOWNTO 2) ;
OUT PROCESS(red_on,green_on,blue_on,red,g reen,blue) BEGIN
:
IN
:
IN
:
IN
:
IN
:
IN
IF (red_on = '1' ) THEN VGA_R <= red; ELSE VGA_R <= "000000"; END IF; IF (green_on = '1' ) THEN VGA_G <= green; ELSE VGA_G <= "000000"; END IF;
IN
IF (blue_on = '1' ) THEN VGA_B <= blue; ELSE VGA_B <= "000000"; END IF;
:
IN
END PROCESS;
:
OUT
:
OUT
:
OUT
: :
IN
); ); END behavioral;
); ); ));
BEGIN vga_driver0 : vga PORT MAP ( i_clk i_red
IN
i_green i_blue o_red o_green o_blue o_horiz_sync o_vert_sync o_pixel_row o_pixel_column
4.
Source Code Percobaan 2
color_rom_vhd.vhd
LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_ARITH.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY color_rom_vhd PORT(
IS
=> i_clk, => '1', Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB
6
i_M_US STD_LOGIC; i_K_US STD_LOGIC; i_H_US STD_LOGIC; i_M_BT STD_LOGIC; i_K_BT STD_LOGIC; i_H_BT STD_LOGIC; i_pixel_column STD_LOGIC_VECTOR( 9 DOWNTO i_pixel_row STD_LOGIC_VECTOR( 9 DOWNTO o_red STD_LOGIC_VECTOR( 7 DOWNTO o_green STD_LOGIC_VECTOR( 7 DOWNTO o_blue STD_LOGIC_VECTOR( 7 DOWNTO END color_rom_vhd; ARCHITECTURE color_rom_vhd
:
IN
:
IN
:
IN
:
IN
:
IN
:
IN
:
IN
0 ); :
IN
:
OUT
:
OUT
0 ); 0 ); 0 ); : 0 ));
behavioral
OF
IS
BEGIN PROCESS(i_pixel_row,i_pixel_column) BEGIN IF (i_pixel_row >= topleft) AND (i_pixel_row <= bottomright) AND (i_pixel_column >= topleft) AND (i_pixel_column <=bottomright) THEN o_red <= X"FF" ; o_green <= X"00"; o_blue <= X"00"; ELSE o_red <= X"FF"; o_green <= X"FF"; o_blue <= X"FF"; END IF; END PROCESS; END behavioral;
Source Code Percobaan 2
ARCHITECTURE top_level_vhd
IS
behavioral
SIGNAL SIGNAL SIGNAL SIGNAL SIGNAL SIGNAL
STD_LOGIC; STD_LOGIC; STD_LOGIC; STD_LOGIC; STD_LOGIC; STD_LOGIC;
OF
OUT
CONSTANT topleft : integer := 10; CONSTANT bottomright : integer := 59;
5.
SW : IN 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 ); LEDR : OUT STD_LOGIC_VECTOR( 9 DOWNTO 0 )); END top_level_vhd;
top_level_vhd.vhd
LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_ARITH.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY top_level_vhd IS PORT( CLOCK_50 : IN STD_LOGIC;
M_US K_US H_US M_BT K_BT H_BT
: : : : : :
COMPONENT display_vhd IS PORT( i_clk : STD_LOGIC; i_M_US : STD_LOGIC; i_K_US : STD_LOGIC; i_H_US : STD_LOGIC; i_M_BT : STD_LOGIC; i_K_BT : STD_LOGIC; i_H_BT : STD_LOGIC; VGA_R : STD_LOGIC_VECTOR( 5 DOWNTO 0 ); VGA_G : STD_LOGIC_VECTOR( 5 DOWNTO 0 ); VGA_B : STD_LOGIC_VECTOR( 5 DOWNTO 0 ); VGA_HS : STD_LOGIC; VGA_VS : STD_LOGIC; VGA_CLK : STD_LOGIC; VGA_BLANK : STD_LOGIC); END COMPONENT;
IN IN IN IN IN IN IN OUT OUT OUT OUT OUT OUT OUT
BEGIN module_vga : display_vhd PORT MAP (
Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB
7
i_clk i_M_US i_K_US i_H_US i_M_BT i_K_BT i_H_BT VGA_R VGA_G VGA_B VGA_HS VGA_VS VGA_CLK VGA_BLANK
=> => => => => => => => => => => => => =>
CLOCK_50, M_US, K_US, H_US, M_BT, K_BT, H_BT, VGA_R, VGA_G, VGA_B, VGA_HS, VGA_VS, VGA_CLK, VGA_BLANK
); M_US K_US H_US M_BT K_BT H_BT
<= <= <= <= <= <=
SW(0) SW(1) SW(2) SW(3) SW(4) SW(5)
; ; ; ; ; ;
SIGNAL SIGNAL SIGNAL SIGNAL SIGNAL SIGNAL
SPEED : INTEGER := 0; clk : INTEGER := 0; COUNTERTOP : INTEGER := 10; COUNTERBOT : INTEGER := 59; COUNTERLEFT : INTEGER := 10; COUNTERRIGHT : INTEGER := 59;
SIGNAL M_TF1, M_TF2 STD_LOGIC; SIGNAL K_TF1, K_TF2 STD_LOGIC; SIGNAL H_TF1, H_TF2 STD_LOGIC; SIGNAL grid STD_LOGIC;
: : : :
BEGIN
END behavioral; 6. Source Code Percobaan 3
color_rom_vhd.vhd
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 STD_LOGIC; i_K_US STD_LOGIC; i_H_US STD_LOGIC; i_M_BT STD_LOGIC; i_K_BT STD_LOGIC; i_H_BT STD_LOGIC; CLOCK STD_LOGIC; i_pixel_column STD_LOGIC_VECTOR( 9 DOWNTO i_pixel_row STD_LOGIC_VECTOR( 9 DOWNTO o_red STD_LOGIC_VECTOR( 7 DOWNTO o_green STD_LOGIC_VECTOR( 7 DOWNTO o_blue STD_LOGIC_VECTOR( 7 DOWNTO
:
IN
:
IN
:
IN
:
IN
:
IN
:
IN
:
IN :
IN
0 ); :
IN
:
OUT
:
OUT
:
OUT
0 ); 0 ); 0 ); 0 ));
END color_rom_vhd; ARCHITECTURE color_rom_vhd
CONSTANT THD : INTEGER := 639; CONSTANT TVD : INTEGER := 479; CONSTANT divout : integer := 300000;
behavioral IS
OF
PROCESS(i_pixel_row,i_pixel_column, CLOCK, 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) BEGIN IF CLOCK'EVENT AND CLOCK = '1' THEN if (clk < divout) then clk <= clk +1; else IF i_H_BT = '1' THEN SPEED <= 1; ELSE SPEED <= 3; END IF; IF i_M_US = '0' AND i_K_US = '1' THEN IF (COUNTERTOP >= 0) AND (COUNTERTOP <= 479) THEN COUNTERTOP <= COUNTERTOP - SPEED; COUNTERBOT <= COUNTERBOT - SPEED; ELSE COUNTERBOT <= COUNTERBOT; COUNTERTOP <= COUNTERTOP; END IF; END IF; IF i_M_US = '1' AND i_K_US = '0' THEN IF (COUNTERBOT >= 0) AND (COUNTERBOT <= 479) THEN COUNTERTOP <= COUNTERTOP + SPEED; COUNTERBOT <= COUNTERBOT + SPEED; ELSE COUNTERBOT <= COUNTERBOT;
Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB
8
COUNTERTOP
<=
COUNTERTOP; END IF; END IF; IF i_H_US = '0' AND i_M_BT = '1' THEN IF (COUNTERRIGHT >= 0) AND (COUNTERRIGHT <= 639) THEN COUNTERLEFT <= COUNTERLEFT + SPEED; COUNTERRIGHT <= COUNTERRIGHT + SPEED; ELSE COUNTERLEFT <= COUNTERLEFT; COUNTERRIGHT <= COUNTERRIGHT; END IF; END IF; IF i_H_US = '1' AND i_M_BT = '0' THEN IF (COUNTERLEFT >= 0) AND (COUNTERLEFT <= 639) THEN COUNTERLEFT <= COUNTERLEFT - SPEED; COUNTERRIGHT <= COUNTERRIGHT - SPEED; ELSE COUNTERLEFT <= COUNTERLEFT; COUNTERRIGHT <= COUNTERRIGHT; END IF; END IF; clk <= 0; END IF; END IF; IF ((i_pixel_row > COUNTERTOP) AND (i_pixel_row < COUNTERBOT) AND (i_pixel_column >= COUNTERLEFT) AND (i_pixel_column < COUNTERRIGHT))THEN o_red <= X"FF"; o_green <= X"00"; o_blue <= X"00"; ELSE o_red <= X"FF"; o_green <= X"FF"; o_blue <= X"FF"; END IF; END PROCESS; END behavioral;
7.
Source Code display_vhd.vhd Percobaan 3
LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_ARITH.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY display_vhd PORT( i_clk STD_LOGIC; i_M_US STD_LOGIC; i_K_US STD_LOGIC; i_H_US STD_LOGIC; i_M_BT STD_LOGIC; i_K_BT STD_LOGIC; i_H_BT STD_LOGIC; VGA_R STD_LOGIC_VECTOR( 5 VGA_G STD_LOGIC_VECTOR( 5 VGA_B STD_LOGIC_VECTOR( 5 VGA_HS STD_LOGIC; VGA_VS STD_LOGIC; VGA_CLK STD_LOGIC; VGA_BLANK STD_LOGIC); END display_vhd; ARCHITECTURE display_vhd IS
IS IN
:
IN
:
IN
:
IN
:
IN
:
IN
:
IN
:
OUT
:
OUT
:
OUT
:
OUT
:
OUT
:
OUT
:
OUT
DOWNTO 0 ); DOWNTO 0 ); DOWNTO 0 );
behavioral
SIGNAL red STD_LOGIC_VECTOR (5 DOWNTO SIGNAL green STD_LOGIC_VECTOR (5 DOWNTO SIGNAL blue STD_LOGIC_VECTOR (5 DOWNTO SIGNAL red_color STD_LOGIC_VECTOR (7 DOWNTO SIGNAL green_color STD_LOGIC_VECTOR (7 DOWNTO SIGNAL blue_color STD_LOGIC_VECTOR (7 DOWNTO SIGNAL pixel_row STD_LOGIC_VECTOR (9 DOWNTO SIGNAL pixel_column STD_LOGIC_VECTOR (9 DOWNTO SIGNAL red_on STD_LOGIC; SIGNAL green_on STD_LOGIC; SIGNAL blue_on STD_LOGIC;
COMPONENT vga IS PORT( i_clk STD_LOGIC;
:
OF
: 0); : 0); : 0); : 0); : 0); : 0); : 0); : 0); : : :
:
IN
Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB
9
i_red
:
IN
i_green
:
IN
STD_LOGIC; STD_LOGIC; i_blue
:
IN
STD_LOGIC; o_red
:
OUT
o_green
:
OUT
o_blue
:
OUT
o_horiz_sync
:
OUT
o_vert_sync
:
OUT
o_pixel_row : STD_LOGIC_VECTOR( 9 DOWNTO 0 ); o_pixel_column : STD_LOGIC_VECTOR( 9 DOWNTO 0 )); END COMPONENT;
OUT
STD_LOGIC; STD_LOGIC; STD_LOGIC; STD_LOGIC; STD_LOGIC;
COMPONENT color_rom_vhd IS PORT( i_M_US STD_LOGIC; i_K_US STD_LOGIC; i_H_US STD_LOGIC; i_M_BT STD_LOGIC; i_K_BT STD_LOGIC; i_H_BT STD_LOGIC; CLOCK STD_LOGIC; i_pixel_column STD_LOGIC_VECTOR( 9 DOWNTO 0 i_pixel_row STD_LOGIC_VECTOR( 9 DOWNTO 0 o_red STD_LOGIC_VECTOR( 7 DOWNTO 0 o_green STD_LOGIC_VECTOR( 7 DOWNTO 0 o_blue STD_LOGIC_VECTOR( 7 DOWNTO 0 END COMPONENT;
:
IN
:
IN
:
IN
:
IN
:
IN
:
IN
:
=> pixel_row, => pixel_column);
color_rom0 : color_rom_vhd PORT MAP ( i_M_US => i_M_US, i_K_US => i_K_US, i_H_US => i_H_US, i_M_BT => i_M_BT, i_K_BT => i_K_BT, i_H_BT => i_H_BT, CLOCK => i_clk, i_pixel_column => pixel_column, i_pixel_row => pixel_row, o_red => red_color, o_green => green_color, o_blue => blue_color); red <= red_color (7 DOWNTO 2) ; green <= green_color(7 DOWNTO 2) ; blue <= blue_color (7 DOWNTO 2) ;
PROCESS(red_on,green_on,blue_on,red,g reen,blue) BEGIN IF (red_on = '1' ) THEN VGA_R <= red; ELSE VGA_R <= "000000"; END IF; IF (green_on = '1' ) THEN VGA_G <= green; ELSE VGA_G <= "000000"; END IF;
IN :
IN
);
IF (blue_on = '1' ) THEN VGA_B <= blue; ELSE VGA_B <= "000000"; END IF;
:
IN
:
OUT
END PROCESS;
:
OUT
END behavioral;
:
OUT
); ); ); ));
8.
Source Code Percobaan 3
top_level_vhd.vhd
LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_ARITH.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL;
BEGIN vga_driver0 : vga PORT MAP ( i_clk i_red i_green i_blue o_red o_green o_blue o_horiz_sync o_vert_sync
OUT
o_pixel_row o_pixel_column
=> => => => => => => => =>
i_clk, '1', '1', '1', red_on, green_on, blue_on, VGA_HS, VGA_VS,
ENTITY top_level_vhd IS PORT( CLOCK_50 : IN STD_LOGIC; SW : IN STD_LOGIC_VECTOR( 9 DOWNTO 0 ); KEY : IN STD_LOGIC_VECTOR( 3 DOWNTO 0 ); VGA_R : OUT STD_LOGIC_VECTOR( 5 DOWNTO 0 ); Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB
1 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 ); LEDR : OUT STD_LOGIC_VECTOR( 9 DOWNTO 0 )); END top_level_vhd; ARCHITECTURE top_level_vhd
IS
SIGNAL SIGNAL SIGNAL SIGNAL SIGNAL SIGNAL
STD_LOGIC; STD_LOGIC; STD_LOGIC; STD_LOGIC; STD_LOGIC; STD_LOGIC;
M_US K_US H_US M_BT K_BT H_BT
: : : : : :
behavioral
OF
i_H_US i_M_BT i_K_BT i_H_BT VGA_R VGA_G VGA_B VGA_HS VGA_VS VGA_CLK VGA_BLANK
=> => => => => => => => => => =>
H_US, M_BT, K_BT, H_BT, VGA_R, VGA_G, VGA_B, VGA_HS, VGA_VS, VGA_CLK, VGA_BLANK
); M_US K_US H_US M_BT K_BT H_BT
<= <= <= <= <= <=
KEY(0) ; KEY(1) ; KEY(2) ; KEY(3) ; SW(4) ; SW(5) ;
END behavioral;
COMPONENT display_vhd IS PORT( i_clk : STD_LOGIC; i_M_US : STD_LOGIC; i_K_US : STD_LOGIC; i_H_US : STD_LOGIC; i_M_BT : STD_LOGIC; i_K_BT : STD_LOGIC; i_H_BT : STD_LOGIC; VGA_R : STD_LOGIC_VECTOR( 5 DOWNTO 0 ); VGA_G : STD_LOGIC_VECTOR( 5 DOWNTO 0 ); VGA_B : STD_LOGIC_VECTOR( 5 DOWNTO 0 ); VGA_HS : STD_LOGIC; VGA_VS : STD_LOGIC; VGA_CLK : STD_LOGIC; VGA_BLANK : STD_LOGIC); END COMPONENT;
IN IN IN IN IN IN IN OUT OUT OUT OUT OUT OUT OUT
BEGIN module_vga : display_vhd PORT MAP ( i_clk => i_M_US => i_K_US =>
CLOCK_50, M_US, K_US, Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB
11