Anda di halaman 1dari 10

MODUL 3 MENGGUNAKAN 7 SEGMENT DAN BLINKING LED

Aloysius Efrata Sumaryo 13220057


Asisten: Christian Reivan Banjarnahor
Tanggal Percobaan: 21/09/2021
EL2102 – Sistem Digital
Laboratorium Dasar Teknik Elektro - Sekolah Teknik Elektro dan Informatika ITB

Abstrak
Abstrak mempelajari penggunaan 7 segment dengan BCD
decoder serta mengedipkan led pada FPGA dengan
pendekatan menggunakan bahasa VHDL. Bahasa VHDL
yang digunakan menjurus pada implementasi combinational
circuit, D-flip-flop, serta clock divider. Praktikum dilakukan
dengan bantuan software quartus prime, Modelsim dan Altera
Cyclone untuk membantu pemahaman terhadap praktikum.
Setelah praktikum didapat hasil sesuai spesifikasi serta
ketentuan yang diinginkan.
Kata kunci: VHDL, combinational circuit, D-flip-
flop, clock divider, Praktikum.

1. PENDAHULUAN Gambar 2-1 Flowchart perancangan FPGA


Percobaan pada praktikum ini terbagi menjadi 2 2.2. BCD Decoder
sub-modul. Sub-modul pertama memberikan
pemahaman tentang penggunaan 7 segment BCD Decoder merupakan sebuah rangkaian
terutama dalam membaca skematik serta variasi logika yang digunakan untuk ’mentranslate’
cara dalam mengimplementasikan BCD to 7 kode biner menjadi bilangan desimal. BCD
Segment decoder. Sub-modul kedua memberikan Decoder sendiri tergolong rangkaian logika
pemahaman tentang process, D-flip-flop, dan clock yang kombinasional, berarti output yang
divider pada bahasa VHDL dengan dikeluarkan bergantung dengan input yang
mengimplementasikan led berkedip. dimasukkan(tidak ada penyimpanan
sementara).
2. STUDI PUSTAKA
2.1. FPGA
Field Progammable Gate Array (FPGA)
merupakan sebuah IC digital yang digunakan
untuk mengimplementasikan rangkaian
digital. FPGA sendiri terdiri dari 2 komponen
utama yaitu programmable logic dan
interkoneksi (sambungan terprogram) .
Programmable logic biasanya meliputi jenis
gerbang logika biasa (AND, OR, NOT). FPGA
biasa digunakan untuk meningkatkan
efisiensi rancangan rangkaian dengan
mengurangi pemakaian software. Secara Gambar 2-2 BCD to 7-Segment Decoder
umum alur dari FPGA sebagai berikut.
2.3. Delay Flip-Flop
Delay flip-flop merupakan sebuah rangkaian
elektronik flip-flop(menyimpan sebuah data)
yang digunakan untuk menghambat
perubahan pernyataan keluaran sinyal dari
rangkaian sampai munculnya rising edge dari
sebuah periode clock masukan sinyal.

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 1


Gambar 2-3 D-flip-flop
2.4. Clock Divider
Sesuai namanya clock divider berfungsi untuk
membagi masukan clock dan mengeluarkan
keluaran clock yang baru. Pada praktikum ini
clock divider digunakan untuk
mengubah ’natural clock’ FPGA 50 MHz
menjadi frekuensi yang diinginkan user.
Gambar 3-2 Diagram Metode Percobaan 3B

3. METODOLOGI 4. HASIL DAN ANALISIS


Alat dan komponen yang digunakan pada modul Bagian ini menjelaskan tentang hasil setelah
ini adalah: melakukan percobaan beserta analisis terhadap
1. Komputer yang terinstal program Quartus hasil yang didapat.
Prime Lite serta ModelSim Altera
2. FPGA board tipe Cyclone IV E serial 4.1. BCD to 7-Segment
EP4CE6E22C8 lengkap dengan kabel
penyambung serta kabel supply power
Langkah pada praktikum modul 3 kali ini dapat
dilihat sebagai berikut.

Gambar 4-1 Hasil Simulasi BCD to 7-Segment

Gambar 4-2 Hasil implementasi alat FPGA


Pada percobaan pertama kita melakukan
rancangan desain rangkaian BCD to 7-Segment
Gambar 3-1 Diagram Metode Percobaan 3A
decoder. Berdasarkan percobaan yang sudah
Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 2
dilakukan, walaupun terdapat 3 variasi cara dalam
mendesain decoder kita akan tetap mendapatkan Berdasarkan simulasi di atas didapatkan kedipan
hasil yang sama. LED yang bervariasi sesuai dengan keinginan user.
Tabel 4-1 Truth Table BCD to 7-Segment Decoder Alih-alih menggunakan clock divider dengan reset
yang membagi terus menerus dan kita harus
Des A B C D a b c d e f g menunggu. Implementasi desain clock divider di
0 0 0 0 0 0 0 0 0 0 0 1 drive dengan multiplexer memberikan keleluasaan
1 0 0 0 1 1 0 0 1 1 1 1 bagi user untuk menentukan frekuensi kedipan
2 0 0 1 0 0 0 1 0 0 1 0 sewaktu-waktu. Desain rangkaian seperti ini juga
3 lebih menggambarkan kedipan LED dengan 3
0 0 1 1 0 0 0 0 1 1 0
kecepatan yang berbeda lebih baik daripada desain
4 0 1 0 0 1 0 0 1 1 0 0 clock divider saja.
5 0 1 0 1 0 1 0 0 1 0 0
6 0 1 1 0 0 1 0 0 0 0 0 5. KESIMPULAN
7 0 1 1 1 0 0 0 1 1 1 1 Dari percobaan yang dilakukan dapat disimpulkan
8 1 0 0 0 0 0 0 0 0 0 0 beberapa hal berikut.
9 1 0 0 1 0 0 0 0 1 0 0 1. Simulasi dengan bantuan pembuatan test
Percobaan BCD to 7-Segment Decoder memberikan bench akan lebih efisien daripada melakukan
pemahaman tentang penggunaan diagram simulasi secara manual (force dan clock).
skematik dari FPGA secaara komprehensif. Sesuai 2. Variasi pada BCD to 7-Segment Decoder tidak
dengan truth table diatas input ABCD merupakan akan mempengaruhi hasil yang dikeluarkan
4 bit binary dan menghasilkan output 7 value oleh 7-Segment.
menunjukkan 7 LED pada 7-Segment. Variasi pada
decoder tidak mempengaruhi hasil yang 3. Penggabungan clock divider dengan
didapatkan pada 7-Segment karena fungsi dari multiplexer akan memberikan gambaran
decoder sendiri men-translate biner ke decimal. implementasi kecepatan blinking led pada
Sehingga, selama desain ‘benar’ tidak akan ada FPGA lebih baik.
perbedaan keluaran. 4. FPGA yang kita dapat bekerja secara active-low
Pada saat implementasi alat hasil yang diberikan dimana kondisi voltase rendah menyebabkan
mengikuti truth table yang telah ditulis di atas ini. fungsi internal FPGA aktif.
Pada FPGA secara basicnya kita akan meng-assign
pin FPGA ke input serta 7-Segment pin FPGA ke DAFTAR PUSTAKA
output rangkaian. [1] Brown, Stephen, dan Vranesic, Zvonko,
4.2. Blinking LED Fundamental of Digital Logic Third Edition, 2009.
[2] Arif Sasongko, Modul 3 SisDig, LDTE ITB,
2021.

Gambar 4-3 Hasil Simulasi Blinking LED


Tabel 4-2 Truth Table Multiplexer with ClockDivider
Blinking LED

clockdiv 1 2 freq
0 - - disabled
1 0 0 0,125 Hz
1 0 1 0,25 Hz
1 1 0 0,5 Hz
1 1 1 1 Hz
Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 3
LAMPIRAN
Link Video Praktikum https://youtu.be/JKzhr9LA7HQ
1. Source Code 3A
Variasi 1

LIBRARY ieee;
USE ieee.std_logic_1164.all;

ENTITY bcd3 IS
PORT (
D0,D1,D2,D3 : IN bit;
A,B,C,D,E,F,G : OUT bit
display : out std_logic
);
END bcd3;

ARCHITECTURE behavioral OF bcd3 IS


BEGIN
A <= NOT(D1 OR D3 OR (D2 AND D0) OR (D2 NOR D0));
B <= NOT(NOT D2 OR (D1 NOR D0) OR (D1 AND D0));
C <= NOT((NOT D1) OR D0 OR D2);
D <= NOT(D3 OR (D2 NOR D0) OR (D1 AND (D0 NAND D2)) OR (D2 AND (NOT D1)
AND D0));
E <= NOT((D2 NOR D0) OR (D1 AND (NOT D0)));
F <= NOT(D3 OR (D1 NOR D0) OR (D2 AND (D1 NAND D0)));
G <= NOT(D3 OR (D1 AND (D0 NAND D2)) OR (D2 AND (NOT D1)));
END behavioral;

Variasi 2

library ieee;
use ieee.std_logic_1164.all;

entity bcd_7seg_decoder is

Port ( bcd : in std_logic_vector (3 downto 0);


display : out std_logic;
Seven_Segment : out std_logic_vector (6 downto 0));

end bcd_7seg_decoder;

architecture Behavioral of bcd_7seg_decoder is

begin

Seven_Segment <= "0000001" when bcd = "0000" else --0


"1001111" when bcd = "0001" else --1
"0010010" when bcd = "0010" else --2
"0000110" when bcd = "0011" else --3
"1001100" when bcd = "0100" else --4

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 4


"0100100" when bcd = "0101" else --5
"0100000" when bcd = "0110" else --6
"0001111" when bcd = "0111" else --7
"0000000" when bcd = "1000" else --8
"0000100" when bcd = "1001" else --9
"1111111"; --null

end Behavioral;

Variasi 3

library ieee;
use ieee.std_logic_1164.all;

entity bcd_7seg_decoder is
Port ( bcd : in std_logic_vector (3 downto 0);
Seven_Segment : BUFFER std_logic_vector (6 downto 0);
digtubein : out std_logic_vector (3 downto 0));
end bcd_7seg_decoder;

architecture Behavioral of bcd_7seg_decoder is

signal digtube : std_logic_vector(3 downto 0);

begin

process(bcd)
begin

case bcd is --perhatikan bahwa FPGA active low


when "0000" => Seven_Segment <= "0000001"; --0
when "0001" => Seven_Segment <= "1001111"; --1
when "0010" => Seven_Segment <= "0010010"; --2
when "0011" => Seven_Segment <= "0000110"; --3
when "0100" => Seven_Segment <= "1001100"; --4
when "0101" => Seven_Segment <= "0100100"; --5
when "0110" => Seven_Segment <= "0100000"; --6
when "0111" => Seven_Segment <= "0001111"; --7
when "1000" => Seven_Segment <= "0000000"; --8
when "1001" => Seven_Segment <= "0000100"; --9
when others => Seven_Segment <= "1111111"; --null
end case;

end process;

process(Seven_Segment,digtube)
begin

case Seven_Segment is
when "0000001" => digtube <= "1110";
when "1001111" => digtube <= "1110";
Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 5
when "0010010" => digtube <= "1110";
when "0000110" => digtube <= "1110";
when "1001100" => digtube <= "1110";
when "0100100" => digtube <= "1110";
when "0100000" => digtube <= "1110";
when "0001111" => digtube <= "1110";
when "0000000" => digtube <= "1110";
when "0000100" => digtube <= "1110";
when others => digtube <= "1111";
end case;

end process;
digtubein <= digtube;

end Behavioral;

Test Bench Modul 3A


library ieee;
use ieee.std_logic_1164.all;

entity tb_bcd_7seg_decoder is
end tb_bcd_7seg_decoder;

architecture behavior of tb_bcd_7seg_decoder is

component bcd_7seg_decoder
port(bcd : in std_logic_vector(3 downto 0);
Seven_Segment : out std_logic_vector(6 downto 0));
end component;

signal bcd : std_logic_vector(3 downto 0) := (others => '0');


signal Seven_Segment : std_logic_vector(6 downto 0);

BEGIN
uut: bcd_7seg_decoder
port map(bcd => bcd,
Seven_Segment => Seven_Segment);

stim_proc: process
begin

bcd <= "0000";


wait for 100 ns;
bcd <= "0001";
wait for 100 ns;
bcd <= "0010";
wait for 100 ns;
bcd <= "0011";
wait for 100 ns;
bcd <= "0100";
Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 6
wait for 100 ns;
bcd <= "0101";
wait for 100 ns;
bcd <= "0110";
wait for 100 ns;
bcd <= "0111";
wait for 100 ns;
bcd <= "1000";
wait for 100 ns;
bcd <= "1001";
wait for 100 ns;
end process;

end;

2. Source Code 3B

library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;

entity blinking_led is
port (
std_clock : in std_logic;
clockdiv : in std_logic;
button_1 : in std_logic;
button_2 : in std_logic;
led : out std_logic
);
end blinking_led;

architecture rtl of blinking_led is

--Untuk membuat frekuensi


--Rumus 50Mhz / 100 hz * 0.5
--Contoh 1 hz = 50,000,000/1 * 0.5 =25,000,000
constant c_freq_0_125hz : natural := 200000000;
constant c_freq_0_25hz : natural := 100000000;
constant c_freq_0_5hz : natural := 50000000;
constant c_freq_1hz : natural := 25000000;

-- counter signal:
signal r_freq_0_125hz : natural range 0 to c_freq_0_125hz;
signal r_freq_0_25hz : natural range 0 to c_freq_0_25hz;
signal r_freq_0_5hz : natural range 0 to c_freq_0_5hz;
signal r_freq_1hz : natural range 0 to c_freq_1hz;

-- toggle signal menentukan butuh 'kecepatan' berapa:


signal r_toggle_0_125hz : std_logic := '0';
signal r_toggle_0_25hz : std_logic := '0';
Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 7
signal r_toggle_0_5hz : std_logic := '0';
signal r_toggle_1hz : std_logic := '0';

-- multiplexer untuk membantu memilih sinyal.


signal multiplexer : std_logic;

begin

p_100_hz : process (std_clock) is


begin
if rising_edge(std_clock) then
if r_freq_0_125hz = c_freq_0_125hz-1 then
r_toggle_0_125hz <= not r_toggle_0_125hz;
r_freq_0_125hz <= 0;
else
r_freq_0_125hz <= r_freq_0_125hz + 1;
end if;
end if;
end process p_100_hz;

p_50_hz : process (std_clock) is


begin
if rising_edge(std_clock) then
if r_freq_0_25hz = c_freq_0_25hz-1 then
r_toggle_0_25hz <= not r_toggle_0_25hz;
r_freq_0_25hz <= 0;
else
r_freq_0_25hz <= r_freq_0_25hz + 1;
end if;
end if;
end process p_50_hz;

p_10_hz : process (std_clock) is


begin
if rising_edge(std_clock) then
if r_freq_0_5hz = c_freq_0_5hz-1 then
r_toggle_0_5hz <= not r_toggle_0_5hz;
r_freq_0_5hz <= 0;
else
r_freq_0_5hz <= r_freq_0_5hz + 1;
end if;
end if;
end process p_10_hz;

p_1_hz : process (std_clock) is


begin
if rising_edge(std_clock) then

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 8


if r_freq_1hz = c_freq_1hz-1 then
r_toggle_1hz <= not r_toggle_1hz;
r_freq_1hz <= 0;
else
r_freq_1hz <= r_freq_1hz + 1;
end if;
end if;
end process p_1_hz;

-- multiplexer untuk dip Switch


multiplexer <= r_toggle_0_125hz when (button_1 = '0' and button_2 = '0') else
r_toggle_0_25hz when (button_1 = '0' and button_2 = '1') else
r_toggle_0_5hz when (button_1 = '1' and button_2 = '0') else
r_toggle_1hz;

-
- led dapat digunakan saat input valid dari multiplexer dan clockdiv dinyalakan
led <= multiplexer and clockdiv;

end rtl;

Test Bench 3B
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;

entity blinking_led_tb is
end blinking_led_tb;

architecture behave of blinking_led_tb is

-- 25 MHz = 40 ns (periode)
constant clock_period : time := 20 ns;

signal tb_clock : std_logic := '0';


signal tb_clockdiv : std_logic := '0';
signal tb_button_1 : std_logic := '0';
signal tb_button_2 : std_logic := '0';
signal tb_led : std_logic;

component blinking_led is
port (
std_clock : in std_logic;
clockdiv : in std_logic;
button_1 : in std_logic;
button_2 : in std_logic;
led : out std_logic);
end component blinking_led;
Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 9
begin

DUT : blinking_led
port map (
std_clock => tb_clock,
clockdiv => tb_clockdiv,
button_1 => tb_button_1,
button_2 => tb_button_2,
led => tb_led
);

clk_gen : process is
begin
wait for clock_period/2;
tb_clock <= not tb_clock;
end process clk_gen;

process
begin
tb_clockdiv <= '1';

tb_button_1 <= '0';


tb_button_2 <= '0';
wait for 0.2 sec;

tb_button_1 <= '0';


tb_button_2 <= '1';
wait for 0.2 sec;

tb_button_1 <= '1';


tb_button_2 <= '0';
wait for 0.5 sec;

tb_button_1 <= '1';


tb_button_2 <= '1';
wait for 2 sec;

end process;

end behave;

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 10

Anda mungkin juga menyukai