VHDL (VHSIC Hardware Description Language) merupakan perintah dengan code-code pada bahasa pemograman yang digunakan pada Field-Programmable Gate Arrays (FPGA) dan Integrated Circuits (IC) dengan salah satu contohnya adalah CPU untuk keperluan khusus: CPUs untuk special purposes.
Saya mendapatkan kesempatan belajar VHDL dan FPGA pada saat magang di PENS-ITS dari 1 – 28 Januari 2006. Kebetulan materi tersebut merupakan request saya sendiri selama di sana diluar tugas belajar yang harus saya magang. Jadi belajar sendiri selanjutnya dengan mencari beberapa literatur yang berhubungan.
Mungkin sudah mulai bosan dengan bahasa pemprograman Delphi, C, Assembler
Pertama saya akan memperkenalkan bagaimana VHDL pada contoh gambar 1 dibawah mendeskripsikan 2 input sebagai parameter design tambah/kurang pada VHDL. Design pada unit multiprexer operasi tambah dan kurang dengan input addnsub. Perpaduan tools pendeteksi unit tambah dan kurang pada code HDL sebagai bagian input dan output pada multiplexer oleh suatu keadaan sinyal. Software dalam pengambilan keputusan adalah lpm_addsub, dimana mega-fungsi untuk design tambah/kurang.
| Tabel 1. Informasi port dan deskripsi masing-masing port. | ||
| Nama Port | Tipe | Deskripsi |
a[4:0], b[4:0] |
Input | 4-bit data input untuk tambah/kurang |
addnsub |
Input | Multiplexer input untuk operasi tambah dan kurang |
5..0] |
Output | 5-bit output dengan 1-bit carry/borrow |
Jika anda sering melakukan pemprograman dengan bahasa C pastinya Anda akan mengira itu untuk pemprograman dengan bahasa C atau bahasa java. Namun saya pastikan code bahasa dengan nama VHDL. inilah VHDL dari operasi tambah dan kuran menggunakan FPGA
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
PACKAGE my_package IS
CONSTANT ADDER_WIDTH : integer := 5;
CONSTANT RESULT_WIDTH : integer := 6;
SUBTYPE ADDER_VALUE IS integer RANGE 0 TO 2 ** ADDER_WIDTH – 1;
SUBTYPE RESULT_VALUE IS integer RANGE 0 TO 2 ** RESULT_WIDTH – 1;
END my_package;
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
USE work.my_package.ALL;
ENTITY addsub IS
PORT
(
a: IN ADDER_VALUE;
b: IN ADDER_VALUE;
addnsub: IN STD_LOGIC;
result: OUT RESULT_VALUE
);
END addsub;
ARCHITECTURE rtl OF addsub IS
BEGIN
PROCESS (a, b, addnsub)
BEGIN
IF (addnsub = ‘1′) THEN
result <= a + b;
ELSE
result <= a - b;
END IF;
END PROCESS;
END rtl;