Anda di halaman 1dari 28

MODUL 4 RANGKAIAN LOGIKA SEKUENSIAL

Najmi Azzahra Feryputri (13221086)


Asisten: Ahmad Ghozali Alfarisi (13219065)
Tanggal Percobaan: 08/11/2022
EL2102-Praktikum Sistem Digital
Laboratorium Dasar Teknik Elektro - Sekolah Teknik Elektro dan Informatika ITB

Abstrak
Pada praktikum modul 4 Rangkaian Logika Sekuensial ini
praktikan akan mendesain sendiri state diagram dan script
VHDL untuk pengaturan empat buah lampu lalulintas di
perempatan jalan. Akan dirancang juga sebuah kalkulator
yang akan disusun dengan membagi kerja program dalam
hierarki. melakukan operasi spesifik untuk mencari FPB
dan modulo dari 2 input 4 bit. Praktikan . Praktikan akan
mengimplementasikan FSM pada FPGA. Selain itu Gambar 2-1 Ilustrasi rangkaian logika sekuensial[3]
keluaran FSM juga akan ditampilkan pada layer dengan
modul VGA driver. Hasil dari percobaan cukup baik. 2.2 FINITE STATE MACHINE
Kata kunci: sekuensial, FSM, FPB, modulo, hierarki. Terdapat beberapa model yang digunakan untuk
membantu merancang rangkaian sekuensial. Salah
1. PENDAHULUAN satunya yang paling banyak digunakan adalah
Finite State Machine (FSM). Dinamakan FSM
Percobaan pada modul ini secara umum bertujuan karena jumlah state yang mungkin terbatas dan
agar praktikan dapat merancang rangkaian logika rangkaian sekuensial bekerja mirip dengan mesin
sekuensial dengan menggunakan Bahasa VHDL yang beroperasi dengan urutan state.
serta dapat mengimplementasikannya pada FPGA.
Adapun tujuan rinci dari modul ini: Level abstraksi perancangan FSM pun bertingkat
tingkat. Pada praktikum kali ini digunakan level
1) Mendesain sekuensial rangkaian untuk abstraksi behavioral. Pada perancangan dengan
implementasi didalam FPGA. level ini, sebelum mengimplementasikan
2) Mengenal dan memahami cara menggunakan menggunakan VHDL harus terebih dahulu dibuat
hierarki dalam desain rangkaian state diagram atau flow chart transisi statenya.
Komponen ‐ komponen yang harus ada pada
3) Mengenal dan memahami cara menggunakan statediagram adalah deklasari input dan output,
FPGA sebagai prototype system untuk definisi state, transisi, dan keluarannya. Berikut
memverifikasi fungsi rangkaian. adalah contoh state diagram mealy dan
implementasinya dalam FPGA.
2. STUDI PUSTAKA

2.1 RANGKAIAN LOGIKA SEKUENSIAL


Rangkaian logika sekuensial adalah rangkaian
logika dengan nilai output yang tidak hanya
bergantung pada nilai input tetapi juga pada
kondisi (state) rangkaian pada waktu tertentu .[2]
Gambar 2-2. (a) State diagram FSM Mealy
Rangkaian logika sekuensial umumnya memiliki
dua blok, yaitu blok rangkaian kombinasional serta
blok memori. Memori pada rangkaian sekuensial
menyimpan kondisi atau biasa disebut state
rangkaian pada waktu tertentu. Keluaran
rangkaian sekuensial bergantung pada state dan
bergantung pada
masukannya (rangkaian Mealy) atau hanya
bergantung pada statenya (rangkaian Moore).[1]

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 1


3.1 PERCOBAAN 4A: IMPLEMENTASI
DESAIN FSM PADA FPGA
Pada percobaan ini, praktikan diminta untuk
mengimplementasikan FSM ke FPGA dengan
keluaran ke LED atau switch FPGA. FSM ini juga
akan digunakan untuk percobaan 4B dan 4C.
Adapun FSM yang dibuat merupakan FSM yang
mengatur 4 lampu lalulintas pada suatu
perempatan jalan dengan spesifikasi berikut:
1. Memiliki mode siang, malam, emergency
(darurat), dan reset sebagai inputnya.
2. Ketika siang hari lampu merah menyala
selama 10 detik lalu lampu hijau menyala
selama 8 detik, serta lampu kuning menyala
selama 2 detik ketika perpindahan lampu
hijau ke merah.
3. Ketila malam hari lampu merah menyala
selama 5 detik lalu lampu hijau menyala
selama 4 detik serta lampu kuning menyala
selama 1 detik ketika perpindahan lampu
hijau ke merah.
4. Ketika tombol darurat ditekan lampu kuning
akan berkedip selama 4 detik.
5. Lampu lalu lintas Hanya memerlukan dua
Gambar 2-2 (b) Implementasi VHDL fsm pada gambar 2-2 (a). buah kontrol : (1) untuk lampu lalulintas utara
‐selatan, dan (2) untuk lampu lalulintas barat
‐timur.
3. METODOLOGI 6. Memiliki 6 buah output yang lebarnya masing
Komponen dan alat yang digunakan selama ‐masing 1 bit. Output tersebut menunjukkan
praktikum ini adalah : kondisi setiap lampu Utara Selatan dan lampu
Barat Timur. Misalkan : M_US (Merah Utara
1. Komputer (PC) yang telah (1 buah) Selatan), M_BT (Merah Barat Timur), K_US,
terinstal program Quartus II K_BT, H_US, dan H_BT.
dan Modelsim 7. Terdiri dari 2 blok yaitu blok FSM dan blok
counter untuk menentukan lama waktu
2. FPGA development board (1 buah)
lampu lalu lintas nyala atau transisi.
tipe ALTERA DE1

3. Board FPGA tipe DE1 (1 buah)

4. Catu daya + kabel dan (1 buah)


konektor tambahan

5. Kabel USB-Blaster (1 buah)

6. Monitor LCD (1 buah)


Gambar 4-1 (a) Blok penyusun FSM percobaan 4A
Untuk tahapan percobaan akan didesain dan diuji Gambar di atas adalah gambaran blok‐blok yang
(dalam simulasi) sebuah BCD counter yang dapat harus dibuat kecuali untuk blok display_vhd
di‐cascade dan sebuah divide‐by‐N counter. karena blok ini sudah disediakan sebagai modul
Adapun langkah-langkah yang dilakukan untuk display ke LCD via VGA (Blok ini akan dipelajari
praktikum modul ini adalah: lebih lanjut pada praktikum berikutnya).

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 2


Prosedur Percobaan:
Lakukan kompilasi serta anlysis&synthesis
untuk memastikan tidak ada error.
Buatlah folder sebagai direktori kerja baru
untuk praktikum kali ini

Copy script desain FSM yang telah dibuat Atur pin I/O pada pin planner seperti pada
sebagai tugas pendahuluan pada lampiran modul 2 dengan pin planner yang sudah
1 ke dalam folder tersebut. didownload dari labdasar.

Jalankan program ALTERA QUARTUS® ,


kemudian bukalah file yang merupakan Implementasikan desain FSM pada VGA
script desain FSM yang telah dibuat sebagai dengan dengan langkah-langkah sama seperti
tugas pendahuluan sebelumnya. implementasi pada FPGA.

Lakukan kompilasi serta anlysis&synthesis


untuk emmastikan tidak ada error.
Lakukan beberapa kali perubahan posisi switch
pada board FPGA untuk melihat efek dan
perubahannya pada layar LCD

Atur pin I/O pada pin planner seperti pada Gambar 3-2 Diagram alur untuk percobaan 4B
modul 2.

3.3 PERCOBAAN 4C : MENGGABUNGKAN


Implementasikan desain FSM tersebut
DESAIN FSM DENGAN VGA DRIVER.
dengan keluaran pada LED atau switch
FPGA dengan langkah-langkah seperti
Pada praktikum kali ini, praktikan diminta untuk
pada modul 2. menggabungkan modul FSM dengan modul VGA.
Gambar 4-1 (b) Diagram alur percobaan 4A Prosedur percobaan:

3.2 PERCOBAAN 4B: IMPLEMENTASI Buatlah folder sebagai direktori


kerja baru untuk praktikum kali
MODUL VGA DRIVER ini
Praktikum kali ini, praktikan diminta untuk
mengimplementasikan modul VGA Drive dengan
masukan dari FPGA (Switch) selebar 6 bit.
Masukan modul ini akan dihubungkan dengan
keluaran modul FSM yang telah dibuat. Hubungkan keluaran FSM
dengan masukan modul VGA
Prosedur Percobaan: dengan VHDL.

Buatlah folder sebagai direktori


kerja baru untuk percobaan ini

Lakukan compile serta


analysis&synthesis

Buatlah project baru dengan


modul‐modul yang disediakan Impelementasi dan download
untuk praktikum pada file gabungan desain FSM dan
display_DE1 yang sudah modul VGA tersebut ke dalam
didownload dari labdasar dan board FPGA.
terdapat pada lampiran 2.

Gambar 3-3 Diagram alur percobaan 4C

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 3


3.4 PERCOBAAN 4D : MERANCANG 4. HASIL DAN ANALISIS
SEBUAH KALKULATOR UNTUK
MELAKUKAN OPERASI SPESIFIK. 4.1 PERCOBAAN 4A: IMPLEMENTASI
DESAIN FSM PADA FPGA
Pada percobaan ini, akan dibuat suatu kalkulator
yang dapat melakukan suatu operasi spesifik
dengan menggunakan operasi‐operasi dasar.
Operasi spesifik yang akan dibuat ada dua jenis,
yaitu :
1. Perhitungan GCD (great common divisor)
atau FPB (faktor persekutuan terbesar).
Algoritma perhitungan GCD yang digunakan
adalah membandingkan kedua input bilangan,
apakah input pertama (x) sama dengan input
kedua (y). Jika iya, maka GCD telah
ditemukan (bisa x atau y). Jika x > y, maka x =
x – y, jika y > x, maka y = y – x. Lalu kedua
bilangan tersebut dikomparasi berulang‐ulang
hingga ditemukan GCD (kondisi x = y).
Catatan : kedua input tidak boleh 0.
2. Perhitungan modulo (sisa pembagian).
Algoritma perhitungan modulo (x mod y)
yang digunakan adalah dengan melakukan Gambar 4-1 (a) Tabel pin I/O FSM lampu lalulintas
komparasi apakah x < y, jika iya, maka
modulo telah didapatkan, yaitu x. Jika x > y,
maka x = x – y. Kemudian dilakukan
komparasi kembali hingga modulo telah
didapatkan. Catatan : input kedua tidak boleh
0.
Arsitektur program ini disusun dalam 6 block,
yaitu subtractor (untuk melakukan operasi Gambar 4-1 (b) lokasi pin I/O FSM lampu lalulintas pada
FPGA
pengurangan), comparator (untuk melakukan
operasi komparasi), mux (sebagai selector), regis
(sebagai register), fsm (sebagai kontroler), dan
kalkulator (sebagai top‐level).
Prosedur percobaan:

Buatlah project baru pada folder yang berbeda dengan


percobaan‐percobaan sebelumnya.

Buatlah file‐file VHDL untuk masing‐masing blok dengan


mengetikkan script pada lampiran 3 dan simpan dalam
folder project yang telah dibuat.

Lakukan kompilasi Analysis & Synthesis dan kompilasi


rancangan secara menyeluruh.

Lakukan simulasi timing untuk beberapa nilai input.

Ulangi langkah-langkah diatas untuk kalkulator modulo.

Gambar 3-4 Diagram alur untuk percobaan 4D Gambar 4-1 (c) Hasil implementasi FSM lampu lalulintas
pada FPGA
Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 4
Pada percobaan 4A ini akan diimplementasikan Berdasarkan analisis tersebut dapat disimpulkan
sekaligus diuji desain FSM yang sudah dibuat bahwa rangkaian sekuensial berupa FSM yang
pada FPGA. Tabel 4-1 (a) menunjukkan lokasi pin kami buat beserta implementasi VHDL-nya sudah
pada FPGA. Dapat dilihat di tabel pada gambar 4-1 sesuai karena sudah memenuhi spesifikasi yang
(c), untuk setiap mode malam, siang, dan disyaratkan.
emergency pada t=0 output selalu sama engan
output pada mode reset. Hal ini menunjukkan 4.2 PERCOBAAN 4B: IMPLEMENTASI
bahwa output pada t=0 s tersebut merupakan MODUL VGA DRIVER
initial state atau kondisi awal.
Untuk mode malam, sesuai dengan lokasi keluaran
pada gambar 4-1 (b), pada mula-mula (t=0 s)
lampu berada pada state awal yaitu lampu hijau
utara selatan dan merah barat timur menyala. Saat
t=4 s, dapat kita ketahui bahwa lampu hijau utara
selatan mati digantikan oleh lampu kuning utara
selatan serta lampu merah barat timur tetap. Pada
state selanjutnya saat t=5 s atau selang waktu 1 s
dari state sebelumnya, lampu kuning utara selatan
mati digantikan oleh lampu merah utara selatan
serta lampu merah barat timur mati digantikan
oleh lampu hijau barat timur. Hasil percobaan ini
sesuai dengan spesifikasi FSM, yaitu pada malam
hari lampu hijau menyala setiap 4 detik, dikuti
lampu kuning 1 detik, setelahnya lampu merah
sebanyak 5 detik. Dapat dilihat juga untuk state
selanjutnya saat t=9 s output yang ditampilkan
sudah sesuai.
Untuk mode siang, dapat dilihat pada gambar 4-1
(b) sama seperti mode malam pada mula-mula (t=
0 s) lampu berada pada state awal yaitu lampu
hijau utara selatan dan merah barat timur menyala.
Saat t=8 s, dapat kita ketahui bahwa lampu hijau
utara selatan mati digantikan oleh lampu kuning
utara selatan serta lampu merah barat timur tetap.
Pada state selanjutnya saat t=10 s atau selang
waktu 2 s dari state sebelumnya, lampu kuning
utara selatan mati digantikan oleh lampu merah
utara selatan serta lampu merah barat timur mati
digantikan oleh lampu hijau barat timur. Hasil
percobaan ini sesuai dengan spesifikasi FSM, yaitu
pada malam hari lampu hijau menyala setiap 8
detik, dikuti lampu kuning 2 detik, setelahnya
lampu merah sebanyak 10 detik. Dapat dilihat juga
untuk state selanjutnya saat t=18 s output yang
ditampilkan juga sudah sesuai spesifikasi.
Untuk mode emergency, pada kondisi mula-mula
(t =0 s) output menunjukkan state awal saat tombol
darurat belum ditekan yaitu lampu hijau utara
selatan dan merah barat timur menyala. Saat
tombol ditekan, dapat kita lihat pada gambar 4-1
(c) lampu kuning utara selatan menyala setiap 2
detik diikuti lampu kuning barat timur selama 2
detik. Jika dijumlahkan total lampu kuning Gambar 4-2 (a) Hasil implementasi VGA percobaan 4B
menyala selama 4 detik. Hasil percobaan ini sudah Pada percobaan ini desain FSM akan
sesuai spesifikasi yaitu saat tombol darurat ditekan diimplementasikan ke VGA driver dengan
lampu kuning akan berkedip selama 4 detik. keluaran pada layar komputer menggunakan kode

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 5


yang sudah disediakan oleh labdasar (terdapat di
lampiran 2). Pada lampiran 2 terdapat bagian kode
seperti berikut:

Gambar 4-2 (b) Potongan kode percobaan 4B

Pada kode tersebut terlihat bahwa switch 0 (SW(0))


akan menyalakan lampu merah utara selatan,
switch 1 (SW(1)) akan menyalakan lampu kuning
utara selatan, switch 2 (SW(2)) akan menyalakan
lampu hijau utara selatan, switch 3 (SW(3)) akan Gambar 4-3 (b) Hasil simulasi percobaan 4C mode malam
menyalakan lampu merah barat timur, switch 4
(SW(4)) akan menyalakan lampu kuning barat
timur, serta switch 5 (SW(5)) akan menyalakan
lampu hijau barat timur. Pasangan switch dan
tampilan pada layar sudah sesuai dengan hasil
percobaan pada gambar 4-2 (a), dapat disimpulkan
bahwa implementasi atau pengujian desain FSM
dengan modul VGA menunjukkan hasil yang
sesuai dengan kodenya sehingga desain yang
digunakan untuk percobaan 2B ini sudah benar.

Gambar 4-3 (c) Hasil simulasi percobaan 4C mode


emergency
4.3 PERCOBAAN 4C: MENGGABUNGKAN
DESAIN FSM DENGAN VGA DRIVER. Percobaan ini sebenarnya sama saja dengan
percobaan 4A hanya saja output tidak ditampilkan
di FPGA tetapi pada layar komputer dengan
menggabungkan serta memodifikasi sedikit kode
pada percobaan 4A dan pada percobaan 4B agar
tampilan layar memenuhi spesifikasi lampu
lalulintas yang sudah dijelaskan pada Langkah-
langkah percobaan 4A pada bab metodologi. Pada
percobaan 4C ini, kami tidak menggunakan switch
tetapi kami menggunakan clockdiv sehingga tidak
perlu menggerakan switch sebagai counter. Hasil
percobaan pada tiap mode ditampilkan berturut-
turut pada gambar 4-3 (a), 4-3 (b), dan 4-3 (c).
Dapat dilihat pada setiap mode kondisi awal pasti
selalu sama yaitu lampu merah utara selatan serta
lampu hijau barat timur menyala. Saat t>8 s, lampu
hijau barat timur mati digantikan lampu kuning
Gambar 4-3 (a) Hasil simulasi percobaan 4C mode siang barat timur semenjak lampu merah utara selatan
tetap. Saat t>10 s hingga t=18 s lampu merah utara
selatan mati digantikan lampu hijau utara selatan
dan lampu kuning barat timur mati digantikan
lampu merah barat timur. Urutan serta selang
waktu ini sesuai dengan spesifikasi lampu
lalulintas pada siang hari yaitu lampu hijau
menyala setiap 8 detik, dikuti lampu kuning 2
detik, setelahnya lampu merah sebanyak 10 detik.

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 6


Begitu juga pada mode malam pada gambar 4-2 (b). berarti state tidak direset dan melanjutkan state
Saat t>4 s, lampu hijau barat timur mati digantikan sebelumnya. CLK bernilai 1 berarti elemen FSM
lampu kuning barat timur semenjak lampu merah bekerja dan state berlanjut. Sehingga pada saar
utara selatan tetap. Saat t>5 s s hingga t=9 s lampu rst=0 dan clk=1, elemen memori yaitu blok fsm
merah utara selatan mati digantikan lampu hijau akan berjalan dan melanjutkan keadaan dari state
utara selatan dan lampu kuning barat timur mati sebelumnya. Selain rst dan clk pada gambar 4-4 (a)
digantikan lampu merah barat timur. Urutan serta input xi dan yi berturut-turut bernilai 10 dan 2. Jika
selang waktu ini sesuai dengan spesifikasi lampu kita menghitung manual menggunakan algoritma
lalulintas pada malam yaitu lampu hijau menyala GCD maka kita dapatkan GCD dari 10 dan 2
setiap 4 detik, dikuti lampu kuning 1 detik, adalah 2, hal ini sesuai dengan hasil output
setelahnya lampu merah sebanyak 5 detik. simulasi timing yaitu do yang juga bernilai 2.
Sehingga dapat disimpulkan operasi GCD pada
Berdasarkan fakta tersebut dapat disimpulkan
kalkulator ini sudah berjalan dengan benar.
bahwa implementasi FSM pada LCD
menggunakan gabungan script percobaan 4A dan Dalam operasi modulo blok yang terlibat juga
4B ini sudah benar dan sudah menghasilkan sama yaitu blok comparator dan blok subtractor.
output yang sesuai. Setelah menerima 2 input 4 bit x dan y dengan blok
regis, x dan y akan dibandingkan menggunakan
4.4 PERCOBAAN 4D: MERANCANG blok comparator. Jika x lebih kecil dari y, maka x
SEBUAH KALKULATOR UNTUK menrupakan modulo. Jika x lebih besar dari y,
MELAKUKAN OPERASI SPESIFIK maka x dan y akan diteruskan ke blok subtractor
untuk melakukan operasi pengurangan x-y.
Setelahnya, x dan y akan dikembalikan lagi ke blok
comparator untuk dibandingkan, proses ini akan
terus diulang hingga didapat x<y.
Pada gambar 4-4 (b), input rst bernilai 0, clk
bernilai 1, dan go_i bernilai 0. Sama seperti pada
operasi GCD, Rst bernilai 0 berarti state tidak
direset dan melanjutkan state sebelumnya serta clk
bernilai 1 berarti elemen FSM bekerja dan state
berlanjut. Pada saar rst=0 dan clk=1, elemen
memori yaitu blok fsm akan berjalan dan
melanjutkan keadaan dari state sebelumnya. Selain
Gambar 4-4 (a) Hasil simulasi timing operasi GCD rst dan clk, pada gambar 4-4 (b) terlihat input xi
dan yi berturut-turut juga bernilai 10 dan 2 Jika kita
menghitung manual menggunakan algoritma
modulo maka kita dapatkan modulo dari 10 dan 2
adalah 0, hal ini sesuai dengan hasil output
Gambar 4-4 (b) Hasil simulasi timing operasi modulo simulasi timing yaitu do yang juga bernilai 0.
Pada percobaan 4D dibuat kalkulator yang dapat Sehingga dapat disimpulkan operasi modulo pada
melakukan operasi GCD (mencari FPB) dan kalkulator ini sudah berjalan dengan benar.
modulo (mencari sisa bagi). Untuk operasi modulo Berdasarkan hasil operasi GCD dan modulo yang
tidak sempat dilakukan di labdasar karena tidak dilakukan pada kalkuator ini, dapat disimpulkan
cukup waktu sehingga hasil simulasi bahwa blok-blok penyusun arsitektur program ini
Dalam operasi GCD blok yang terlibat adalah blok tersusun dengan benar. Program kalkulator ini
comparator dan blok subtractor. Setelah menerima menjadi efektif dan lebih mudah dibuat jika fungsi
2 input 4 bit x dan y dengan blok regis, x dan y atau operasi kecil didalamnya dibagi menjadi blok-
akan dibandingkan menggunakan blok comparator. blok yang lebih kecil dan fungsi kalkulator yang
Jika x samadengan y, maka x atau y tersebut utama dijadikan sebagai top level entity yang
merupakan GCD. Jika x tidak sama dengan y, menyatukan dan memanfaatkan fungsi dari blok-
maka x dan y akan diteruskan ke blok subtractor blok kecil tersebut.
untuk mengurangi nilai yang lebih besar dengan
yang lebih kecil. Setelahnya, x dan y akan 5. KESIMPULAN
dikembalikan lagi ke blok comparator, proses ini 1. Rangkaian sekuensial merupakan rangkaian
akan terus diulang hingga didapat x=y. yang tidak hanya terdiri dari gerbang-gerbang
Pada gambar 4-4 (a), input rst bernilai 0, clk logika seperti rangkaian kombinasional, tetapi
bernilai 1, dan go_i bernilai 0. Rst bernilai 0 juga elemen memori untuk menyimpan kondisi
Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 7
rangkaian atau state rangkaian pada waktu atau
input tertentu. Output rangkaian sekuensial
bergantung dari state rangkaian dan inputnya.
Finite State Machine (FSM) adalah salah satu
model untuk merancang rangkaian sekuensial.
Rangkaian sekuensial juga dapat
diimplementasikan ke FPGA untuk
memverifikasi fungsionalitasnya.
2. Dalam mendesain suatu program yang tidak
sederhana akan lebih mudah dan lebih
meminimisasi error jika menggunakan hierarki,
yaitu pembagian kerja atau fungsionalitas dari
keseluruhan program menjadi blok-blok kecil,
lalu membuat blok-blok kecil tersebut secara
terpisah. Nantinya pada file utama yang
dijadikan too-level-entity, blok-blok kecil ini
akan digunakan Bersama-sama membentuk
keseluruhan program.
3. Untuk menguji apakah fungsionalitas dari
rangkaian yang didesain sudah benar dapat
dilakukan uji dengan implementasi ke FPGA.
Di FPGA kita dapat melihat apakah keluaran
yang diharapkan sudah sesuai sebelum
diimplementasikan ke system yang lebih besar
sehingga mempermudah proses debugging.

DAFTAR PUSTAKA
[1] Mervin T Hutabarat dan Arif Sasongko.,
Petunjuk Praktikum Praktikum Sistem Digital,
Laboratorium Dasar Teknik Elektro, Bandung,
2022.
[2] Stephen Brown dan Zvonko Vranesic,
Fundamentals Of Digital Logic with Verilog Design,
McGrawHill, Departement of Electrical and
Computer Engineering, University of Toronto,
2002.
[3] https://www.geeksforgeeks.org/introduction-
of-sequential-circuits/ diakses pada 9
November 2022 jam 09.10.

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 8


Lampiran 1: Script percobaan 4A dan 4C

fsmlampu.vhd

LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_ARITH.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY fsmlampu2 is
port(SIANG, MALAM, DARURAT, clk : IN STD_LOGIC;
M_US, K_US, H_US, M_BT, K_BT, H_BT : OUT STD_LOGIC);

END fsmlampu2;
ARCHITECTURE TRAFFICLIGHT OF fsmlampu2 IS
COMPONENT CLOCKDIV IS
PORT(
CLK: IN std_logic;
DIVOUT: buffer BIT);
END COMPONENT;
TYPE executionStage IS (MODE_SIANG, MODE_MALAM, MODE_DARURAT);
SIGNAL currentstate, nextstate: executionStage;
SIGNAL COUNTER : STD_LOGIC_VECTOR (4 downto 0);
SIGNAL rst : STD_LOGIC;
SIGNAL ClkAsli : BIT;
BEGIN
fsmlampu : CLOCKDIV
PORT MAP (
CLK => clk,
DIVOUT => ClkAsli);
PROCESS
BEGIN
WAIT UNTIL( ClkAsli'EVENT ) AND ( ClkAsli = '1' );
IF ( rst = '0' ) THEN

COUNTER <= "00000";

ELSE

currentstate <= nextstate;


COUNTER <= COUNTER + 1;

END IF;
END PROCESS;
PROCESS(SIANG, MALAM, DARURAT, currentstate, COUNTER)
BEGIN
rst <= '1';
CASE currentstate IS
WHEN MODE_SIANG =>
IF (SIANG = '1') AND (MALAM = '0') AND (DARURAT = '0') THEN
nextstate <= MODE_SIANG;
IF (COUNTER<=10) THEN
M_US <= '1';
K_US <= '0';
H_US <= '0';
IF (COUNTER <= 8) THEN
M_BT <= '0';
K_BT <= '0';
H_BT <= '1';
ELSE
M_BT <= '0';
K_BT <= '1';
H_BT <= '0';
END IF;
Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 1
ELSIF (COUNTER > 10) AND (COUNTER <= 20) THEN
M_BT <= '1';
K_BT <= '0';
H_BT <= '0';
IF (COUNTER <= 18) THEN
M_US <= '0';
K_US <= '0';
H_US <= '1';
ELSE
M_US <= '0';
K_US <= '1';
H_US <= '0';
END IF;
ELSIF (COUNTER > 20) THEN
rst <= '0';
END IF;
END IF;
IF (SIANG = '0') AND (MALAM = '1') AND (DARURAT = '0') THEN
nextstate <= MODE_MALAM;
END IF;
IF (SIANG = '0') AND (MALAM = '0') AND (DARURAT = '1') THEN
nextstate <= MODE_DARURAT;
END IF;
WHEN MODE_MALAM =>
IF (SIANG = '0') AND (MALAM = '1') AND (DARURAT = '0') THEN
nextstate <= MODE_MALAM;
IF (COUNTER<=5) THEN
M_US <= '1';
K_US <= '0';
H_US <= '0';
IF (COUNTER <= 4) THEN
M_BT <= '0';

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 11


IF (SIANG = '0') AND (MALAM = '1') AND (DARURAT = '0') THEN
nextstate <= MODE_MALAM;
END IF;
IF (SIANG = '0') AND (MALAM = '0') AND (DARURAT = '1') THEN
nextstate <= MODE_DARURAT;
END IF;
WHEN MODE_MALAM =>
IF (SIANG = '0') AND (MALAM = '1') AND (DARURAT = '0') THEN
nextstate <= MODE_MALAM;
IF (COUNTER<=5) THEN
M_US <= '1';
K_US <= '0';
H_US <= '0';
IF (COUNTER <= 4) THEN
M_BT <= '0';
K_BT <= '0';
H_BT <= '1';
ELSE
M_BT <= '0';
K_BT <= '1';
H_BT <= '0';
END IF;
ELSIF (COUNTER > 5) AND (COUNTER <= 10) THEN
M_BT <= '1';
K_BT <= '0';
H_BT <= '0';
IF (COUNTER <= 9) THEN
M_US <= '0';
K_US <= '0';

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 2


H_US <= '1';
ELSE
M_US <= '0';
K_US <= '1';
H_US <= '0';
END IF;
ELSIF (COUNTER > 10) THEN
rst <= '0';
END IF;
END IF;
IF (SIANG = '1') AND (MALAM = '0') AND (DARURAT = '0') THEN
nextstate <= MODE_SIANG;
END IF;
IF (SIANG = '0') AND (MALAM = '0') AND (DARURAT = '1') THEN
nextstate <= MODE_DARURAT;
END IF;
WHEN MODE_DARURAT =>
IF (SIANG = '0') AND (MALAM = '0') AND (DARURAT = '1') THEN
nextstate <= MODE_DARURAT;
M_US <= '0';
M_BT <= '0';
H_US <= '0';
H_BT <= '0';
IF (COUNTER <= 1) OR ((COUNTER > 2) AND

(COUNTER <= 3)) THEN

K_US <= '1';


K_BT <= '0';

ELSIF ((COUNTER > 1) AND (COUNTER <= 2)) OR

((COUNTER > 3) AND (COUNTER <= 4)) THEN

K_US <= '0';


K_BT <= '1';

END IF;
IF (COUNTER > 4) THEN
rst <= '0';
END IF;
END IF;
IF (SIANG = '1') AND (MALAM = '0') AND (DARURAT = '0') THEN
nextstate <= MODE_SIANG;
END IF;
IF (SIANG = '0') AND (MALAM = '1') AND (DARURAT = '0') THEN
nextstate <= MODE_MALAM;
END IF;

END CASE;

END PROCESS;

END TRAFFICLIGHT;

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 3


Lampiran 2: Script percobaan 4B

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;
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;
ARCHITECTURE behavioral OF top_level_vhd IS
SIGNAL M_US : STD_LOGIC;
SIGNAL K_US : STD_LOGIC;
SIGNAL H_US : STD_LOGIC;
SIGNAL M_BT : STD_LOGIC;
SIGNAL K_BT : STD_LOGIC;
SIGNAL H_BT : STD_LOGIC;
COMPONENT display_vhd IS
PORT(
i_clk : IN STD_LOGIC;
i_M_US : IN STD_LOGIC;
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;
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;
BEGIN
module_vga : display_vhd

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 13

 top_level_vhd.vhd (untuk percobaan 4C)


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;
BEGIN
module_vga : display_vhd
PORT MAP (
i_clk => CLOCK_50,
i_M_US => M_US,
i_K_US => K_US,
Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 4
i_H_US => H_US,
i_M_BT => M_BT,
i_K_BT => K_BT,
i_H_BT => H_BT,
VGA_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
);
M_US <= SW(0) ;
K_US <= SW(1) ;
H_US <= SW(2) ;
M_BT <= SW(3) ;
K_BT <= SW(4) ;
H_BT <= SW(5) ;
END behavioral;

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 5


Lampiran 3: Script percobaan 4C

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;
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;
ARCHITECTURE behavioral OF top_level_vhd IS
SIGNAL M_US : STD_LOGIC;
SIGNAL K_US : STD_LOGIC;
SIGNAL H_US : STD_LOGIC;
SIGNAL M_BT : STD_LOGIC;
SIGNAL K_BT : STD_LOGIC;
SIGNAL H_BT : STD_LOGIC;
SIGNAL x : STD_LOGIC;
SIGNAL y : STD_LOGIC;
SIGNAL z : STD_LOGIC;
COMPONENT display_vhd IS
PORT(
i_clk : IN STD_LOGIC;
i_M_US : IN STD_LOGIC;
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;
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;

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 14

 fsm.vhd (untuk operasi GCD)


i_H_BT : IN STD_LOGIC;
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;
COMPONENT fsmlampu2 is
port(SIANG, MALAM, DARURAT, clk : IN STD_LOGIC;
M_US, K_US, H_US, M_BT, K_BT, H_BT : OUT STD_LOGIC);
Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 6
END COMPONENT;
BEGIN
module_vga : display_vhd
PORT MAP (
i_clk => CLOCK_50,
i_M_US => M_US,
i_K_US => K_US,
i_H_US => H_US,
i_M_BT => M_BT,
i_K_BT => K_BT,
i_H_BT => H_BT,
VGA_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
);
moduler_vga : fsmlampu2
PORT MAP
(SIANG => x,
MALAM => y,
DARURAT => z,
clk => CLOCK_50,
M_US => M_US,
K_US => K_US,
H_US => H_US,
M_BT => M_BT,
K_BT => K_BT,
H_BT => H_BT);

x <= SW(0);
y <= SW(1);
z <= SW(2);
M_US <= M_US ;
K_US <= K_US ;
H_US <= H_US ;
M_BT <= M_BT ;
K_BT <= K_BT ;
H_BT <= H_BT ;
END behavioral;

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 7


Lampiran 4: Script blok display
vga.vhd
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 : 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;
o_horiz_sync : OUT STD_LOGIC;
o_vert_sync : OUT STD_LOGIC;
o_pixel_row : OUT STD_LOGIC_VECTOR( 9 DOWNTO 0 );
o_pixel_column : OUT STD_LOGIC_VECTOR( 9 DOWNTO 0 ));

END vga;
ARCHITECTURE behavioral OF vga IS
CONSTANT TH : INTEGER := 800;
CONSTANT THB1 : INTEGER := 660;
CONSTANT THB2 : INTEGER := 756;
CONSTANT THD : INTEGER := 640;
CONSTANT TV : INTEGER := 525;
CONSTANT TVB1 : INTEGER := 494;
CONSTANT TVB2 : INTEGER := 495;
CONSTANT TVD : INTEGER := 480;
SIGNAL clock_25MHz : STD_LOGIC;
SIGNAL horiz_sync : STD_LOGIC;
SIGNAL vert_sync : STD_LOGIC;
SIGNAL video_on : STD_LOGIC;
SIGNAL video_on_v : STD_LOGIC;
SIGNAL video_on_h : STD_LOGIC;
SIGNAL h_count : STD_LOGIC_VECTOR( 9 DOWNTO 0 );
SIGNAL v_count : STD_LOGIC_VECTOR( 9 DOWNTO 0 );
BEGIN
video_on <= video_on_h AND video_on_v;
o_red <= i_red AND video_on;
o_green <= i_green AND video_on;
o_blue <= i_blue AND video_on;
o_horiz_sync <= horiz_sync;
o_vert_sync <= vert_sync;
PROCESS (i_clk)
BEGIN
IF i_clk'EVENT AND i_clk='1' THEN
IF (clock_25MHz = '0') THEN
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;

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 8


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;
IF ( v_count <= TVB2-1 ) AND ( v_count >= TVB1-1 ) THEN
vert_sync <= '0';
ELSE
vert_sync <= '1';
END IF;
IF ( h_count <= THD-1 ) THEN
video_on_h <= '1';
o_pixel_column <= h_count;

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 18

 display_vhd.vhd (untuk percobaan 4B & 4C)

v_count <= v_count + 1;


END IF;
END IF;
IF ( v_count <= TVB2-1 ) AND ( v_count >= TVB1-1 ) THEN
vert_sync <= '0';
ELSE
vert_sync <= '1';
END IF;
IF ( h_count <= THD-1 ) THEN
video_on_h <= '1';
o_pixel_column <= h_count;
ELSE
video_on_h <= '0';
END IF;
IF ( v_count <= TVD-1 ) THEN
video_on_v <= '1';
o_pixel_row <= v_count;
ELSE
video_on_v <= '0';
END IF;
END PROCESS;
END behavioral;

display_vhd.vhd
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_ARITH.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY display_vhd IS
PORT(
i_clk : IN STD_LOGIC;
i_M_US : IN STD_LOGIC;
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;
VGA_R : OUT STD_LOGIC_VECTOR( 5 DOWNTO 0 );
VGA_G : OUT STD_LOGIC_VECTOR( 5 DOWNTO 0 );

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 9


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 display_vhd;
ARCHITECTURE behavioral OF display_vhd IS
SIGNAL red : STD_LOGIC_VECTOR (5 DOWNTO 0);
SIGNAL green : STD_LOGIC_VECTOR (5 DOWNTO 0);
SIGNAL blue : STD_LOGIC_VECTOR (5 DOWNTO 0);
SIGNAL red_color : STD_LOGIC_VECTOR (7 DOWNTO 0);
SIGNAL green_color : STD_LOGIC_VECTOR (7 DOWNTO 0);
SIGNAL blue_color : STD_LOGIC_VECTOR (7 DOWNTO 0);
SIGNAL pixel_row : STD_LOGIC_VECTOR (9 DOWNTO 0);
SIGNAL pixel_column : STD_LOGIC_VECTOR (9 DOWNTO 0);
SIGNAL red_on : STD_LOGIC;
SIGNAL green_on : STD_LOGIC;
SIGNAL blue_on : STD_LOGIC;
COMPONENT vga IS
PORT(
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;
o_horiz_sync : OUT STD_LOGIC;
o_vert_sync : OUT STD_LOGIC;
o_pixel_row : OUT STD_LOGIC_VECTOR( 9 DOWNTO 0 );
o_pixel_column : OUT STD_LOGIC_VECTOR( 9 DOWNTO 0 ));

END COMPONENT;
COMPONENT color_rom_vhd IS
PORT(
i_M_US : IN STD_LOGIC;
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 DOWNTO 0 );
i_pixel_row : IN STD_LOGIC_VECTOR( 9 DOWNTO 0 );
o_red : OUT STD_LOGIC_VECTOR( 7 DOWNTO 0 );

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 19

COMPONENT color_rom_vhd IS
PORT(
i_M_US : IN STD_LOGIC;
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 DOWNTO 0 );
i_pixel_row : IN STD_LOGIC_VECTOR( 9 DOWNTO 0 );
o_red : OUT STD_LOGIC_VECTOR( 7 DOWNTO 0 );
o_green : OUT STD_LOGIC_VECTOR( 7 DOWNTO 0 );
o_blue : OUT STD_LOGIC_VECTOR( 7 DOWNTO 0 ));
END COMPONENT;
BEGIN
vga_driver0 : vga

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 10


PORT MAP (
i_clk => 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);
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) ;
PROCESS(red_on,green_on,blue_on,red,green,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;
IF (blue_on = '1' ) THEN VGA_B <= blue;
ELSE VGA_B <= "000000";
END IF;
END PROCESS;
END behavioral;

pll_vhd.vhd
LIBRARY ieee;
USE ieee.std_logic_1164.all;
LIBRARY altera_mf;
USE altera_mf.all;
ENTITY pll_vhd IS
PORT
(
inclk0 : IN STD_LOGIC := '0';
c0 : OUT STD_LOGIC ;
locked : OUT STD_LOGIC
);
END pll_vhd;
ARCHITECTURE SYN OF pll_vhd IS
SIGNAL sub_wire0 : STD_LOGIC_VECTOR (5 DOWNTO 0);
SIGNAL sub_wire1 : STD_LOGIC ;
SIGNAL sub_wire2 : STD_LOGIC ;
SIGNAL sub_wire3 : STD_LOGIC ;
SIGNAL sub_wire4 : STD_LOGIC_VECTOR (1 DOWNTO 0);
SIGNAL sub_wire5_bv : BIT_VECTOR (0 DOWNTO 0);
SIGNAL sub_wire5 : STD_LOGIC_VECTOR (0 DOWNTO 0);

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 11


COMPONENT altpll
GENERIC (
clk0_divide_by : NATURAL;
clk0_duty_cycle : NATURAL;
clk0_multiply_by : NATURAL;
clk0_phase_shift : STRING;
compensate_clock : STRING;
gate_lock_signal : STRING;
inclk0_input_frequency : NATURAL;
intended_device_family : STRING;
invalid_lock_multiplier : NATURAL;
lpm_hint : STRING;
lpm_type : STRING;
operation_mode : STRING;
port_activeclock : STRING;
port_areset : STRING;
port_clkbad0 : STRING;
port_clkbad1 : STRING;
port_clkloss : STRING;
port_clkswitch : STRING;
port_configupdate : STRING;
port_fbin : STRING;
port_inclk0 : STRING;
port_inclk1 : STRING;
port_locked : STRING;
port_pfdena : STRING;
port_phasecounterselect : STRING;
port_phasedone : STRING;
port_phasestep : STRING;
port_phaseupdown : STRING;
port_pllena : STRING;
port_scanaclr : STRING;
port_scanclk : STRING;
port_scanclkena : STRING;
port_scandata : STRING;
port_scandataout : STRING;
port_scandone : STRING;
port_scanread : STRING;
port_scanwrite : STRING;
port_clk0 : STRING;
port_clk1 : STRING;
port_clk2 : STRING;
port_clk3 : STRING;
port_clk4 : STRING;
port_clk5 : STRING;
port_clkena0 : STRING;
port_clkena1 : STRING;
port_clkena2 : STRING;
port_clkena3 : STRING;
port_clkena4 : STRING;
port_clkena5 : STRING;
port_extclk0 : STRING;
port_extclk1 : STRING;
port_extclk2 : STRING;
port_extclk3 : STRING;
valid_lock_multiplier : NATURAL
);
PORT (

inclk : IN STD_LOGIC_VECTOR (1 DOWNTO 0);


locked : OUT STD_LOGIC ;
clk : OUT STD_LOGIC_VECTOR (5 DOWNTO 0)

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 12


);
END COMPONENT;
BEGIN
sub_wire5_bv(0 DOWNTO 0) <= "0";
sub_wire5 <= To_stdlogicvector(sub_wire5_bv);

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 2


3

);
PORT (

inclk : IN STD_LOGIC_VECTOR (1 DOWNTO 0);


locked : OUT STD_LOGIC ;
clk : OUT STD_LOGIC_VECTOR (5 DOWNTO 0)

);
END COMPONENT;
BEGIN
sub_wire5_bv(0 DOWNTO 0) <= "0";
sub_wire5 <= To_stdlogicvector(sub_wire5_bv);
sub_wire1 <= sub_wire0(0);
c0 <= sub_wire1;
locked <= sub_wire2;
sub_wire3 <= inclk0;
sub_wire4 <= sub_wire5(0 DOWNTO 0) & sub_wire3;
altpll_component : altpll
GENERIC MAP (
clk0_divide_by => 2,
clk0_duty_cycle => 50,
clk0_multiply_by => 1,
clk0_phase_shift => "0",
compensate_clock => "CLK0",
gate_lock_signal => "NO",
inclk0_input_frequency => 20000,
intended_device_family => "Cyclone II",
invalid_lock_multiplier => 5,
lpm_hint => "CBX_MODULE_PREFIX=pll_vhd",
lpm_type => "altpll",
operation_mode => "NORMAL",
port_activeclock => "PORT_UNUSED",
port_areset => "PORT_UNUSED",
port_clkbad0 => "PORT_UNUSED",
port_clkbad1 => "PORT_UNUSED",
port_clkloss => "PORT_UNUSED",
port_clkswitch => "PORT_UNUSED",
port_configupdate => "PORT_UNUSED",
port_fbin => "PORT_UNUSED",
port_inclk0 => "PORT_USED",
port_inclk1 => "PORT_UNUSED",
port_locked => "PORT_USED",
port_pfdena => "PORT_UNUSED",
port_phasecounterselect => "PORT_UNUSED",
port_phasedone => "PORT_UNUSED",
port_phasestep => "PORT_UNUSED",
port_phaseupdown => "PORT_UNUSED",
port_pllena => "PORT_UNUSED",
port_scanaclr => "PORT_UNUSED",
port_scanclk => "PORT_UNUSED",
port_scanclkena => "PORT_UNUSED",
port_scandata => "PORT_UNUSED",
port_scandataout => "PORT_UNUSED",
port_scandone => "PORT_UNUSED",

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 13


port_scanread => "PORT_UNUSED",
port_scanwrite => "PORT_UNUSED",
port_clk0 => "PORT_USED",
port_clk1 => "PORT_UNUSED",
port_clk2 => "PORT_UNUSED",
port_clk3 => "PORT_UNUSED",
port_clk4 => "PORT_UNUSED",
port_clk5 => "PORT_UNUSED",
port_clkena0 => "PORT_UNUSED",
port_clkena1 => "PORT_UNUSED",
port_clkena2 => "PORT_UNUSED",
port_clkena3 => "PORT_UNUSED",
port_clkena4 => "PORT_UNUSED",
port_clkena5 => "PORT_UNUSED",
port_extclk0 => "PORT_UNUSED",
port_extclk1 => "PORT_UNUSED",
port_extclk2 => "PORT_UNUSED",
port_extclk3 => "PORT_UNUSED",
valid_lock_multiplier => 1
)
PORT MAP (
inclk => sub_wire4,
clk => sub_wire0,
locked => sub_wire2
);
END SYN;

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 14


Lampiran 5: Script percobaan 4D

kalkulator.vhd
library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.std_logic_arith.all;
use IEEE.std_logic_unsigned.all;
use work.all;
entity kalkulator is
port( rst, clk, go_i: in std_logic;
x_i, y_i: in std_logic_vector( 3 downto 0 );
d_o: out std_logic_vector( 3 downto 0 )
);
RANGKAIAN LOGIKA SEKUENSIAL 63
end kalkulator;
architecture kalkulator_arc of kalkulator is
component fsm is
port( rst, clk, proceed: in std_logic;
comparison: in std_logic_vector( 1 downto 0 );
enable, xsel, ysel, xld, yld: out std_logic
);
end component;
component mux is
port( rst, sLine: in std_logic;
load, result: in std_logic_vector( 3 downto 0 );
output: out std_logic_vector( 3 downto 0 )
);
end component;
component comparator is
port( rst: in std_logic;
x, y: in std_logic_vector( 3 downto 0 );
output: out std_logic_vector( 1 downto 0 )
);
end component;
component subtractor is
port( rst: in std_logic;
cmd: in std_logic_vector( 1 downto 0 );
x, y: in std_logic_vector( 3 downto 0 );
xout, yout: out std_logic_vector( 3 downto 0 )
);
end component;
component regis is
port( rst, clk, load: in std_logic;
input: in std_logic_vector( 3 downto 0 );
output: out std_logic_vector( 3 downto 0 )
);
end component;
signal xld, yld, xsel, ysel, enable: std_logic;
signal comparison: std_logic_vector( 1 downto 0 );
signal result: std_logic_vector( 3 downto 0 );
signal xsub, ysub, xmux, ymux, xreg, yreg: std_logic_vector( 3
downto 0 );
begin
-- FSM controller
TOFSM: fsm port map( rst, clk, go_i, comparison,
enable, xsel, ysel, xld, yld );
-- Datapath
X_MUX: mux port map( rst, xsel, x_i, xsub, xmux );
Y_MUX: mux port map( rst, ysel, y_i, ysub, ymux );
X_REG: regis port map( rst, clk, xld, xmux, xreg );
Y_REG: regis port map( rst, clk, yld, ymux, yreg );
U_COMP: comparator port map( rst, xreg, yreg, comparison
);
X_SUB: subtractor port map( rst, comparison, xreg, yreg,
xsub, ysub );
OUT_REG: regis port map( rst, clk, enable, xsub, result
Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 15
);
d_o <= result;
end kalkulator_arc;

mux.vhd
library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.std_logic_arith.all;
use IEEE.std_logic_unsigned.all;
entity mux is
port( rst, sLine: in std_logic;
load, result: in std_logic_vector( 3 downto 0 );
output: out std_logic_vector( 3 downto 0 )
);
end mux;
architecture mux_arc of mux is
begin
process( rst, sLine, load, result )
begin
if( rst = '1' ) then
output <= "0000"; -- do nothing
elsif sLine = '0' then
output <= load; -- load inputs
else
output <= result; -- load results
end if;
end process;
end mux_arc;

comparator.vhd
library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.std_logic_arith.all;
use IEEE.std_logic_unsigned.all;
entity comparator is
port( rst: in std_logic;
x, y: in std_logic_vector( 3 downto 0 );
output: out std_logic_vector( 1 downto 0 )
);
end comparator;
architecture comparator_arc of comparator is
begin
process( x, y, rst )
begin
if( rst = '1' ) then
output <= "00"; -- do nothing
elsif( x > y ) then
output <= "10"; -- if x greater
elsif( x < y ) then
output <= "01"; -- if y greater
else
output <= "11"; -- if equivalance.
end if;
end process;
end comparator_arc;

regis.vhd
library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.std_logic_arith.all;
use IEEE.std_logic_unsigned.all;
entity regis is
port( rst, clk, load: in std_logic;
input: in std_logic_vector( 3 downto 0 );
output: out std_logic_vector( 3 downto 0 )

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 16


);
end regis;
architecture regis_arc of regis is
begin
process( rst, clk, load, input )
begin
if( rst = '1' ) then
output <= "0000";
elsif( clk'event and clk = '1') then
if( load = '1' ) then
output <= input;
end if;
end if;
end process;
end regis_arc;

subtractor.vhd
library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.std_logic_arith.all;
use IEEE.std_logic_unsigned.all;
entity subtractor is
port( rst: in std_logic;
cmd: in std_logic_vector( 1 downto 0 );
x, y: in std_logic_vector( 3 downto 0 );
xout, yout: out std_logic_vector( 3 downto 0 )
);
end subtractor;
architecture subtractor_arc of subtractor is
begin
process( rst, cmd, x, y )
begin
if( rst = '1' or cmd = "00" ) then -- not active.
xout <= "0000";
yout <= "0000";
elsif( cmd = "10" ) then -- x is greater
xout <= ( x - y );
yout <= y;
elsif( cmd = "01" ) then -- y is greater
xout <= x;
yout <= ( y - x );
else
xout <= x; -- x and y are equal
yout <= y;
end if;
end process;
end subtractor_arc;

fsm.vhd (untuk operasi GCD)


use IEEE.std_logic_1164.all;
use IEEE.std_logic_arith.all;
use IEEE.std_logic_unsigned.all;
entity fsm is
port( rst, clk, proceed: in std_logic;
comparison: in std_logic_vector( 1 downto 0 );
enable, xsel, ysel, xld, yld: out std_logic
);
end fsm;
architecture fsm_arc of fsm is
type states is ( init, s0, s1, s2, s3, s4, s5 );
signal nState, cState: states;
begin
process( rst, clk )
begin
if( rst = '1' ) then
cState <= init;

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 17


elsif( clk'event and clk = '1' ) then
cState <= nState;
end if;
end process;
process( proceed, comparison, cState )
begin
case cState is
when init => if( proceed = '0' ) then
nState <= init;
else
nState <= s0;
end if;
when s0 => enable <= '0';
xsel <= '0';
ysel <= '0';
xld <= '0';
yld <= '0';
nState <= s1;
when s1 => enable <= '0';
xsel <= '0';
ysel <= '0';
xld <= '1';
yld <= '1';
nState <= s2;
when s2 => xld <= '0';
yld <= '0';67
if( comparison = "10" ) then
nState <= s3;
elsif( comparison = "01" ) then
nState <= s4;
elsif( comparison = "11" ) then
nState <= s5;
end if;
when s3 => enable <= '0';
xsel <= '1';
ysel <= '0';
xld <= '1';
yld <= '0';
nState <= s2;
when s4 => enable <= '0';
xsel <= '0';
ysel <= '1';
xld <= '0';
yld <= '1';
nState <= s2;
when s5 => enable <= '1';
xsel <= '1';
ysel <= '1';
xld <= '1';
yld <= '1';
nState <= s0;
when others => nState <= s0;
end case;
end process;
end fsm_arc;

fsm.vhd (untuk operasi modulo)


library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.std_logic_arith.all;
use IEEE.std_logic_unsigned.all;
entity fsm is
port( rst, clk, proceed: in std_logic;
comparison: in std_logic_vector( 1 downto 0 );
enable, xsel, ysel, xld, yld: out std_logic
);
Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 18
end fsm;
architecture fsm_arc of fsm is
type states is ( init, s0, s1, s2, s3, s4, s5 );
signal nState, cState: states;
begin
process( rst, clk )
begin
if( rst = '1' ) then
cState <= init;
elsif( clk'event and clk = '1' ) then
cState <= nState;
end if;
end process;
process( proceed, comparison, cState )
begin
case cState is
when init => if( proceed = '0' ) then
nState <= init;
else
nState <= s0;
end if;
when s0 => enable <= '0';
xsel <= '0';
ysel <= '0';
xld <= '0';
yld <= '0';
nState <= s1;
when s1 => enable <= '0';
xsel <= '0';
ysel <= '0';
xld <= '1';
yld <= '1';
nState <= s2;
when s2 => xld <= '0';
yld <= '0';
if( comparison = "10" ) then
nState <= s3;
elsif( comparison = "01" ) then
nState <= s5;
elsif( comparison = "11" ) then
nState <= s3;
end if;
when s3 => enable <= '0';
xsel <= '1';
ysel <= '0';
xld <= '1';
yld <= '0';
nState <= s2;
when s4 => enable <= '0';
xsel <= '0';
ysel <= '1';
xld <= '0';
yld <= '1';
nState <= s2;
when s5 => enable <= '1';
xsel <= '1';
ysel <= '1';
xld <= '1';
yld <= '1';
nState <= s0;
when others => nState <= s0;
end case;
end process;

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 19


end fsm_arc;

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 20

Anda mungkin juga menyukai