Anda di halaman 1dari 10

Percobaan IV

Rangkaian Logika Sekuensial


Andreas Juan Daniel Simorangkir (14S16060)
Tanggal Percobaan : 24/11/2017
[ELS2104] [Sistem Digital]
[Laboratorium Dasar Teknik Elektro] – Teknik Elektro
Institut Teknologi Del

Abstrak— On this practice we will discuss about sequential II. LANDASAN TEORETIS
logic sequence, at this lab we will try sequential circuit. The
fundamental difference between combinational and A. Rangkaian Logika Sekuensial
sequential circuits is the presence or absence of its memory
state. In this practice, there are 3 experiments. The first
experiment was requested to implement FSM to FPGA with
output to LED FPGA, both requested to implement VGA drive
module with input of FPGA as wide as 6 bit, lastly asked to
echo FSM module with VGA module.
This practice requires several tools, ie laptops already
installed xilllinx or quartus, LCD monitor, and FPGA
development board, power supply, and some connecting
cables. It is expected that we can design sequential circuits for
FPGA implementation, recognize and understand how to use
hierarchy in circuit design, and recognize and understand
how to use FPGA as a prototype system to verify circuit Rangkaian sekuensial adalah adalah rangkaian
functions. logika yang kondisi keluarannya dipengaruhi oleh masukan dan
keadaan keluaran sebelumnya atau dapat
Kata Kunci—circuits, implement, sequential. dikatakanrangkaian yang bekerja berdasarkan urutan waktu.
Ciri rangkaian logika sekuensial yang utama adalah adanya
jalur umpan balik (feedback) di dalam rangkaiannya.
I. PENDAHULUAN
Terdapat beberapa model yang digunakan untuk membantu
P ADA praktikum ini akan dipelajari mengenai rangkaian
logika sekuensial. Implementasi fungsi gerbang logika pada
rangkaian dapat dilakukan dengan berbagai cara, salah satunya
merancang rangkaian sekuensial. Salah satunya yang paling
banyak digunakan adalah Finite State Machine (FSM).
adalah rangkaian logika sekuensial. Berbeda dengan praktikum Dinamakan FSM karena jumlah state yang mungkin terbatas
sebelumnya yang menggunakan rangkaian logika dan rangkaian sekuensial bekerja mirip dengan mesin yang
kombinasional. Perbedaan yang mendasar dari rangkaian beroperasi dengan urutan state.
kombinasional dengan rangkaian sekuensial adalah, ada
tidaknya memori statenya. Keluaran rangkaian sekuensial
bergantung [ada state dan bergantung pada masukannya atau
hanya bergantung pada statenya.

Adapun tujuan dari praktikum ini adalah:


 Mendesain sekuensial rangkaian untuk implementasi
didalam FPGA.
 Mengenal dan memahami cara menggunakan hierarki
dalam desain rangkaian
 Mengenal dan memahami cara menggunakan FPGA
sebagai prototype system untuk memverifikasi fungsi
rangkaian.
B. Counter  Monitor LCD
Counter adalah rangkaian logika sekuensial yang menyimpan  Board FPGA tipe DE1
waktu dari suatu state, dan sering dikaitkan dengan sinyal  Power supply + kabel dan konektor lainnya
waktu. Secara singkat, counter berfungsi sebagai rangkaian  Kabel USB-Blaster
yang menghitung secara terurut, seperti 0,1,2,dst.
III. HASIL DAN ANALISIS
C. Finite State Machine (FSM) A. Tugas 1 : Implementasi Desain FSM Pada FPGA

Code yang digunakan untuk praktikum ini adalah:

library IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.std_logic_arith.all;
USE ieee.std_logic_unsigned.all;

entity tugasawal is
port ( CLK : IN std_logic;
DAYORNIGHT : in STD_LOGIC ;
TOMBOLDARURAT : in STD_LOGIC ;
LAMP : out STD_LOGIC_VECTOR (5
Finite State Machine adalah sebuah pemodelan komputasi DOWNTO 0));
matematika yang digunakan untuk mendesain rangkaian logika end tugasawal;
sekuensial maupun pemograman komputer.
architecture Behavioral of tugasawal is
Gambar diatas adalah representasi dari sebuah finite state TYPE executionStage IS (s1,s2,s3);
machine. Saat S1 diberikan logika 1, maka fungsi S1 akan SIGNAL currentstate, laststate: executionStage := s1;
kembali dijalankan, sedangkan saat logika S1 diberikan logika SIGNAL count : integer := 1;
0, maka dungsi S2 akan dijalankan. Demikian pula sat S2 begin
diberikan logika 1, terlihat bahwa fungsi S2 akan kembali PROCESS (CLK)
BEGIN
dijalankan, sedangkan saat diberikan logika 0, maka fungsi S1
IF (CLK'EVENT) AND ( CLK = '1' ) THEN
akan dijalankan.
CASE currentstate IS
WHEN s1 =>
D. Modul VGA Driver IF (TOMBOLDARURAT = '0') THEN
IF (DAYORNIGHT = '0') THEN
Modul VGA (Video Graphics Array)driver yang digunakan kali IF (count < 400000000 ) THEN
ini adalah sebuah modul yang merepresentasikan masukkan count <= count +1;
logika FPGAkedalam tampilan warna pada layar monitor LCD. LAMP <="100010";
Modul ini menerima masukkan port yang ingin dinyalakan, dan ELSIF (( count >=400000000) AND ( count
mengkonversikan masukkan menjadi warna pada layar. < 500000000)) THEN
count <= count + 1;
Gambar dibawah adalah contoh gambar state diagram FSM LAMP <="100010";
Mealy dan implementasinya dalam VHDL. ELSE
count <=1;
currentstate <=s2;
END IF;
ELSE
IF (count < 200000000 ) THEN
count <= count +1;
LAMP <="100010";
ELSIF (( count >=200000000) AND ( count
< 250000000)) THEN
State Diagram FSM Mealy count <= count + 1;
LAMP <="100010";
ELSE
count <=1;
Pada praktikum ini kita akan memerlukan beberapa alat dan currentstate <=s2;
bahan, yaitu: END IF;
 Laptop yang telah terinstall software xillinx END IF ;
ELSE
laststate <= currentstate; Diberikan masukan melalui Port MAP kepada counter waktu
currentstate <= s3; yang digunakan (Komponen Clockdiv). Kondisi
count <= 500000000; “CLK”EVENT and CLK = ‘1’ yang dipenuhi setiap kurang dari
END IF ; 1 sekon, dan variable hitung akan bertamabah nilai setiap 1
WHEN s2 => sekon.
IF (TOMBOLDARURAT = '0') THEN 2 kemungkinan, tombol DARURAT atau tombol
IF (DAYORNIGHT = '0') THEN DAYORNIGHT yang diaktifkan.
IF (count < 400000000 ) THEN
count <= count +1;
LAMP <="001100";
ELSIF (( count >=400000000) AND (
count < 500000000)) THEN
count <= count + 1;
LAMP <="001100";
ELSE
count <=1;
currentstate <=s1;
END IF;
ELSE
IF (count < 200000000 ) THEN
count <= count +1; Gambar ini merupakan sketsa FSM pada kasus ini. S1 S2 S3
LAMP <="001100"; dan S4 mempresentasikan kondisi mode darurat tak ditekan, S5
ELSIF (( count >=200000000) AND ( count dan S6 mempresentasikan saat mode darurat ditekan.
< 250000000)) THEN
count <= count + 1; Case pertama: Utara Selatan merah dan Timur Barat hijau
LAMP <="001100";
else
count <=500000000;
currentstate <=s1;
END IF;
END IF;
ELSE
laststate <= currentstate;
currentstate <= s3;
count <= 500000000;
END IF ;
WHEN s3 =>
IF (( count >=500000000) AND ( count <
100000000)) THEN
count <= count + 1;
LAMP <="010010";
ELSIF (( count >=100000000) AND (
count < 150000000)) THEN Case kedua : tombol darurat ditekan
count <= count + 1;
LAMP <="010010";
ELSIF (( count >=150000000) AND (
count < 200000000)) THEN
count <= count + 1;
LAMP <="010010";
ELSE
LAMP <="000000";
count <= 500000000;
currentstate <= laststate ;
END IF;
END CASE ;
END IF ;
END PROCESS;
end Behavioral;
B. Tugas II : Implementasi Modul VGA Driver
Pada percobaan yang kedua ini akan, code akan Berikutnya akan ditampilkan code untuk waktu penampilan
diimplementasikan ke LCD 1602. Code akan ditampilkan pada pada layar LCD:
layar LCD. Laptop/pc yang sudah kita coding akan
dihubungkan ke xillinx lalu dihubungkan ke LCD agar if m="000" then
hasilmnya dapat ditampilkan. LCD_Data<=cgram1(conv_integer(cnt1));
Hal yang diinginkan untuk ditampilkan adalah, Nama, Nim, elsif m="001"then
Prodi, Asal, dan Nama Cantik. LCD_Data<=cgram2(conv_integer(cnt1));
elseif m="010"then
Berikut adalah code nya : LCD_Data<=cgram3(conv_integer(cnt1));
elseif m="011"then
LCD_Data : out std_logic_vector(7 downto 0)); --?????? LCD_Data<=cgram4(conv_integer(cnt1));
end LCD1602; else
LCD_Data<=cgram5(conv_integer(cnt1));
architecture Behavioral of LCD1602 is end if;
type state is Current_State<=set_ddram;
(set_dlnf,set_cursor,set_dcb,set_cgram,write_cgram,set_dd when set_ddram=>
ram,write_LCD_Data);
signal Current_State:state; Pada percobaan yang kedua ini tidak dapat diimplementasikan,
type ram1 is array(0 to 30) of std_logic_vector(7 downto dikarenakan adanya kekurangan pada alat peragaan, dan waktu
0); yang kurang untuk mendapat giliran mengimplementasikan
type ram2 is array(0 to 30) of std_logic_vector(7 downto code ke LCD.
0);
type ram3 is array(0 to 30) of std_logic_vector(7 downto IV. SIMPULAN
0); Dari praktikum yang sudah dulakukan dapat kita beri
type ram4 is array(0 to 30) of std_logic_vector(7 downto kesimpulan:
0);
type ram5 is array(0 to 30) of std_logic_vector(7 downto  Rangkaian logika sekuensial bergantung pada memori state.
0);  Pada praktikum ini dilakukan implementasi yang
constant memanfaatkan finite state machine
cgram1:ram1:=(x"4E",x"41",x"4D",x"41",x"3A",x"41",x"4
 Dalam implementasi rangkaian gerbang logika sekuensial,
E",x"44",x"52",x"45",x"41",x"53",x"5F",x"53",x"49",x"4D
digunakan implementasi langsung ke FSM ke FPGA DE-1
",x"4F",x"52",x"41",x"4E",x"47",x"4B",x"49",x"52");
constant board.
cgram2:ram2:=(x"4E",x"49",x"4D",x"3A",x"31",x"34",x"5  Finite state machine dapat di implementasikan ke alat alat
3",x"31",x"36",x"30",x"36",x"30"); yang dapat membantu manusia, seperti lampu lalu lintas.
constant
cgram3:ram3:=(x"50",x"52",x"4F",x"44",x"49",x"3A",x"5 REFERENSI:
4",x"45",x"4B",x"4E",x"49",x"4B",x"20",x"45",x"4C",x"4 [1] Brian Holdsworth and Clive Woods, Digital Logic Design
5",x"4B",x"54",x"52",x"4F"); Fourth Edition, N.wnes, 2002
constant [2] R.H. Katz, Contemporary Logic Design Second Edition,
cgram4:ram4:=(x"41",x"53",x"41",x"4C",x"3A",x"4A",x"4 Pearson Prentince-Hall, NJ, 2005
1",x"4B",x"41",x"52",x"54",x"41"); [3] Stephen Brown And Zvonko Vranesic, Fundamentals of
constant Digital Logic with VHDL. Design Third Edition, McGraw
cgram5:ram5:=(x"4B",x"49",x"52",x"43",x"48",x"4F",x"46 Hill, san Francisco, 2009.
",x"46");
signal CLK1 : std_logic;
signal Clk_Out : std_logic;

signal LCD_Clk : std_logic;


signal m :std_logic_vector(1 downto 0);
Lampiran

1. Code untuk percobaan I


2. library IEEE;
3. USE IEEE.STD_LOGIC_1164.ALL;
4. USE IEEE.std_logic_arith.all;
5. USE ieee.std_logic_unsigned.all;
6.
7. entity tugasawal is
8. port ( CLK : IN std_logic;
9. DAYORNIGHT : in STD_LOGIC ;
10. TOMBOLDARURAT : in STD_LOGIC ;
11. LAMP : out STD_LOGIC_VECTOR (5 DOWNTO 0));
12. end tugasawal;
13.
14. architecture Behavioral of tugasawal is
15. TYPE executionStage IS (s1,s2,s3);
16. SIGNAL currentstate, laststate: executionStage := s1;
17. SIGNAL count : integer := 1;
18. begin
19. PROCESS (CLK)
20. BEGIN
21. IF (CLK'EVENT) AND ( CLK = '1' ) THEN
22. CASE currentstate IS
23. WHEN s1 =>
24. IF (TOMBOLDARURAT = '0') THEN
25. IF (DAYORNIGHT = '0') THEN
26. IF (count < 400000000 ) THEN
27. count <= count +1;
28. LAMP <="100010";
29. ELSIF (( count >=400000000) AND ( count < 500000000)) THEN
30. count <= count + 1;
31. LAMP <="100010";
32. ELSE
33. count <=1;
34. currentstate <=s2;
35. END IF;
36. ELSE
37. IF (count < 200000000 ) THEN
38. count <= count +1;
39. LAMP <="100010";
40. ELSIF (( count >=200000000) AND ( count < 250000000)) THEN
41. count <= count + 1;
42. LAMP <="100010";
43. ELSE
44. count <=1;
45. currentstate <=s2;
46. END IF;
47. END IF ;
48. ELSE
49. laststate <= currentstate;
50. currentstate <= s3;
51. count <= 500000000;
52. END IF ;
53. WHEN s2 =>
54. IF (TOMBOLDARURAT = '0') THEN
55. IF (DAYORNIGHT = '0') THEN
56. IF (count < 400000000 ) THEN
57. count <= count +1;
58. LAMP <="001100";
59. ELSIF (( count >=400000000) AND ( count < 500000000)) THEN
60. count <= count + 1;
61. LAMP <="001100";
62. ELSE
63. count <=1;
64. currentstate <=s1;
65. END IF;
66. ELSE
67. IF (count < 200000000 ) THEN
68. count <= count +1;
69. LAMP <="001100";
70. ELSIF (( count >=200000000) AND ( count < 250000000)) THEN
71. count <= count + 1;
72. LAMP <="001100";
73. else
74. count <=500000000;
75. currentstate <=s1;
76. END IF;
77. END IF;
78. ELSE
79. laststate <= currentstate;
80. currentstate <= s3;
81. count <= 500000000;
82. END IF ;
83. WHEN s3 =>
84. IF (( count >=500000000) AND ( count < 100000000)) THEN
85. count <= count + 1;
86. LAMP <="010010";
87. ELSIF (( count >=100000000) AND ( count < 150000000)) THEN
88. count <= count + 1;
89. LAMP <="010010";
90. ELSIF (( count >=150000000) AND ( count < 200000000)) THEN
91. count <= count + 1;
92. LAMP <="010010";
93. ELSE
94. LAMP <="000000";
95. count <= 500000000;
96. currentstate <= laststate ;
97. END IF;
98. END CASE ;
99. END IF ;
100. END PROCESS;
101. end Behavioral;
2. Rangkaian dan Hasil Pengimplementasian Percobaan I
 Utara Selatan merah dan timur barat hijau

 Ketika Tombol Darurat Ditekan

3. Code untuk Percobaan II


library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;

entity LCD1602 is
Port ( CLK : in std_logic; --???????????????????????????????????
Reset:in std_logic;
LCD_RS : out std_logic; --???????
LCD_RW : out std_logic; --??????
LCD_EN : out std_logic; --??????

LCD_N : out std_logic; --??????


LCD_P : out std_logic; --??????
VSS : out std_logic; --??????
VDD : out std_logic; --??????
VO : out std_logic; --??????

LCD_Data : out std_logic_vector(7 downto 0)); --??????


end LCD1602;

architecture Behavioral of LCD1602 is


type state is (set_dlnf,set_cursor,set_dcb,set_cgram,write_cgram,set_ddram,write_LCD_Data);
signal Current_State:state;
type ram1 is array(0 to 30) of std_logic_vector(7 downto 0);
type ram2 is array(0 to 30) of std_logic_vector(7 downto 0);
type ram3 is array(0 to 30) of std_logic_vector(7 downto 0);
type ram4 is array(0 to 30) of std_logic_vector(7 downto 0);
type ram5 is array(0 to 30) of std_logic_vector(7 downto 0);
constant
cgram1:ram1:=(x"4E",x"41",x"4D",x"41",x"3A",x"41",x"4E",x"44",x"52",x"45",x"41",x"53",x"5F",x"53",x"49",x"4D",x"4F
",x"52",x"41",x"4E",x"47",x"4B",x"49",x"52");
constant cgram2:ram2:=(x"4E",x"49",x"4D",x"3A",x"31",x"34",x"53",x"31",x"36",x"30",x"36",x"30");
constant
cgram3:ram3:=(x"50",x"52",x"4F",x"44",x"49",x"3A",x"54",x"45",x"4B",x"4E",x"49",x"4B",x"20",x"45",x"4C",x"45",x"4B
",x"54",x"52",x"4F");
constant cgram4:ram4:=(x"41",x"53",x"41",x"4C",x"3A",x"4A",x"41",x"4B",x"41",x"52",x"54",x"41");
constant cgram5:ram5:=(x"4B",x"49",x"52",x"43",x"48",x"4F",x"46",x"46");
signal CLK1 : std_logic;
signal Clk_Out : std_logic;

signal LCD_Clk : std_logic;


signal m :std_logic_vector(1 downto 0);

begin
LCD_EN <= Clk_Out ;
LCD_RW <= '0' ;

LCD_N<='0';
LCD_P<='1';
VSS<='0';
VDD<='1';
VO<='1';

process(CLK)
variable n1:integer range 0 to 19999;
begin

if rising_edge(CLK) then
if n1<19999 then
n1:=n1+1;
else
n1:=0;
Clk_Out<=not Clk_Out;
end if;
end if;
end process;

LCD_Clk <= Clk_Out;

process(Clk_Out)
variable n2:integer range 0 to 499;
begin

if rising_edge(Clk_Out) then
if n2<499 then
n2:=n2+1;
else
n2:=0;
Clk1<=not Clk1;
end if;
end if;
end process;

process(Clk1)
variable n3:integer range 0 to 14;
begin
if rising_edge(Clk1) then
n3:=n3+1;
if n3<=4 then
m<="00";
elsif n3<=9 and n3>4 then
m<="01";
else
m<="10";
end if;
end if;
end process;

process(LCD_Clk,Reset,Current_State)
variable cnt1: std_logic_vector(4 downto 0);
begin
if Reset='0'then
Current_State<=set_dlnf;
cnt1:="11110";
LCD_RS<='0';
elsif rising_edge(LCD_Clk)then
Current_State <= Current_State ;
LCD_RS <= '0';
case Current_State is
when set_dlnf=>
cnt1:="00000";
LCD_Data<="00000001"; -- /*????*/
Current_State<=set_cursor;
when set_cursor=>
LCD_Data<="00111000"; --/*??8???,2?,5*7*/
Current_State<=set_dcb;
when set_dcb=>
LCD_Data<="00001100"; --/*????,???,???*/
Current_State<=set_cgram;
when set_cgram=>
LCD_Data<="00000110";
Current_State<=write_cgram;
when write_cgram=>
LCD_RS<='1';
if m="000" then
LCD_Data<=cgram1(conv_integer(cnt1));
elsif m="001"then
LCD_Data<=cgram2(conv_integer(cnt1));
elseif m="010"then
LCD_Data<=cgram3(conv_integer(cnt1));
elseif m="011"then
LCD_Data<=cgram4(conv_integer(cnt1));
else
LCD_Data<=cgram5(conv_integer(cnt1));
end if;
Current_State<=set_ddram;
when set_ddram=>

if cnt1<"11110" then
cnt1:=cnt1+1;
else
cnt1:="00000";
end if;
if cnt1<="01111" then
LCD_Data<="10000000"+cnt1;--80H
else
LCD_Data<="11000000"+cnt1-"10000";--80H
end if;
Current_State<=write_LCD_Data;
when write_LCD_Data=>
LCD_Data<="00000000";
Current_State<=set_cursor;
when others => null;
end case;
end if;
end process;
end Behavioral;