MODUL 4 RANGKAIAN LOGIKA SEKUENSIAL Yogi Salomo Mangontang Pratama (13511059) Asisten: Giffary Kautsar / 13209028 Tanggal Percobaan: 12/11/2012 EL2195-Praktikum Sistem Digital
Laboratorium Dasar Teknik Elektro – Sekolah Teknik Elektro dan Informatika
Abstrak
1. Mendesain sekuensial implementasi pada FPGA.
Setelah pada percobaan sebelumnya kita telah membuat rangkaian logika kombinasional, pada percobaan ini kita akan membuat rangkaian logika sekuensial. Yang membedakan kedua rangkaian ini adalah keberadaan memori statenya. Pada rangkaian sekuensial, keluaran yang dihasilkan bergantung pada statenya. Baik beserta dengan masukannya maupun hanya state saja.
rangkaian
untuk
2. Mengenal dan memahami cara menggunakan hierarki dalam desain rangkaian. 3. Mengenal dan memahami cara menggunakan FPGA sebagai prototype system untuk memverifikasi fungsi rangkaian.
2. STUDI PUSTAKA
Salah satu contoh model yang menerapkan rangkaian sekuensial adalah FSM(Finite State Machine). FSM itu sendiri terdiri dari berbagai level abstraksi dan salah satu yang akan kita terapkan dalam percobaan kali ini adalah behavioral.Langkah awal yang harus kita pahami dalam pembuatan rangkaian sekuensial adalah pembuatan state diagram untuk rangkaian tersebut.
2.1 RANGKAIAN LOGIKA SEKUENSIAL Rangkaian logika sekuensial adalah rangkaian yang bergantung pada state serta masukan yang diberikan oleh pengguna. State itu sendiri adalah suatu keadaan yang mungkin akan dialami oleh suatu rangkaian, beserta transisi yang mungkin terjadi antara satu state dengan state berikutnya.
Kata kunci : sekuensial, state, FSM, State Diagram. 1. PENDAHULUAN
Untuk mempermudah perancangan state dalam rangkaian sekuensial ini, sebelum memulai perancangan sebaiknya dilakukan pembuatan suatu flow chart transisi state yang biasa disebut dengan istilah state diagram.
Dalam perancangan rangkaian digital, ada beberapa pendekatan yang dapat dilakukan. Pada percobaan kali ini akan dilakukan perancangan rangkaian logika secara sekuensial. Yang membedakan rangkaian logika ini dengan rangkaian logika yang sebelumnya adalah keberadaan memori state. Pada rangkaian sekuensial, kita harus menentukan berbagai keadaan yang akan terjadi serta membuatnya ke dalam suatu Flow Chart yang biasa disebut dengan State Diagram.
2.2 STATE DIAGRAM Yang pertama kali dilakukan dalam pembuatan state diagram adalah berapa state (kondisi) yang diperlukan dalam rangkaian tersebut. State logika adalah satu set nilai logika yang unik yang memperlihatkan status logika mesin pada suatu waktu tertentu.
Pada percobaan ini selain mencoba membuat rangkaiannya, akan dilakukan juga simulasi penerapan rangkaian sekuensial tersebut, baik ke dalam sebuah FPGA maupun pada VGA driver.
Cara paling baik untuk memulai menentukan state pada rangkaian adalah dengan membuat starting state, yaitu suatu state yang harus dimasuki mesin ketika baru dinyalakan ataupun ketika mesin di-reset.
Adapun tujuan dari praktikum ini antara lain :
1
Berikut adalah contoh dari state diagram :
GAMBAR 2.2.1 STATE DIAGRAM SEDERHANA. Sumber : Brown, Varesnic. Fundamental of Digital Logic with VHDL ed. 3
Board FPGA tipe UP2, DE1, DE2, atau DE2-70 Catu Daya+ Kabel dan konektor tambahan Kabel downloader ‘ByteBlaster II’ dan USB-Blaster.
3.1 PERCOBAAN 4A : IMPLEMENTASI DESAIN FSM PADA FPGA Buatlah folder sebagai direktori kerja baru untuk praktikum kali ini kemudian copy script desain FSM yang telah dibuat sebagai tugas pendahuluan sebelumnya ke dalam folder tersebut
Jalankan program ALTERA QUARTUS, kemudian bukalah file yang merupakan skrip desain FSM yang telah dibuat sebagai tugas pendahuluan sebelumnya
2.3 FINITE STATE MACHINE Finite State Machine atau yang biasa disebut FSM adalah salah satu model yang sering diterapkan untuk membantu membuat rangkaian sekuensial. Disebut demikian karena jumlah state yang mungkin terjadi terbatas dan rangkaian sekuensial bekerja mirip dengan mesin yang beroperasi dengan urutan state.
Implementasikan desain FSM tersebut dengan keluaran pada LED FPGA ( lihat kembali implementasi desain pada FPGA dalam praktikum-praktikum sebelumnya)
3.2 PERCOBAAN 4B : IMPLEMENTASI MODUL VGA DRIVER
Ada berbagai jenis dan level abstraksi dalam perancangan rangkaian sekuensial. Dan salah satunya adalah FSM Mealy yang dapat dilihat pada gambar berikut : GAMBAR 2.3.1 FSM MEALY. Sumber : Fundamental of Digital Logic with
Brown, VHDL
Varesnic. ed. 3
3. METODOLOGI Alat-alat yang digunakan dalam percobaan ini antara lain : 1. Komputer yang telah ter-install program Quartus II 2. FPGA development board, tipe DE1 beserta perlengkapannya yang meliputi :
2
darurat : in STD_LOGIC;
Buatlah folder sebagai direktori kerja baru untuk percobaan ini, kemudian buatlah project baru dengan modul-modul yang disediakan untuk praktikum empat sesuai dengan board yang ada
downto 0));
lampu: out STD_LOGIC_VECTOR(5
end traffic;
architecture traffic of traffic is
component clockdiv is
Implementasikan desain di atas pada FPGA dengan pin planner yang sudah di download dan disesuaikan dengan board yang ada
port( CLK: IN std_logic; DIVOUT: buffer bit); end component;
Lakukan beberapa kali perubahan posisi switch pada board FPGA untuk melihat efek dan perubahannya pada layar LCD! Pelajari input dan keluaran dari desain di atas untuk selanjutnya digabungkan dengan modul FSM yang telah dibuat
type state_type is (s0, s1, s2, s3, s4); signal state: state_type; signal count: STD_LOGIC_VECTOR(3 downto 0); constant SEC8: STD_LOGIC_VECTOR(3 downto 0) := "0111"; constant SEC4: STD_LOGIC_VECTOR(3 downto 0) := "0011";
3.3 PERCOBAAN 4C: MENGGABUNGKAN DESAIN FSM DENGAN VGA DRIVER
constant SEC2: STD_LOGIC_VECTOR(3 downto 0) := "0001"; constant SEC1: STD_LOGIC_VECTOR(3 downto 0) := "0000";
Hubungkan keluaran FSM dengan masukan modul VGA. Lakukan compile dan download gabungan desain FSM dan modul VGA tersebut ke dalam board FPGA. Amati hasil yang didapatkan!
begin DUT : clockdiv PORT MAP (
3.4 SCRIPT VHDL UNTUK PERCOBAAN
CLK => clk1,
3.4.1 SCRIPT LAMPU LALU LINTAS
DIVOUT => clk);
library IEEE; use IEEE.STD_LOGIC_1164.all;
process(clk, clr, darurat, siangmalam)
use IEEE.STD_LOGIC_unsigned.all;
begin if clr = '0' and darurat = '1' then
entity traffic is
state <= s4;
port (clk1: in STD_LOGIC;
count <= SEC4;
clk: buffer bit;
elsif clk'event and clk = '1' then
clr: in STD_LOGIC; '0' then
siangmalam: in STD_LOGIC;
3
if clr = '0' and siangmalam = '0' and darurat =
case state is
state <= s0; when s0 =>
end case;
if count < SEC8 then
elsif clr = '0' and siangmalam = '1' and darurat = '0' then
state <= s0;
case state is
count <= count + 1;
when s0 =>
else
if count < SEC4 then
state <= s1;
state <= s0;
count <= X"0";
count <= count + 1;
end if;
else
when s1 =>
state <= s1;
if count < SEC2 then
count <= X"0";
state <= s1;
end if;
count <= count + 1;
when s1 =>
else
if count < SEC1 then
state <= s2;
state <= s1;
count <= X"0";
count <= count + 1;
end if;
else
when s2 =>
state <= s2;
if count < SEC8 then
count <= X"0";
state <= s2;
end if;
count <= count + 1;
when s2 =>
else
if count < SEC4 then
state <= s3;
state <= s2;
count <= X"0";
count <= count + 1;
end if;
else
when s3 =>
state <= s3;
if count < SEC2 then
count <= X"0";
state <= s3;
end if;
count <= count + 1
when s3 =>
else
if count < SEC1 then
state <= s0;
state <= s3
count <= X"0";
count <= count + 1;
end if;
else
when others =>
state <= s0;
4
count <= X"0";
constant div: integer:=25000000;
end if;
begin
when others =>
if CLK'event and
CLK='1' then
state <= s0; end case; end if;
if(count
end if;
count:=count+1;
end process; if(DIVOUT='0') then
C2: process(state) DIVOUT<='0';
begin elsif(DIVOUT='1') then
case state is when s0 => lampu <= "100001";
DIVOUT<='1';
when s1 => lampu <= "100010"; end if;
when s2 => lampu <= "001100"; else
when s3 => lampu <= "010100"; when s4 => lampu <= "010010";
if(DIVOUT='0') then
when others => lampu <= "100001";
DIVOUT<='1';
end case; elsif(DIVOUT='1') then
end process; DIVOUT<='0';
end traffic;
end if;
3.4.2 SCRIPT UNTUK DIVCLOCK
count:=0;
LIBRARY IEEE;
end if;
USE IEEE.STD_LOGIC_1164.ALL; end if; end process;
entity CLOCKDIV is port( CLK: IN std_logic;
end behavioural;
DIVOUT: buffer BIT);
4. HASIL DAN ANALISIS
end CLOCKDIV;
Pada praktikum kali ini kami tidak berhasil melakukan percobaan dengan tuntas. Dikarenakan ada kesalahan pada skrip VHDL yang kami buat sehingga tidak berhasil dibuat. Skrip yang kami buat berhasil dikompilasi akan
architecture behavioural of CLOCKDIV is begin PROCESS(CLK) variable count: integer:=0;
5
tetapi hasil yang dikeluarkan tidak sesuai dengan yang diharapkan pada percobaan ini.
menyambungkan FPGA dengan layar computer, maka akan keluar simulasi dari lampu lalu lintas yang kurang lebih tampilannya sebagai berikut.
Hal ini mungkin disebabkan karena deklarasi state yang kurang tepat, karena hasil yang keluar adalah setelah s1, output tidak ada atau bergambar ’XXXXXXXXXX’ pada waveform.
GAMBAR 4.1 Perkiraan tampilan pada layar setelah FPGA disambungkan dengan VGA Driver. Sumber : dokumentasi pribadi penulis.
Setelah praktikum usai saya mencoba membuat kembali dengan skrip yang telah disertakan pada metodologi, dan saya akhirnya mendapatkan hasil yang sesuai dengan hasil yang diharapkan pada praktikum ini. Dapat dilihat bahwa pada s0, lampu merah utara selatan menyala dan lampu hijau di barat timur menyala. Pada s1, lampu merah utara selatan masih menyala, dan lampu kuning barat timur yang menyala. Pada s2, lampu hijau pada utara selatan menyala dan lampu merah pada timur barat menyala. Pada s3, lampu kuning utara selatan menyala dan lampu merah pada barat timur menyala. s4 adalah keadaan darurat dimana lampu kuning dari semua arah berkedip.
Tampilan yang demikian dihasilkan dari modul VGA yang telah diberikan sebelumnya oleh asisten praktikum, dan apabila rangkaian yang kita buat sudah benar, maka akan tampil di layar seperti yang tertera pada gambar dan transisi warnanya akan berubah sesuaid dengan input yang diberikan dari FPGA. Akan tetapi sekali lagi, saya belum berhasil melakukan percobaan ini.
5. KESIMPULAN Dalam pembuatan rangkaian sekuensial, penentuan state logika yang akan dipakai memegang peranan yang sangat penting dalam keberhasilan rancangan rangkaian. State yang dibuat harus sesuai dengan keadaan yang diinginkan pada rangkaian dan dibuat seminimal mungkin.
Percobaan implementasi pada FPGA tidak sempat saya lakukan, oleh karena pada saat di laboratorium saya belum berhasil membuat rancangan sehingga saya tidak dapat melakukan simulasi. Akan tetapi apabila sesuai dengan yang diharpkan pada percobaan ini, seharusnya seteleah diaplikasikan pada FPGA maka lampu LED pada FPGA akan menyala sesuai dengan waktu yang telah ditentukan pada soal lampu lalu lintas. Akan tetapi hitungan waktu pada waveform berbeda dengan waktu pada FPGA sehingga perlu diatur kembali nilai dari waktu input maupun outputnya. Apabila frekuensinya 50Hz, digunakan +- 50 juta ns, sementara bila frekuensi 27Hz, digunakan +- 13.5 juta ns.
Dan apabila telah dirancang rangkaian logika sekuensial diaplikasikan baik pada FPGA ditampilkan dalam sebuah bantuan VGA Driver.
dengan benar, tersebut dapat board maupun layar dengan
6. DAFTAR PUSTAKA Brown, Steven dan Varesnic, Zvonko. 2005. Fundamental Of Digital Logic with VHDL Design.
Demikian pula dengan percobaan ketiga, menggabungkan desain rangkaian dengan VGA Driver. Kami belum berhasil mengimplementasikannya dikarenakan kesalahan pada rangkaian. Akan tetapi apabila rangkaiannya sudah benar, bila kita
Hutabarat, Mervin, dkk, Modul Praktikum Sistem Digital, Institut Teknologi Bandung, Bandung, 2010
6