Operasi yang telah dipelajari hingga percobaan sebelum ini adalah menggunakan pendekatan
abstraksi gate-level, dimana operasi dilakukan dalam bit per bit. Sekarang banyak pihak sudah
menggunakan pendekatan high level abstraction, dimana dalam implementasinya tentu lebih
praktis. Di percobaan ini terdapat operasi penjumlahan dan pengurangan yang memanfaatkan
library unsigned (IEEE.STD_LOGIC_UNSIGNED.ALL), sehingga tidak perlu lagi menggunakan
rancangan operasi penjumlahan/pengurangan dengan abstraksi gate-level. Dengan library
tersebut, operasi matematika dapat dilakukan dengan menggunakan operatornya langsung.
Pada percobaan ini, akan dibuat suatu “kalkulator sederhana”, yang dapat digunakan untuk
melakukan 3 operasi, yaitu : penjumlahan, pengurangan, dan komparasi. Kalkulator ini memiliki
dua input bilangan bulat 4-bit yang akan dioperasikan. Input dapat diatur dari switch SW0
hingga SW3 (input pertama) dan switch SW4 hingga SW7 (input kedua). Hasil operasi akan
ditampilkan pada 7-segment HEX0 pada FPGA. Hasil operasi disesuaikan dengan batas
representasi data sebuah 7-segment, yaitu dari 0-9, di luar itu tidak akan ditampilkan pada 7-
segment. Pemilihan operasi dapat dilakukan dengan sebuah selector 2-bit yang diatur dengan
menggunakan SW8 dan SW9. Pilihan operasi (selector) ditampilkan pada 7-segment HEX3 pada
FPGA, tampilan angka 0,1, dan 2 masing-masing menunjukan pemilihan operasi komparasi,
pengurangan, dan penjumlahan. Jika selector diatur bernilai 3, maka hasil operasi sama dengan
nol. Gambar 6 menunjukan input dan output percobaan ini sesuai dengan deskripsi di atas.
Display pilihan
operasi
Hasil
operasi
Arsitektur program ini dibagi dalam 6 blok, yaitu blok adder untuk operasi penjumlahan, blok
subtractor untuk operasi pengurangan, blok comparator untuk operasi komparasi, blok
multiplexer sebagai selector, blok display untuk tampilan pada 7-segment, serta blok kalkulator
sebagai top-level. Blok kalkulator, display, multiplexer, dan adder diberikan lengkap dalam VHDL,
sementara blok subtractor dan comparator dibuat oleh praktikan.
PROSEDUR PERCOBAAN:
1. Buatlah project baru pada folder yang berbeda dengan percobaan-percobaan sebelumnya.
2. Buatlah file-file VHDL untuk masing-masing blok dengan mengetikkan script di bawah ini,
dan simpan dalam folder project yang telah dibuat. Perhatikan bahwa nama masing-masing
file VHDL harus sama dengan nama entity pada program.
A. Blok kalkulator / top-level (simpan dengan nama file 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(
input1, input2: in std_logic_vector(3 downto 0); -- input angka
in_sel: in std_logic_vector(1 downto 0); -- selektor operasi
result: out std_logic_vector(3 downto 0); -- output hasil operasi
a_7segment, b_7segment, c_7segment, d_7segment: out std_logic_vector(6
downto 0) -- display 7-segment
);
end kalkulator;
-- komponen selektor
component mux is
port(
sel: in std_logic_vector(1 downto 0);
com, sub, add: in std_logic_vector(3 downto 0);
output: out std_logic_vector(3 downto 0)
);
end component;
begin
-- alur data
X_COM: comparator port map(input1, input2, r_com);
X_SUB: subtractor port map(input1, input2, r_sub );
X_ADD: adder port map(input1, input2, r_add );
X_MUX: mux port map(in_sel, r_com, r_sub, r_add, r_mux);
X_DIS: display7S port map (in_sel, r_mux, a_7segment, b_7segment, c_7segment,
d_7segment);
-- hasil
result <= r_mux;
end kalkulator_arc;
entity display7S is
port(
sel: in std_logic_vector(1 downto 0);
-- selektor operasi
r_operation: in std_logic_vector(3 downto 0);
-- hasil operasi
a_7S, b_7S, c_7S, d_7S: out std_logic_vector(6 downto 0) -- display
keseluruhan operasi
);
end display7S;
end process;
end display7S_arc;
entity mux is
port(
sel: in std_logic_vector (1 downto 0); -- selektor operasi
com, sub, add: in std_logic_vector(3 downto 0); -- hasil operasi
komparasi, pengurangan, penjumlahan
output: out std_logic_vector(3 downto 0) -- output selektor
);
end mux;
end process;
end mux_arc;
entity adder is
port(
x, y: in std_logic_vector(3 downto 0); -- input angka
output: out std_logic_vector(3 downto 0) -- output hasil operasi
);
end adder;