You are on page 1of 12

Very High Speed Integrated Circuit Description Language (VHDL)

VHDL singkatan dari VHSIC Hardware Description Language dan merupakan sebuah bahasa pemrograman yang digunakan untuk mendefinisikan hardware elektronika digital. Pada pertengahan tahun 80an, Departemen Pertahanan US dan IEEE mensponsori pengembangan bahasa pemrograman ini dengan tujuan untuk mengembangkan VHIC. Saat ini, VHDL telah menjadi salah satu bahasa standar industri elektronika yang digunakan untuk menggambarkan sistem digital. Inilah evolusi VHDL berdasarkan sumber dari Universitas Waterloo :

1981, VHDL diusulkan sebagai bahasa deskripsi hardware 1986, VHDL diusulkan sebagai standar IEEE 1987, Standar pertama VHDL (IEEE-1076-1987) 1993, Standar VHDL direvisi (IEEE-1076-1993) 2002, Standar VHDL sekarang (IEEE-1076-2002), dan Sekarang digunakan dengan luas oleh kalangan industri dan akademi, dengan penambahan IEEE-1164-1993 untuk mengenalkan nilai sistem logika

Meskipun sepintas terlihat sama, ada beberapa hal yang membedakan VHDL dengan bahasa pemrograman lain pada umumnya. VHDL berhubungan dengan gerbang logika dimana setiap perintah dieksekusi secara parallel dengan segera saat adanya inputan. Sebuah program HDL meniru perilaku fisik, biasanya digital, sistem. Hal ini juga memungkinkan penggabungan spesifikasi waktu (gerbang penundaan) serta untuk menggambarkan sistem sebagai suatu interkoneksi dari berbagai komponen.

Teknologi VHDL ini terbagi berdasarkan jumlah gate yang ada, yaitu : a. < 500 gerbang SPLD (Simple Programmable Logic Device) b. 500 sampai 5000 gerbang CPLD (Complex Programmable Logic Device)

c. 5000 sampai 10.000 gerbang FPGA (Fast Programmable Gate Array) d. 10.000 sampai > 20.000 gerbang ASIC (Aplication Specific Intregrated Circuit) Beberapa kemampuan VHDL antara lain : 1. Dapat digunakan sebagai exchange medium. 2. Mendukung hirarki. 3. Mendukung metodologi top-down dan bottom-up. 4. Test bench dapat dituliskan menggunakan bahasa ini. 5. Tipe data baru dapat disebutkan. VHDL terdiri dari beberapa elemen dasar, yaitu : 1. Identifier 2. Data Object 3. Data Types 4. Entity 5. Architecture 6. Package 1. Identifier Dalam VHDL, Identifier memiliki beberapa karakter dengan aturan sebagai berikut : 1. Karakter yang diperbolehkan adalah huruf besar(A..Z), huruf kecil(a..z), huruf(0..9) dan garis bawah(_). 2. Karakter pertama harus berupa huruf. 3. Karakter terakhir tidak diperbolehkan berupa garis bawah(_), penggunaan 2 karakter garis bawah(_) juga tidak diperbolehkan. 4. Penggunaan huruf besar dan huruf kecil dianggap sama (tidak case sensitive). 5. Komentar dalam VHDL dimulai dengan karakter --.

2. Data Object Terdapat 3 obyek data yaitu : 1. Konstanta Obyek konstanta dapat menyimpan sebuah nilai yang didefiniskan saat deklarasi konstanta. Nilai yang sudah didefinisikan tersebut tidak dapat diubah selama proses desain.

Constant identifier[,identifier..]:type[:value]; 2. Variabel Obyek variabel dapat menyimpan sebuah nilai yang diberikan saat desain, dan nilai tersebut dapat dirubah kapanpun saat desain. Variable identifier[,identifier..]:type[:value]; Syntax: variable ctrl_bits: std_logic; 3. Signal Obyek Signal bisa disamakan dengan variable, perbedaannya adalah bahwa signal dapat menyimpan ataupun melepaskan nilai logika, sedangkan variable tidak dapat, oleh karena itu, signal dapat diwujudkan dalam elemen memori. Signal identifier[,identifier..]:type[:value]; Syntax: signal con: std_logic; 3. Data Types Ada 2 macam Data type yang digunakan berdasarkan standar IEEE, yaitu : a. Berdasarkan standar IEEE 1076/93, yaitu : Boolean, Bit, Bit_vector dan Integer. b. Berdasarkan standar IEEE 1164, yaitu Std Ulogic, std Logic dan std_Logic

Vector. 4. Entity Entity memberikan arti tentang bagaimana sebuah bagian rancangan dideskripsikan di VHDL dalam hubungannya dengan model VHDL lain dan juga memberikan nama untuk model tersebut. Di dalam entity juga diperbolehkan untuk mendefinisikan beberapa parameter yang mengambil model menggunakan hierarki. Kerangka dasar untuk sebuah entity digambarkan sebagai berikut : entity is . entity ;

Syntax: entity entity_name is Port declaration; end entity_name; Sebuah deklarasi entity harus diawali dengan entity dan diakhiri dengan kata end. Sebuah cara atau metode untuk menghubungkan entity secara bersama adalah menggunakan PORTS. Sebuah port harus memiliki nama, arah/mode dan tipe. Hal ini didefinisikan bahwa entity menggunakan metode sebagai berikut: port ( list of port declarations );

Deklrasi port ini mendefinisikan jenis dari koneksi dan arah yang sesuai. Misalnya, deklarasi port untuk sebuah input bit adalah 1, maka digambarkan sebagai berikut :

in1 : in bit;

Dan jika model tersebut memiliki 2 input (in1 dan in2) dan satu output (out1), maka deklarasi ports dapat digambarkan berikut:

port ( in1, in2 : in bit; out1 : out bit );

Dengan mengunakan ports maka titik koneksi diantara entities akan berlangsung dengan efektif dalam hal proses koneksi entities satu sama lain. Selain itu, dengan menggunakan ports akan menjadikan sinyal yang ada menjadi efektif serta cocok digunakan dalam model VHDL.

5. Architecture Architecture Body dalam sebuah entity berfungsi untuk mendeskripsikan apa yang akan dilakukan atau proses apa yang akan sikerjakan oleh perangkat keras yang didesain.

ARCHTECTURE architecture-name OF entity-name IS [type-declarations] [signal-declarations] [constant-declarations] BEGIN [architecture definition] END architecture-name;

Dalam architecture body ada beberapa jenis, antara lain : a. Structural description Perencanaan didasarkan pada pemakaian komponen (logical gate) pada library dan hubungan antar componen-componen tersebut (a set of interconected component). Structural description meliputi : Signal declaration. Component instances Port maps. Wait statements. Component declaration: Syntax: component component_name [is] List_of_interface ports; end component component_name;

b. Data flow description Perencanaan berdasarkan pada proses data transfer ( dari signal atau dari input ke output tanpa statement sequential ) yang merupakan sekumpulan dari concurent assignment statement. Perbedaan utama antara data flow dengan behavioral adalah yang satu menggunakan proses yang lain tidak.

Berikut ini adalah coding half adder yang mempunyai 1 XOR gate dan sebuahAND gate.

Library IEEE; use IEEE.STD_LOGIC_1164.all; entity ha_en is

port (A,B:in bit;S,C:out bit); end ha_en; architecture ha_ar of ha_en is begin S<=A xor B; C<=A and B; end ha_ar;

c. Behavioral description Perencanaan didasarkan pada proses pengerjaan statement antar input dan output secara sequential/berurutan/step by step dengan menggunakan statement sequential (a set of sequential statement). Keuntungan dari behavioral description yang merupakan high level description adalah kita tidak perlu memfokuskan pada gate level pada desain implementasi tetapi kita fokuskan pada usaha mengakuratkan model fungsi. Proses statement dimulai dengan sebuah label yang diikuti dengan tanda : kemudian kata proses dan sensitivity list dan dibawahnya diikuti dengan sequential statement, setelah bagian sequential statement selesai diakhiri dengan end process dan label process.

Yang termasuk sequential statement, antara lain : 1) Process statement 2) If-then-else statement 3) Case-when statement 4) For-loop statement 5) While-loop statement

6. Package Sebuah package dapat mendeklarasikan komponen berupa pasangan entity dan architecture, type, konstanta atau fungsi agar item-item tersebut dapat digunakan pada desain yang lain. Package sering kali dituliskan sebelum entity

dan architecture. Agar sebuah desain dapat menggunakan package yang sudah dibuat, maka pada desain tersebut harus memanggil package yang akan dipakai dengan menggunakan klausa USE

ENTITY entity-name IS PORT [signal][sig-name,..]:[direction] type; [;signal[sig-name,..]:[direction] type] . . ); END entity-name; ARCHITECTURE architecture-name OF entity-name IS [type-declarations] [signal-declarations] [constant-declarations] BEGIN [architecture definition] END architecture-name;

Berikut ini adalah contoh coding D-Flip Flop

Qt D-FF
Clock

library ieee; use ieee.std_logic_1164.all;

nama library

Entity d_ff

is

-nama entity

-port port yang digunakan port( clk : in std_logic; rst : in std_logic; -nama port masukan d : in std_logic; dff : out std_logic -nama port keluaran ); end entity d_ff; -nama architecture Architecture d_ff_bhv of d_ff is

begin baca_data : process (clk) begin


if (clk' event and clk='1')then if rst='1'then dff<=d; else dff<='0'; end if; end if; end process; end d_ff_bhv;

-end architecture

Dari coding D-FF di atas kita bisa membuat shift register yang tersusun dari 4 buah D-FF sebagai berikut.

library ieee; use ieee.std_logic_1164.all; entity shift_register is port( clk : in std_logic; rst : in std_logic; d : in std_logic; y : out std_logic ); end entity shift_register; architecture shift_reg_bhv of shift_register is component d_ff is component dari entity rangkaian yang akan di port map

memiliki nilai 1 bit

port( clk : in std_logic; rst : in std_logic; d : in std_logic; dff : out std_logic ); end component d_ff; signal out0 : std_logic; signal out1 : std_logic; signal out2 : std_logic;

signal dari port map

begin

awal proses port map

dff0 : d_ff port map (d => d, clk=>clk, dff=>out0, rst=>rst); sebagai jumper atau penghubung antara port pada architecture ke port pada port map dff1 : d_ff port map (d=>out0, clk=>clk, dff=>out1, rst=>rst);

dff2 : d_ff port map (d=>out1, clk=>clk, dff=>out2, rst=>rst); dff3 : d_ff port map (d=>out2, clk=>clk, dff=>y, rst=>rst); end shift_reg_bhv; end architecture

Test Bench Test Bench adalah pemberian sinyal berupa syntax program pada rangkaian yang akan diujikan keluarannya. Sehingga sinyal yang diberikan dapat langsung menunjukan keluaran tanpa harus memasukan sinyal secara manual. Berikut ini adalah test bench dari rangkaian shift register di atas. library ieee; use ieee.std_logic_1164.all; entity tb_shift_register is end entity; architecture tb_shift_register_struct of tb_shift_register is component shift_register is port( clk : in std_logic; rst : in std_logic; d : in std_logic; y : out std_logic ); end component; signal clk, rst, data_in, data_out : std_logic; begin DUT : shift_register port map (clk=>clk, d=>data_in, rst=>rst, y=>data_out); sign_gen : block begin clk_p : process begin pemberian sinyal pada rangkaian shift register

durasi pada proses clk clk<='0'; wait for 10 ns; clk<='1'; wait for 10 ns; end process; rst_p : process begin rst<='1'; wait for 2000 ns; rst<='0'; wait for 100 ns; rst<='1'; wait for 3000 ns; end process; data_in_p : process begin data_in<='1'; wait for 50 ns; data_in<='1'; wait for 50 ns; data_in<='0'; wait for 50 ns; data_in<='1'; wait for 50 ns; data_in<='0'; wait for 50 ns; data_in<='1'; wait for 50 ns; data_in<=not(data_in); wait for 50 ns; end process; end block; end architecture; nama test configuration test_config of tb_shift_register is

for tb_shift_register_struct nama architecture untuk konfigurasi end for; end test_config; end test

Berikut ini gambar hasil Test Bench dengan menggunakan software Modelsim.

You might also like