Archives of La Couleur De La Vie

2007 January

Tutorial VHDL (bagian 1)

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 :)

VHDL: Operasi tambah/kurang

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.

Gambar 1. Tambah/Kurang sebagai diagram Top-Level

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;

By Web Master on January 16, 2007 | FPGA, VHDL | A comment?