[Pengenalan VHDL] BAB VII
Pengenalan VHDL A. Pengenalan Bahasa VHDL VHDL adalah kepanjangan dari VHSIC (Very High Speed Integrated Circuits) Hardware Description Language. Pada pertengahan tahun 1980 Departemen Pertahanan Amerika Serikat dan IEEE mensponsori pengembangan bahasa pemrograman untuk perangkat keras dengan tujuan untuk mengembangkan very high-speed integrated circuit. Sampai saat ini bahasa tersebut tetap digunakan sebagai standar industry untuk desain sistem digital. Selain itu bahasa yang digunakan untuk pemrograman perangkat keras yang digunakan secara luas adalah Verilog. Kedua bahasa tersebut mempunyai kemampuan lebih untuk membuat dan mensimulasikan rangkaian digital yang kompleks. Versi ketiga untuk bahasa HDL adalah ABEL (Advanced Boolean Equation Language) yang mana bahasa ini didesain untuk Programmable Logic Devices (PLD). ABEL mempunyai kemampuan dibawah VHDL serta Verilog dan kurang populer di industry. Meskipun bahasa ini terlihat seperti bahasa pemrograman konvensional, tetapi ada beberapa perbedaan penting. Bahasa pemrograman HDL bersifat parallel dimana untuk perintah yang berhubungan dengan gerbang logika akan dieksekusi secara parallel, segera setelah input diterima. Program HDL menirukan perilaku secara fisik dari sistem digital. Program ini juga menyediakan penggambungan spesifikasi pewaktuan (gate delay) yang baik seperti membuat penggambungan sistem untuk komponen yang berbeda. Pentingnya Penggunaan VHDL Mendesain sebuah rangkaian digital tanpa mengerti dasar gerbang dan flip-flop sangatlah sulit. Secara konvensional mendesain banyak rangkaian gerbang logika dan flip-flop tidak terlepas dari persamaan Bolean, agar didapatkan hasil sebuah rangkaian yang sederhana sehingga lebih efektif. Teknik mendesain dengan Bolean memerlukan pengkabelan sebuah persamaan untuk masing-masing flip-flop data input dan gerbang. Pembuatan persamaan bolean ini tidak dapat digunakan untuk desain rangkaian yang lebih besar dan memerlukan ribuan gerbang dan Flip-flop karena akan membuat persamaan bolean menjadi rumit. Metode untuk mendesain rangkaian logika setelah menggnakan persamaan Bolean adalah dengan menggunakan skema rangkaian gerbang logika. Mendesain
[Pengenalan VHDL] BAB VII
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
dituliskan sebagai SIGNAL bus8: STD_LOGIC_VECTOR(7 DOWNTO 0);, sedangkan bus (dengan 16 wire) dapat dituliskan dengan SIGNAL bus16: STD_LOGIC_VECTOR(15 DOWNTO 0);. Wire digunakan untuk menghubungkan antar entity dan dapat digunakan dalam model architecture structural. 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
untuk entity, dan END untuk architecture. C. Membuat Comparator, dekoder dan Enkoder dengan VHDL Software yang digunakan adalah active HDL 1. Comparator library ieee; use ieee.std_logic_1164.all; 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 (clk‟event 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; architecture RTL of bcd_7 is begin ca <= "1110"; process(i) begin case i is when "0000" => o <= "1000000"; when "0001" => o <= "1111001"; when "0010" => o <= "0100100"; when "0011" => o <= "0110000"; when "0100" => o <= "0011001"; when "0101" => o <= "0010010"; when "0110" => o <= "0000010"; when "0111" => o <= "1111000"; when "1000" =>
[Pengenalan VHDL] BAB VII
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;