Pengenalan VHDL
dengan skema ini sangatlah mudah dan jelas karena langsung diketahui hubungan
antara gerbang satu dengan yang lainnya. Sebagian besar orang lebih menyukai
menggunakan skema ini untuk mendesain rangkaian digital.
(Sumber : http://digitronways.blogspot.coml)
Gambar 7.1. Desain Skema Rangkaian Gerbang Logika
Berikut ini adalah gambaran tahapan pembuatan desain sebuah rangkaian logika
dengan menggunakan cara-cara konvensional. Perbedaan tahapan desain rangkaian
logika konvensional dan dengan konsep VHDL terlihat pada gambar 7.2 dan 7.3.
[Pengenalan VHDL] BAB VII
(Sumber : http://digitronways.blogspot.coml)
Gambar 7.2 Tahapan Desain Rangkaian Logika Konvensional.
Dengan adanya bahasa perangkat keras VHDL ini, metode konvensional diatas dapat
diminimalkan, sehingga proses desainnya akan lebih ringan dan cepat. Proses
tersebut dipaparkan pada gambar dibawah ini.
(Sumber : http://digitronways.blogspot.coml)
Gambar 7.3.Tahapan Desain Rangkaian Logika VHDL.
[Pengenalan VHDL] BAB VII
B. Terlihat seperti pada gambar 7.3 bahwa proses penggunaan persamaan bolean
dan skema akan diabaikan dalam mendesain dengan teknologi VHDL ini, dimana
desain langsung dideskripsikan melalui program VHDL yang kemudian
dimasukkan dalam sebuah IC.
C.
B.Mendesain Rangkaian Digital dengan VHDL
VHDL merupakan case insensitive, dimana penamaan dan pelabelan harus
mulai dengan huruf baik kecil maupun besar sama saja, terdiri dari hanya karakter
alfanumerik, dan dapat mengandung underscore, tidak boleh ada karakter lain, tidak
boleh mempunyai dua underscore berturutan dan tidak boleh diakhiri dengan
underscore. Semua nama dan label yang diberikan di entity dan architecture harus
unik, tidak boleh sama.
VHDL merupakan bahasa format bebas, yang mengijinkan penggunaan spasi
untuk mempermudah pembacaan. Penulisan komen dimulai dengan dan untuk
mengakhiri sebuah entity, architecture atau proses sekuensial menggunakan
perintah end. Perlu diperhatikan, satu file terdiri dari entity nama file dan nama file
harus sesuai dengan nama entity.
Deskripsi VHDL terdiri dari dua bagian pernyataan entity dan pernyataan
architecture. Entity mendeskripsikan antarmuka (misal masukan dan keluaran),
sedangkan architecture mendeskripsikan implementasi rangkaian.
Pernyataan entity memerlukan nama dengan menentukan port masukan dan
keluaran. Penentuan port mengandung nama, mode, dan tipe data. Mode port
terdiri dari 4 jenis, yaitu IN (driver di luar entity dan dapat dibaca), OUT (driver di
dalam entity dan tidak dapat dibaca), INOUT (driver di dalam dan di luar entity, dan
dapat dibaca), dan BUFFER (driver di dalam entity dan dapat dibaca).
Pernyataan Architecture memerlukan nama, biasanya namanya
disesuaikan dengan nama modelnya, referensi nama terkait di dalam entity,
menentukan fungsi dari entity menggunakan satu atau beberapa jenis implementasi,
dan architecture terkait dengan entity, sehingga memungkinkan banyak architecture
untuk satu entity, tetapi hanya satu yang terhubung sekali waktu.
Model architecture VHDL terdiri dari fungsi functional logic, behavioral
terdiri informasi pewaktuan, structural terdiri dari component dan wire, dan
physical menentukan informasi paket. Setiap model dapat digunakan untuk
mendeskripsikan fungsionalitas dari rangkaian logika. Model bukanlah saling
eksklusif, namun saling terkait.
Penyambungan dalam VHDL dapat berupa wire atau bus (kumpulan wire).
Wire dapat dituliskan sebagai SIGNAL a: STD_LOGIC;, bus (dengan 8 wire) dapat
[Pengenalan VHDL] BAB VII
Contoh:
ENTITY contoh IS
PORT ( x1, x2, x3 : IN BIT ; f : OUT BIT );
END;
ARCHITECTURE fungsilogik OF contoh IS
BEGIN
f <= (x1 AND x2) OR (NOT x2 AND x3) ;
END;
Penulisan END bisa dituliskan dengan menuliskan END <nama
ENTITY> untuk entity, dan END <nama ARCHITECTURE> untuk
architecture.
entity comparator is
port(a : in std_logic;
b : in std_logic;
aequab : out std_logic);
end comparator;
architecture RTL of comparator is
begin
process
[Pengenalan VHDL] BAB VII
begin
if a = b then
aequab <= '1';
else
aequab <= '0';
end if;
end process;
end RTL;
2. Multiplexer
library ieee;
use ieee.std_logic_1164.all;
entity muks21 is
port(s: in std_logic_vector (1 downto 0);
a,b: in std_logic;
mux_out: out std_logic);
end;
architecture behav of muks21 is
begin
mux_out<= a when (s(0)='1') else
b when (s(1)='1') else 'Z';
end behav;
Listing kedua :
library ieee;
use ieee.std_logic_1164.all;
entity muks21 is
port(s: in std_logic_vector (1 downto 0);
a,b: in std_logic;
mux_out: out std_logic);
end;
architecture behav of muks21 is
begin
mux_out<= a when (s(0)='1') else
b when (s(1)='1') else 'Z';
end behav;
[Pengenalan VHDL] BAB VII
3. Demultiplexer
library ieee;
use ieee.std_logic_1164.all;
entity Demultiplexor is
port(i, E, S: in std_logic;
O1, O2: in std_logic;
);
End Demultiplexor;
architecture RTL of Demultiplexor is
begin
process
begin
O1 <= 1 and E and S; else
O2 <= 1 and E and not(S);
end process;
end RTL;
4. Register
library ieee;
use ieee.std_logic_1164.all;
use.ieee.std_logic_aruth.all
entity reg8 is
port (
clk : in std_logic;
rst : in std_logic;
ena : in_std_logic;
d : in_std_logic_vector (7 downto 0);
q : out_std_logic_vector (7 downto 0);
); end reg8;
Architecture a of reg8 is
signal d_s : std_logic_vector (7 downto 0);
signal q_s : std_logic_vector (7 downto 0);
begin
d_s <= d when ena = 1 else q_s;
reg8_bit : process (clk,rst)
begin
if (clkevent and clk = 1) then
if (rst = 1) then
q_s <- 00000000;
[Pengenalan VHDL] BAB VII
else
q_s <- d_s;
end if;
end process;
q <- q_s;
end a;
5. Dekoder BCD
library ieee;
use IEEE.std_logic_1164.all;
entity bcd_7 is
port(
i: in bit_vector(3 downto 0);
o: out std_logic_vector(6 downto 0);
ca: out std_logic_vector(3 downto 0));
end bcd_7;
o <= "0000000";
when "1001" =>
o <= "0010000";
when "1010" =>
o <= "0001000";
when "1011" =>
o <= "0000011";
when "1100" =>
o <= "1000110";
when "1101" =>
o <= "0100001";
when "1110" =>
o <= "0000110";
when "1111" =>
o <= "0001110";
end case;
end process;
end RTL;