Read Only Memory (ROM) berbasis Field Programmable Gate Array (FPGA) menggunakan VHDL (VHSIC Hardware Description Language) Ferry Wahyu Wibowo1 Jurusan Teknik Informatika, STMIK AMIKOM Yogyakarta, Jl. Ring Road Utara, Condong Catur, Sleman, Yogyakarta – Indonesia 1
[email protected]
Aplikasi suatu sistem perangkat keras seringkali menggunakan rangkaian penyimpan (storage circuit), untuk menyimpan data yang akan dikeluarkan pada suatu kondisi tertentu. Rangkaian penyimpanan data dibedakan menjadi dua jenis yaitu rangkaian penyimpan data tetap (static data) dan rangkaian penyimpan data dinamis (dynamic data). Rangkaian penyimpan data tetap dapat berupa Read Only Memory (ROM), yaitu piranti yang mempunyai nilai data tertentu dan datanya berada pada piranti tersebut. Ada juga kasus, dimana suatu piranti yang datanya bersifat tidak menguap (non-volatile) dapat disebut sebagai ROM, yaitu kondisi dimana suatu data program yang telah di-upload dari komputer ke piranti, setelah dihilangkan catu daya piranti tersebut, maka datanya tidak hilang. Sedangkan, rangkaian penyimpan data dinamis dapat berupa Random Access Memory (RAM), yaitu piranti yang mempunyai data yang dapat diubah-ubah oleh suatu masukan tertentu sebagai data masukan. Suatu kasus yang berlawanan prinsip dengan ROM, dimana suatu piranti yang datanya bersifat mudah menguap (volatile) maka piranti tersebut bersifat sebagai RAM, karena datanya harus dimasukkan lagi ketika piranti dihubungkan dengan catu daya lagi. Persamaan antara ROM dan RAM adalah keduanya mempunyai alamat dan data. Model ROM dapat dibuat dengan mengimplementasikan dalam Field Programmable Gate Array (FPGA) menggunakan bahasa deskripsi perangkat keras VHSIC Hardware Description Language (VHDL); VHSIC kepanjangan dari Very High Speed Integrated Circuit, yaitu rangkaian terpadu berkecepatan sangat tinggi. Pembuatan ROM menggunakan VHDL dibagi menjadi dua, yaitu pembuatan ROM sederhana dan pembuatan ROM yang lebih besar. Pembuatan ROM yang sederhana dapat menggunakan larik (array), yang mempunyai kapasitas data yang sedikit dan terbatas, sedangkan pembuatan ROM yang lebih besar membutuhkan ruang penyimpanan yang lebih besar dan biasanya masih mengacu pada suatu teknologi vendor tertentu, sehingga perancangannya tidak bebas. Pembuatan ROM yang sederhana ada beberapa cara yang dapat digunakan, yaitu: 1. Kode VHDL untuk membuat ROM dengan data pada signal Penulisan library ieee yang digunakan dalam pembuatan ROM, selain menggunakan std_logic_1164 adalah std_logic_unsigned. Kedua library ini perlu dituliskan agar kode VHDL untuk membuat ROM dapat dikompile. Kode VHDL untuk membuat ROM dapat dituliskan data tersimpan pada tipe data signal. Tipe data ROM berupa array (larik) yang menunjukkan urutan alamat ROM dan datanya berupa std_logic atau std_logic_vector.
library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity rom_signal is port (addr: std_logic_vector(2 downto 0); data_out: out std_logic_vector(7 downto 0)); end; architecture watak of rom_signal is type rom_type is array(0 to 7) of std_logic_vector(7 downto 0); signal rom : rom_type:=("11110000","11001100","10101010", "00001111","00110011","01010101", "00011101","11100010"); begin data_out<=rom(conv_integer(addr)); end;
Gambar 1. Kode VHDL untuk ROM pada signal Penulisan kode VHDL untuk to dan downto menunjukkan suatu urutan data, misalkan 0 to 3 berarti urutannya akan berupa 0, 1, dan 2, sedangkan 2 downto 0 maka urutannya akan berupa 2, 1, dan 0. Alamat data pada ROM harus berupa tipe data integer, sehingga alamat addr pada ROM harus diubah menjadi integer menggunakan conv_integer(addr). Data ROM dan data yang akan ditampilkan (data_out) harus mempunyai panjang data yang sama.
Gambar 2 Diagram bentuk gelombang kode VHDL dari gambar 1 Gambar 2 menunjukkan diagram bentuk gelombang kode VHDL dari gambar 1. Alamat ROM (addr) berupa 4 bit (3:0), sedangkan data keluaran (data_out) dari ROM berupa 8 bit. Pada gambar 2, alamat 0 mempunyai data keluaran F0, alamat 5 mempunyai data keluaran 55, dan seterusnya.
Gambar 3 Floorplan dari kode VHDL gambar 1
Pada gambar 3, terlihat bahwa desain ROM menempati pada sebagian kecil dari kapasitas FPGA Xilinx yang disediakan, dan berada di pojok kiri atas. Komponen untuk membuat desain ROM pada FPGA Xilinx menggunakan 4 slices, 8 LUT 4 masukan, dan 11 bonded IOB (4%). Total waktu tunda yang digunakan sekitar 6,546ns, yang terdiri dari 5,194ns waktu tunda logic dan 1,352ns waktu tunda route. 2. Kode VHDL untuk membuat ROM dengan data pada konstanta Penulisan library ieee dalam pembuatan ROM menggunakan data pada konstanta mempunyai library yang sama dengan pembuatan ROM menggunakan data pada signal. Kode VHDL untuk membuat ROM dapat dituliskan data tersimpan pada tipe data constant. Tipe data ROM berupa array (larik) yang menunjukkan urutan alamat ROM dan datanya berupa std_logic atau std_logic_vector, sama dengan gambar 1. library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity rom_constant is port (addr: std_logic_vector(2 downto 0); data_out: out std_logic_vector(7 downto 0)); end; architecture watak of rom_constant is type rom_type is array(0 to 7) of std_logic_vector(7 downto 0); constant rom : rom_type:=("11110000","11001100","10101010", "00001111","00110011","01010101", "00011101","11100010"); begin data_out<=rom(conv_integer(addr)); end;
Gambar 4. Kode VHDL untuk ROM pada constant Penulisan kode VHDL untuk alamat berupa array(0 to 7), merupakan integer, yang berarti 3-bit (std_logic_vector(2 downto 0)), sehingga ketika menuliskan panjang bit alamat berupa 3 downto 0 maka ketika dikompile akan didapatkan peringatan bahwa bit 3 ada, namun tidak pernah digunakan.
Gambar 5 Diagram bentuk gelombang kode VHDL dari gambar 4 Gambar 5 menunjukkan diagram bentuk gelombang kode VHDL dari gambar 4. Alamat ROM (addr) berupa 3 bit (2:0), sedangkan data keluaran (data_out) dari ROM berupa 8 bit. Pada gambar 5, alamat 6 mempunyai data keluaran 1D, alamat 4 mempunyai data keluaran 33, dan seterusnya.
Gambar 6 Floorplan dari kode VHDL gambar 4 Pada gambar 6, terlihat bahwa desain ROM menempati pada sebagian kecil dari kapasitas FPGA Xilinx yang disediakan, dan berada di pojok kiri atas. Komponen untuk membuat desain ROM pada FPGA Xilinx menggunakan 4 slices, 8 LUT 4 masukan, dan 11 bonded IOB (4%). Total waktu tunda yang digunakan sekitar 6,546ns, yang terdiri dari 5,194ns waktu tunda logic dan 1,352ns waktu tunda route. 3. Kode VHDL untuk membuat ROM dengan data pada package Penulisan library ieee untuk membuat package, cukup hanya dengan std_logic_1164 saja kemudian arsitektur ROM-nya. Pemanggilan package harus disertai dengan library work, kemudian .nama package-nya, yaitu rom_package. library IEEE; use IEEE.STD_LOGIC_1164.ALL; Package rom_package is subtype rom_word is std_logic_vector(7 downto 0); type rom_type is array(0 to 7) of rom_word; constant rom : rom_type:=("11110000","11001100","10101010", "00001111","00110011","01010101", "00011101","11100010"); end rom_package; library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; Use work.rom_package.ALL; entity rom_pack is port (addr: std_logic_vector(2 downto 0); data_out: out std_logic_vector(7 downto 0)); end; architecture Behavioral of rom_pack is begin data_out<=rom(conv_integer(addr)); end Behavioral;
Gambar 7. Kode VHDL untuk ROM pada package
Kelebihan penulisan kode VHDL menggunakan cara package, yaitu lebih mudah untuk menuliskan alamat dan data ROM pada blok terpisah dan lebih efisien jika package digunakan tidak hanya untuk satu blok pemanggilan saja, karena jika hanya menggunakan satu blok pemanggilan, penulisannya agak panjang. Ketika dikompile, didapatkan proses yang sama dengan kedua cara pembuatan ROM sebelumnya.
Gambar 8 Diagram bentuk gelombang kode VHDL dari gambar 4 Gambar 8 menunjukkan diagram bentuk gelombang kode VHDL dari gambar 7. Alamat ROM (addr) berupa 3 bit (2:0), sedangkan data keluaran (data_out) dari ROM berupa 8 bit. Pada gambar 8, alamat 6 mempunyai data keluaran 1D, alamat 4 mempunyai data keluaran 33, dan seterusnya.
Gambar 9 Floorplan dari kode VHDL gambar 7 Pada gambar 9, terlihat bahwa desain ROM menempati pada sebagian kecil dari kapasitas FPGA Xilinx yang disediakan dan serupa dengan gambar floorplan desain yang sebelumnya. Komponen untuk membuat desain ROM pada FPGA Xilinx menggunakan 4 slices, 8 LUT 4 masukan, dan 11 bonded IOB (4%). Total waktu tunda yang digunakan sekitar 6,546ns, yang terdiri dari 5,194ns waktu tunda logic dan 1,352ns waktu tunda route.
Daftar Pustaka Pedroni V.A., 2004, Circuit Design with VHDL, MIT Press, London, England. Sjoholm, S. dan Lindh, L., 1997, VHDL for designers, Prentice Hall Europe, Great Britain. Short, K.L., 2009, VHDL for Engineers, Pearson Education, Inc, Upper Saddle River, New Jersey.