Professional Documents
Culture Documents
Rangkaian
digital
adalah
rangkaian yang paling umum dipakai
pada kehidupan kita sehari-hari akibat
kapabilitas dalam melakukan modifikasi
rangkaian
dibandingkan
rangkaian
analog.
Dalam
rangkaian
digital
memepunyai control, jalur data, dan
system itu sendiri. Dengan adanya
ketiga hal tersebut mempermudah kita
dalam implementasi rangkaian digital ke
dunia nyata. Selain itu rangkaian digital
ini masih bias dikolaborasikan dengan
beberapa sistem pendukung lainnya.
Prinsip Kerja
Rangkaian sekuensial memiliki
prinsip kerja yang berbeda dengan
rangkaian kombinasional. Keluaran
1. PENDAHULUAN
Pada
praktikum
ini
praktikan
diharapkan dapat membuat suatu sistem
digital dengan menggunakan semua
bahasan yang telah ada pada modul
modul praktikum sebelumnya. Adapun
tujuan
dari
praktikum
ini
adalah
praktikan dapat menspesifikasikan suatu
sistem digital sederhana, membagi
sistem menjadi satu atau lebih jalur data
dan kendali, mendesain jalur data untuk
sistem, mendesain jalur kendali untuk
sistem, mengintegrasikan jalur data dan
kendali
ke
dalam
sistem
secara
keseluruhan, melakukan tes menyeluruh
terhadap sistem, mengimplementasikan
sistem digital menggunakan FPGA dan
komponen tambahan yang diperlukan ,
serta menguji dan menganalisa sistem
yang sudah dibangun.
2. STUDI PUSTAKA
2.1Rangkaian Sekuensial
Rangkaian sekuensial adalah
rangkaian yang mempunyai output
suatu
rangkaian
sekuensial
hanya
tergantung
saluran
masukannya,
tergantung
dari
dari
tidak
kondisi
tetapi
kondisi
juga
keluaran
2.3
VGA
currentstate
Mengimpementasikan ke FPGA
dan LCD (VGA)
State
counte
r
State
pilih
waktu
nextstate
X=0
X=1
Pilih waktu
Pilih waktu
Counter
counter
counter
Pilih waktu
Nilai output tergantung dari switch.
SW 0 sampai 5.
Untuk temperature memiliki
beberapa state, yaitu untuk proses
increment dan proses decrement
currentstate
Std
Inc
Dec
banding
nextstate
00
01
std
dec
std
D
std
banding
std
dec
11
D
D
D
D
10
inc
Banding
D
inc
color_rom_vhd
Pengubahan pengubahan yang
dilakukan :
ENTITY color_rom_vhd
(
selector_up:
DOWNTO 0);
selector_down:
DOWNTO 0);
IS PORT
IN
IN
STD_LOGIC_VECTOR(1
STD_LOGIC_VECTOR(1
i_pixel_column: IN STD_LOGIC_VECTOR( 9
DOWNTO 0 );
i_pixel_row
:
STD_LOGIC_VECTOR( 9 DOWNTO 0 );
IN
o_red
7 DOWNTO 0 );
: OUT STD_LOGIC_VECTOR(
o_green
7 DOWNTO 0 );
: OUT STD_LOGIC_VECTOR(
o_blue
:
STD_LOGIC_VECTOR( 7 DOWNTO 0 ));
END color_rom_vhd;
OUT
behavioral
constant block_top
OF
color_rom_vhd
:integer:=9;
:integer:=4;
signal blockB
:std_logic;
'0';
END IF;
Pada
bagian
ini
diproses
untuk
pemberian warna, jika berada pada
batas batas yang telah ditentukan,
maka sinyal untuk memberi warna akan
bernilai 1, jika tidak maka 0.
:integer:=329;
signal blockA
blockB <=
IF
(blockA = '1' AND selector= "00") THEN
o_red <= X"FF"; o_green <= X"FF"; o_blue <=
X"FF";
ELSE
BEGIN
PROCESS(i_pixel_row,i_pixel_column,
red,green,black,white)
BEGIN
IF ((i_pixel_row > block_top)
(i_pixel_row
<
block_bottom)
)
((i_pixel_column
>=
blockA_left)
(i_pixel_column < blockA_right)
)
blockA <= '1';
ELSE
blockA <=
AND
AND
AND
THEN
'0';
Pengubahan
dilakukan
END IF;
IF
((i_pixel_row
>
block_top)
(i_pixel_row
<
block_bottom)
)
((i_pixel_column
>=
blockB_left)
(i_pixel_column < blockB_right)
)
blockB <= '1';
display_vhd
AND
AND
AND
THEN
LIBRARY
USE
pengubahan
IEEE;
IEEE.STD_LOGIC_1164.ALL;
yang
USE
IEEE.STD_LOGIC_ARITH.ALL;
SIGNAL blue_on
USE
IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY display_vhd
IS
COMPONENT vga
PORT(
: STD_LOGIC;
IS
PORT(
i_clk
: IN STD_LOGIC;
selector:
DOWNTO 0 );
IN
STD_LOGIC_VECTOR(
OUT
VGA_R
DOWNTO 0 );
STD_LOGIC_VECTOR(
VGA_G
DOWNTO 0 );
OUT
STD_LOGIC_VECTOR(
VGA_B
DOWNTO 0 );
OUT
STD_LOGIC_VECTOR(
i_clk
IN
STD_LOGIC;
i_red
IN
STD_LOGIC;
i_green
IN
STD_LOGIC;
i_blue
IN
STD_LOGIC;
o_red
OUT
STD_LOGIC;
o_green
OUT
STD_LOGIC;
o_blue
OUT
STD_LOGIC;
VGA_HS
: OUT STD_LOGIC;
o_horiz_sync :
OUT
STD_LOGIC;
VGA_VS
: OUT STD_LOGIC;
o_vert_sync
OUT
STD_LOGIC;
VGA_CLK
: OUT STD_LOGIC;
VGA_BLANK
: OUT STD_LOGIC);
o_pixel_row
9 DOWNTO 0 );
END display_vhd;
Pengubahan
pada
bagian
ini
:
ditambahkan selector seperti pada
color_rom_vhd.
ARCHITECTURE behavioral OF display_vhd
OUT
STD_LOGIC_VECTOR(
o_pixel_column: OUT
9 DOWNTO 0 ));
STD_LOGIC_VECTOR(
END COMPONENT;
IS
green:
STD_LOGIC_VECTOR
(5
DOWNTO
IS
PORT(
STD_LOGIC_VECTOR
(7
SIGNAL green_color:
DOWNTO 0);
STD_LOGIC_VECTOR
(7
SIGNAL
blue_color:
DOWNTO 0);
STD_LOGIC_VECTOR
(7
SIGNAL
pixel_row:
DOWNTO 0);
STD_LOGIC_VECTOR
SIGNAL pixel_column
DOWNTO 0);
:STD_LOGIC_VECTOR
SIGNAL
COMPONENT color_rom_vhd
red_on
: STD_LOGIC;
(9
(9
selector :
DOWNTO 0 );
IN
STD_LOGIC_VECTOR(
i_pixel_column : IN STD_LOGIC_VECTOR(
9 DOWNTO 0 );
i_pixel_row : IN STD_LOGIC_VECTOR( 9
DOWNTO 0 );
o_red
DOWNTO 0 );
o_green:
DOWNTO 0 );
o_blue:
DOWNTO 0 ));
END COMPONENT;
OUT
STD_LOGIC_VECTOR(
OUT
STD_LOGIC_VECTOR(
STD_LOGIC_VECTOR(
OUT
END IF;
IF (green_on = '1'
green;
vga_driver0 : vga
PORT MAP (
=> i_clk,
i_red
=> '1',
i_green
=> '1',
i_blue
=> '1',
o_red
=> red_on,
o_green
=> green_on,
o_blue
=> blue_on,
o_horiz_sync
=> VGA_HS,
o_vert_sync
=> VGA_VS,
o_pixel_row
=> pixel_row,
o_pixel_column
=> pixel_column);
IF (blue_on = '1'
ELSE VGA_B <=
blue;
"000000";
END IF;
END PROCESS;
END behavioral;
top_level_vhd
ENTITY top_level_vhd
color_rom0 : color_rom_vhd
IS
PORT(
PORT MAP (
selector
=> selector,
i_pixel_column
=> pixel_column,
i_pixel_row
=> pixel_row,
o_red
=> red_color,
o_green
=> green_color,
o_blue
=> blue_color);
<= red_color
CLOCK_50
: IN STD_LOGIC;
selector_up: IN STD_LOGIC_VECTOR( 1
DOWNTO 0 );
selector_down: IN STD_LOGIC_VECTOR( 1
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;
(7 DOWNTO 2) ;
"000000";
END IF;
i_clk
red
PROCESS(red_on,green_on,blue_on,red,green,b
lue)
ARCHITECTURE
IS
BEGIN
IF (red_on = '1'
ELSE
VGA_R <=
red;
behavioral
COMPONENT display_vhd
IS
OF
top_level_vhd
PORT(
: IN STD_LOGIC;
VGA_BLK
selector_up: IN STD_LOGIC_VECTOR( 1
DOWNTO 0 );
selector_down: IN STD_LOGIC_VECTOR(
1 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);
END COMPONENT;
: OUT STD_LOGIC;
LEDRED
DOWNTO 0 );
: OUT STD_LOGIC_VECTOR( 9
GPIO_1
DOWNTO 0 );
: OUT STD_LOGIC_VECTOR( 35
HEX0
downto 0);
HEX1:
downto 0)
OUT
OUT
STD_LOGIC_VECTOR
STD_LOGIC_VECTOR
(6
(6
HEX2
downto 0);
OUT
STD_LOGIC_VECTOR
(6
HEX3
downto 0));
OUT
STD_LOGIC_VECTOR
(6
BEGIN
map
end temperatur;
module_vga : display_vhd
PORT MAP (
i_clk
=> CLOCK_50,
selector_up=>selector_up,
selector_down =>selector_downVGA_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
);
LED<="0000000000";
LEDR<=LED;
END behavioral;
signal maxcount
:integer:=32;
temperatur.vhd
signal mincount
:integer:=16;
signal pilihan1
downto 0);
:std_logic_vector(1
:std_logic_vector(1
entity temperatur is
port (clock_in : in std_logic;
clock_out
: buffer std_logic;
signal pilihan2
downto 0);
i_tombol1
: IN STD_LOGIC;
signal k
:integer;
i_tombol2
: IN STD_LOGIC;
signal H0
0);
:std_logic_vector(3
downto
signal H1
0);
:std_logic_vector(3
downto
signal H2
0);
:std_logic_vector(3
downto
signal H3
0);
:std_logic_vector(3
downto
VGA_red :
downto 0);
out
std_logic_vector
(5
out
std_logic_vector
(5
signal satuan
:integer;
signal puluhan
:integer;
:in std_logic;
: OUT STD_LOGIC;
VGA_VS
: OUT STD_LOGIC;
VGA_CLK
: OUT STD_LOGIC;
VGA_BLANK
: OUT STD_LOGIC;
GPIO_0
0 );
LEDR
));
end component;
);
end component;
component double7seg is
BEGIN
port (
C1:clockdiv
map(CLK=>clock_in,DIVOUT=>clock_out);
in_1
in_2
in_3
downto 0);
:in
std_logic_vector(3
in_4
downto 0);
:in
std_logic_vector(3
out_1
out_2
out_3
out_4
port (
IN
STD_LOGIC_VECTOR(
=>pilihan2,
VGA_R
=>VGA_red,
VGA_G
=>VGA_green,
VGA_B
=>VGA_blue,
VGA_HS
=>VGA_hor,
VGA_VS
=>VGA_vert,
VGA_CLK
=>VGA_CLOCK,
VGA_BLANK
=>VGA_BLK,
GPIO_0
=>GPIO_1,
LEDR
=>LEDRED
);
selector_up
:IN
STD_LOGIC_VECTOR( 1 DOWNTO 0 );
selector_down
DOWNTO 0 );
=>pilihan1,
selector_down
component top_level_vhd is
: IN STD_LOGIC;
=>clock_in,
selector_up
end component;
CLOCK_50
port
when '0'=>
out_2=>HEX1,
out_3=>HEX2,
pilihan1<="11";
out_4=>HEX3
);
pilihan1<="10";
end if;
end structural;
process(H0,H1,H3,H2,satuan,puluhan)
begin
H0<=std_logic_vector(to_unsigned(satuan,4))
;
H1<=std_logic_vector(to_unsigned(puluhan,4)
);
H2<="0000";
H3<="0000";
end process;
timer
entity timer is
port(clock_in
:in std_logic;
:in std_logic;
counter
:in std_logic;
in_time
downto 0);
:in
std_logic_vector(5
HEX0
downto 0);
:out
std_logic_vector(6
HEX1
downto 0);
:out
std_logic_vector(6
HEX2
downto 0);
:out
std_logic_vector(6
component double7seg is
std_logic_vector(3
:out
std_logic_vector(6
port(in_1
downto 0);
:in
HEX3
downto 0)
in_2
downto 0);
:in
std_logic_vector(3
in_3
downto 0);
:in
std_logic_vector(3
in_4
downto 0);
:in
std_logic_vector(3
out_1
downto 0);
:out
std_logic_vector(6
out_2
downto 0);
:out
std_logic_vector(6
out_3
downto 0);
:out
std_logic_vector(6
out_4
downto 0));
:out
std_logic_vector(6
);
end timer;
end component;
signal t_minute
:integer;
signal t_hour
:integer;
signal count_minute
:integer:=t_minute;
begin
clock:clockdiv
map(CLK=>clock_in,DIVOUT=>clock_out);
port
signal count_hour
:integer:=t_hour;
process(t_hour,t_minute,temp_hour,temp_minu
te)
begin
:executionstage:=s1;
signal nextstate
:executionstage;
t_minute<=to_integer(unsigned(temp_minute))
;
end process;
process(currentstate,mode,in_time,start_cou
nt)
:std_logic;
when s1=>
start_count<='0';
if mode='1' then
others
=>
else
if start_count='1' then
end case;
if count_minute>=0 then
end process;
count_minute<=count_minute1;
--adding clock divider
elsif count_minute<=0 then
component clockdiv is
count_hour<=count_hour-1;
port(CLK
:in std_logic;
count_minute<=59;
end component;
and
count_hour<=0;
count_minute<=0;
end if;
end if;
end if;
end if;
end process;
end if;
begin
end process;
if start_count='0' then
H0<=std_logic_vector(to_unsigned(t_minute
mod 10,4));
H1<=std_logic_vector(to_unsigned(t_minute /
10,4));
H2<=std_logic_vector(to_unsigned(t_hour mod
10,4));
H3<=std_logic_vector(to_unsigned(t_hour
10,4));
=>H0,
in_2
=>H1,
in_3
=>H2,
in_4
=>H3,
out_1
=>HEX0,
out_2
=>HEX1,
out_3
=>HEX2,
out_4
=>HEX3
);
masing
temperatur dan timer berjalan
dengan baik.
Untuk timer, count down berjalan
dengan baik. Untuk memulai
count down tekan push button
paling kiri, untuk reset juga
dengan menekan push button
paling kiri.
Untuk
temperatur,
untuk
menaikkan temperatur dilakukan
dengan menekan push button
paling kiri dan pada LCD kotak
sebelah kiri akan berwarna hijau
jika masih berada di dalam range
(16-32) dan akan berwarna
merah jika sudah melebihi 32.
Untuk
penurunan
temperatur
dilakukan dengan menekan push
button paling kiri kedua (key2)
dan akan berwarna hijau jika
masih berada dalam range. Untuk
indikator jika melewati range
(warna merah) masih belum
dapat berjalan sehingga jika
melewati range tetap berwarna
putih.
DAFTAR PUSTAKA
[1]http://sweetydyah.blogspot.com/2009
/05/rangkaian-sekuensial.html
end behave;