Anda di halaman 1dari 4

Tutorial, Mari Belajar VHDL Secara Singkat (1)

November 1, 2011JohanLeave a commentGo to comments


Tanpa saya duga ternyata ada satu-dua hasil search yang intinya ingin tau tentang bahasa VHDL
di hasil statistik blog saya. Sekali lagi saya merasa bersalah karena setelah membuka link ke blog
saya ini ternyata tidak mendapatkan apa yang mereka inginkan yaitu tutorial tentang bahasa
VHDL. Walaupun saya belum jago dalam menggunakan bahasa ini juga, mungkin tidak banyak
yang bisa saya tulis disini, dan mungkin hanya garis besarnya juga. Seperti yang saya beritahu
pada postingan sebelumnya mengenai VHDL, perlu diingat bahwa bahasa VHDL intinya adalah
membuat rangkaian bukan program. Pada bagian pertama ini akan saya beri contoh pembuatan
awal dan operator2 yang biasa dipakai pada bahasa VHDL, dan membuat suatu komponen
tertentu
1. LIBRARY
Deklarasi library merupakan hal penting dalam pembuatan kode vhdl, terutama jika kita membuat
sesuatu dengan struktur data atau komponen yang membutuhkan library tertentu. Misal kita
menggunakan bentukan STD_LOGIC_VECTOR dan operator matematis yang akan digunakan pada
std_logic maka perlu dideklarasi di awal:

--deklarasi library
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_ARITH.ALL;
USE IEEE.STD_LOGIC_SIGNED.ALL;

2. ENTITY
Membuat entity yang memberikan gambaran port input dan output pada komponen yang akan kita
buat. Misal kita akan membuat rangkaian/komponen yang kita beri nama “tutor_blog”, komponen
ini menerima input yang bernama “input” yang berukuran 2 bit, kemudian “clock”, “reset”, dan
“selector” yang semuanya 1 bit. Output pada komponen ini bernama “output” yang berukuran 8
bit. Gambar komponennya adalah beserta contoh penulisan ENTITY-nya sebagai berikut:

--deklarasi entity, port input dan output


ENTITY blog_tutor IS
PORT (
--input
input : IN STD_LOGIC_VECTOR(1 DOWNTO 0); --2 bit
clock : IN STD_LOGIC;
reset : IN STD_LOGIC;
selector: IN STD_LOGIC;
--output
output : OUT STD_LOGIC_VECTOR(7 DOWNTO 0) --8 bit
);
END blog_tutor;

Penjelasan dari code di atas, kata “ENTITY” diikuti dengan nama komponen yang kita buat
sekaligus nama file dot vhd yang kita buat, disini diberi nama “blog_tutor” kemudian diikuti kata
“IS”. Kali ini tidak saya bahas mengenai “GENERIC”, jadi setelah kata “IS”, diikuti dengan kata
“PORT” dan kurung buka, setelah itu baru kita tulis nama input dan output dari komponen yang
kita buat. Tanda yang diawali dengan “- -” akan dianggap comment dan tidak akan berpengaruh
apapun. Setelah itu kita tulis nama input dan output, pada code di atas ditulis nama input/output
diikuti tanda titik dua (:), setelah itu kata “IN” atau “OUT”, kata “IN” jika merupakan input dan
“OUT” jika merupakan output. Setelah kata “IN”/”OUT” dituliskan tipe data-nya di contoh di atas
tipenya ada yang STD_LOGIC dan STD_LOGIC_VECTOR yaitu array dari STD_LOGIC, misal
ukurannya 8 bit maka dituliskan (7 DOWNTO 0), misal 2 bit dituliskan (1 DOWNTO 0). Setelah itu
ditutup dengan kurung tutup “)” dan tanda titik koma (;) lalu kata END nama_komponen. Perlu
diingat bahwa nama port input/output atau signal/variabel tidak boleh sama dengan kata yang
sudah terdapat pada VHDL misal IN, OUT, SELECT, IF, ELSE, ALL dsb. Selain STD_LOGIC, ada tipe
yang lain yaitu integer, character dan real.

3. ARCHITECTURE
Menuliskan ARCHITECTURE-nya dan SIGNAL yang dibutuhkan sebelum kata BEGIN

ARCHITECTURE behavior OF blog_tutor IS


TYPE reg_4x8 IS ARRAY (3 DOWNTO 0) OF STD_LOGIC_VECTOR(7 DOWNTO 0);
SIGNAL blok_reg : reg_4x8;
SIGNAL sum : STD_LOGIC_VECTOR(7 DOWNTO 0);

Blok architecture adalah bagian penting karena berisi code rangkaian dari komponen tersebut,
cara penulisannya diawali dengan “ARCHITECTURE” dan diikuti dengan suatu kata terserah, tapi
biasanya dengan kata “behavior” kemudian kata “OF” dan nama komponen tersebut dalam contoh
ini adalah “blog_tutor” lalu kata “IS”. Baris selanjutnya adalah deklarasi SIGNAL yang akan
digunakan, SIGNAL disini berguna sebagai kabel penghubung ataupun tipe data baru misal array.
Cara membuat array adalah dengan menggunakan kata “TYPE” dan nama_type, kalo disini
reg_4x8 kemudian diikuti “IS ARRAY” dan ukuran array-nya, jika ukurannya 4 seperti pada contoh
ditulis “(3 DOWNTO 0)”, lalu “OF” dan isi dari array-nya, di code di atas misal isi dari array-nya
adalah std_logic berukuran 8. Agar array tadi bisa digunakan kita buat SIGNAL –nya dengan
menuliskan SIGNAL nama_signal : tipe_data.

4. RANGKAIAN UTAMA
Dalam membuat rangkaian utama, diawali dengan kata BEGIN, berikut ini apa yang biasa
dilakukan dalam membuat rangkaian, sekaligus operator yang biasa dipakai di bahasa VHDL

 Assignment pada signal, operator yang digunakan adalah “<=”, digunakan saat misal kita
menginginkan agar signal in_add2 diisi dengan “00000000” atau kita ingin menghubungkan antar
kabel saat dilakukan percabangan contohnya:

1 in_add2 <= "00000000";

2 output <= sig_out;

 Melakukan operasi bit, seperti AND, NAND, OR, NOR, XOR, atau XNOR, contohnya:

1 output <= in_add1 OR in_add2;

 Multiplexer, dengan menggunakan operator WHEN. Suatu saat ketika kita merasa membutuhkan
operator IF akan tetapi kita tidak mengharapkan rangkaian sekuen melainkan rangkaian
kombinasional, maka WHEN menjadi pilihan yang tepat. Misal kita ingin melakukan assign
terhadap suatu sinyal sig_out dengan sinyal sum ketika sinyal selector bernilai ‘0’ dan mengisi
sig_out dengan sinyal in_add2 ketika sinyal selector bernilai ‘1’. Kita tidak perlu menggunakan IF,
dan cukup menggunakan WHEN, contoh penggunaannya seperti berikut ini:

1 signal1 <= signal2 WHEN expression [ELSE signal3 [WHEN expression ELSE
signal4 [...]]];
2
3
sig_out <= sum WHEN selector = '0' ELSE in_add2;

 Membuat blok PROCESS, blok PROCESS biasanya dibuat jika kita akan menggunakan operator
tertentu karena akan dibuat rangkaian sekuensial. Pada block PROCESS ada yang namanya
sensitivity list jika kita tidak menggunakan WAIT di dalam PROCESS. Sensitivity list sendiri berisi
variabel2 yang dibutuhkan pada block PROCESS, misal di dalam block PROCESS terdapat “IF
memread = ‘1’” kita perlu memasukkan memread pada sensitivity list, selain itu jika dalam block
PROCESS terdapat assign misal “output <= written”, written juga perlu dimasukkan dalam
sensitivity list. Bentuk dari blok PROCESS adalah:

1 PROCESS [(sensitivity_list)]

2 BEGIN
[block_process]
3
END PROCESS;
4

 WAIT statement, dengan menggunakan WAIT, kita tidak memerlukan sensitivity list, WAIT sendiri
cenderung lebih sering digunakan agar rangkaian menjadi synchronous terhadap clock, walaupun
WAIT sendiri bisa digunakan selain untuk clock. Pada rangkaian sekuensial terkadang clock sangat
dibutuhkan misal pada saat penulisan pada array. Cara menggunakan WAIT misal untuk clock saat
rising edge contohnya seperti berikut ini:

1 WAIT UNTIL clock'EVENT AND clock = '1';

 Sequential statement, statement disini dikhususkan untuk rangkaian sekuensial. Unsur terpenting
yang perlu diingat disini adalah konsep State, berbeda dengan sebelumnya yang bisa kita anggap
bahwa semua baris code akan dijalankan secara bersamaan, pada rangkaian sekuensial ini tidak
semua baris code akan dijalankan, hanya code yang ada pada state yang sedang aktif. Sequential
statement hanya bisa ditulis dalam block PROCESS, dan ingat ketika masuk ke dalam satu blok
misal IF, semua code dalam blok itu akan dijalankan. Jangan pernah membayangkan bahwa code
akan dijalankan berurutan dari atas ke bawah apalagi yang tidak di dalam PROCESS. Sequential
statement biasanya menggunakan IF atau CASE, contoh pemakaiannya adalah:

1 IF reset = ‘1’ THEN

2 output <= “0000”;


ELSIF memread = ‘1’ THEN
3
output <= reg_memory;
4
ELSE
5
output <= input;
6 END IF;
7
8 CASE states IS
9 WHEN “00” => output <= inA OR inB;
10 WHEN “01” => output <= inA AND inB;

11 WHEN “10” => output <= inA XOR inB;


WHEN OTHERS => output <= “0000”
12
13

 Pada VHDL juga terdapat looping, walaupun menurut saya lebih baik untuk jarang digunakan
kecuali memang terpaksa. Keadaan yang terpaksa misal saat mengisi nilai awal dari array yang
akan digunakan jadi kita tidak harus menuliskan satu per satu, gak bisa dibayangkan kalo kita
mau ngisi array ukuran 64 satu per satu. Ingat bahwa loop juga harus di dalam block PROCESS,
salah satu model loop yang sering saya pakai adalah FOR LOOP, cara penggunaanya adalah
sebagai berikut:

1 FOR i IN 0 TO 3 LOOP

2 blok_reg(i) <= “00000000”;


END LOOP;
3

Karena tidak mungkin untuk menuliskan tutorial secara lengkap di blog, jadi mungkin cuman garis
besarnya saja seperti di atas. Semoga postingan ini dapat bermanfaat, tentunya berlatih membuat
code VHDL adalah satu2nya cara agar kita terbiasa membuat code VHDL, untuk berlatih saya
sudah mencoba untuk membuat postingan mengenai contoh code VHDL untuk rangkaian sangat
sederhana. Terima kasih 😀

Anda mungkin juga menyukai