Sahabat Robonesia, dalam pemrograman VHDL, atribut digunakan untuk mengakses informasi atau properti dari suatu objek, seperti SIGNAL, variabel, atau tipe data. Atribut ditulis dengan tanda apostrof (‘) setelah nama objek. Atribut sangat berguna untuk memeriksa status, mengontrol perilaku, atau memperoleh informasi tentang objek tersebut. Dalam pemrograman VHDL, terdapat 2 jenis atribut, yaitu atribut standar (Pre-Define Attribute) dan atribut non-standar (User-Define Attribute).
Table of Contents
Toggle5.1 Atribut Standar (Pre-Define Attributes)
Atribut standar (pre-define attrbutes) adalah atribut yang telah ditentukan dalam pemrograman VHDL standar dan dapat lagsung digunakan oleh pengguna (User). Terdapat 2 jenis atribut standar, yaitu atribut data dan atribut SIGNAL. Berikut adalah penjelasan singkatnya.
5.1.1 Atribut Data (Data Attributes)
Data atribut digunakan untuk mengakses informasi tentang tipe data atau objek data dalam VHDL. Beberapa contoh atribut data yang umum digunakan dan dapat disintesis adalah sebagai berikut:
1. Atribut ‘HIGH
Atribut ‘HIGH berguna untuk mengembalikan indeks bit tertinggi dari suatu tipe data vektor.
Syntax:
|
1 |
nama_sinyal'HIGH |
Contoh:
|
1 2 |
signal a : std_logic_vector(7 downto 0); constant lebar : integer := a'HIGH; -- lebar akan bernilai 7 |
2. Atribut ‘LOW
Atribut ‘LOW berguna untuk mengembalikan indeks bit terendah dari suatu tipe data vektor.
Sintaks:
|
1 |
nama_sinyal'LOW |
Contoh:
|
1 2 |
signal a : std_logic_vector(7 downto 0); constant lebar : integer := a'LOW; -- lebar akan bernilai 0 |
3. Atribut ‘LENGTH
Atribut ‘LENGTH berguna untuk mengembalikan jumlah bit dalam suatu tipe data vektor.
Sintaks:
|
1 |
nama_sinyal'LENGTH |
Contoh:
|
1 2 |
signal a : std_logic_vector(7 downto 0); constant lebar : integer := a'LENGTH; -- lebar akan bernilai 8 |
4. Atribut ‘TO
Atribut ‘TO berguna untuk mengonversi tipe data vektor ke arah indeks yang ditentukan.
Sintaks: nama_sinyal(to n)
|
1 |
nama_sinyal(‘TO n) |
Contoh:
|
1 2 3 |
signal a : std_logic_vector(7 downto 0); signal b : std_logic_vector(0 to 7); b <= a(‘TO => 7); |
5. Atribut ‘DOWNTO
Atribut ‘DOWNTO berguna untuk mengonversi tipe data vektor ke arah indeks yang menurun.
Sintaks:
|
1 |
nama_sinyal(‘DOWNTO n) |
Contoh:
|
1 2 3 |
signal a : std_logic_vector(0 to 7); signal b : std_logic_vector(7 downto 0); b <= a(‘DOWNTO => 0); |
6. Atribut ‘LEFT dan ‘RIGHT
Atribut ‘LEFT berguna untuk mengembalikan indeks array paling kiri.
Atribut ‘RIGHT berguna untuk mengembalikan indeks array paling kanan.
Sintaks:
|
1 2 |
nama_sinyal'LEFT nama_sinyal'RIGHT |
Contoh:
|
1 2 3 4 |
SIGNAL d : STD_LOGIC_VECTOR (7 DOWNTO 0); d'LEFT=7; -- Nilai index paling kiri adalah 7 d'RIGHT=0; -- Nilai index paling kiri adalah 0 |
7. Atribut ‘RANGE dan ‘REVERSE_RANGE
Atribut ‘RANGE berguna untuk mengembalikan rentang vektor.
Atribut ‘REVERSE_RANGE berguna untuk mengembalikan rentang vektor dalam urutan terbalik.
Sintaks:
|
1 2 |
nama_sinyal'RANGE nama_sinyal' REVERSE_RANGE |
Contoh:
|
1 2 3 4 |
SIGNAL d : STD_LOGIC_VECTOR (7 DOWNTO 0); d'RANGE=(7 downto 0); d'REVERSE_RANGE=(0 to 7); |
5.1.2 Atribut SIGNAL (SIGNAL Attributes)
Atribut SIGNAL digunakan untuk memeriksa status atau perilaku suatu SIGNAL selama simulasi atau sintesis. Beberapa contoh atribut SIGNAL yang umum digunakan dan dapat disintesis adalah sebagai berikut:
1. Atribut ‘EVENT
Atribut ‘EVENT berguna untuk mengembalikan nilai “TRUE” jika sinyal mengalami transisi (event) pada siklus saat ini.
Sintaks:
|
1 |
nama_sinyal'EVENT |
Contoh:
|
1 2 3 |
if a'EVENT and a = '1' then -- Kode yang dijalankan ketika sinyal a transisi ke '1' end if; |
2. Atribut ‘STABLE
Atribut ‘STABLE berguna untuk mengembalikan nilai “TRUE” jika sinyal tetap stabil (tidak mengalami perubahan) selama siklus saat ini.
Sintaks:
|
1 |
nama_sinyal'STABLE |
Contoh:
|
1 2 3 |
if a'STABLE then -- Kode yang dijalankan jika sinyal a stabil end if; |
3. Atribut ‘RISING_EDGE
Atribut ‘RISING_EDGE berguna untuk mengembalikan nilai “TRUE” jika sinyal mengalami transisi dari ‘0’ ke ‘1’ (rising edge).
Sintaks:
|
1 |
RISING_EDGE(nama_sinyal) |
Catatan: Ini adalah fungsi, bukan atribut langsung, tetapi sering digunakan untuk mendeteksi rising edge.
Contoh:
|
1 2 3 |
if RISING_EDGE(clk) then -- Kode yang dijalankan pada rising edge clock end if; |
4. Atribut ‘FALLING_EDGE
Atribut ‘FALING_EDGE berguna untuk mengembalikan nilai “TRUE” jika sinyal mengalami transisi dari ‘1’ ke ‘0’ (falling edge).
Sintaks:
|
1 |
FALLING_EDGE(nama_sinyal) |
Catatan: Ini adalah fungsi, bukan atribut langsung, tetapi sering digunakan untuk mendeteksi falling edge.
Contoh:
|
1 2 3 |
if FALLING_EDGE(clk) then -- Kode yang dijalankan pada falling edge clock end if; |
5. Daftar atribut SIGNAL yang digunakan hanya untuk tujuan simulasi dan tidak dapat disintesis
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
-- Mengembalikan nilai TRUE jika SIGNAL s = ‘1’ s’ACTIVE -- Mengembalikan nilai TRUE jika tidak ada kejadian yang terjadi selama waktu yang ditentukan (time). s’QUIET (time) -- Mengembalikan waktu yang telah berlalu sejak kejadian terakhir. s’LAST_EVENT -- Mengembalikan waktu yang telah berlalu sejak SIGNAL s terakhir = ‘1’ s’LAST_ACTIVE -- Mengembalikan nilai SIGNA s sebelum kejadian terakhir. s’LAST_VALUE |
5.1.3 Contoh Penggunaan Atribut dalam VHDL
Berikut adalah contoh program VHDL lengkap yang menggunakan atribut data dan atribut SIGNAL:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
library IEEE; use IEEE.STD_LOGIC; use IEEE.NUMERIC_STD.ALL; entity attribute_example is Port ( clk : in STD_LOGIC; a : in STD_LOGIC_VECTOR(7 downto 0); result : out STD_LOGIC_VECTOR(7 downto 0) ); end attribute_example; architecture Behavioral of attribute_example is signal a_stabil : STD_LOGIC_VECTOR(7 downto 0); begin -- Mengecek apakah sinyal a stabil if a'stable then a_stabil <= a; end if; -- Mengecek rising edge clock if rising_edge(clk) then result <= a_stabil; end if; end Behavioral; |
5.1. 4 Catatan Penting Terkait Penggunaan Atribut Pre-Define
- Atribut Data digunakan untuk mengakses informasi tentang tipe data, seperti indeks bit tertinggi (‘high), indeks bit terendah (‘low), dan jumlah bit (‘length).
- Atribut SIGNAL digunakan untuk memeriksa status sinyal, seperti transisi (‘event), stabilitas (‘stable), rising edge, dan falling edge.
- Atribut sangat berguna untuk debugging, mengontrol aliran logika, dan memperoleh informasi tentang objek dalam VHDL.
5.2 Atribut Non-Standard (User-Define Attributes)
Kita telah melihat atribut-atribut bertipe HIGH, LOW, EVENT, dan lain-lain. Semua atribut tersebut telah didefinisikan sebelumnya di dalam standar pemrograman VHDL. Namun, VHDL juga memungkinkan pembuatan atribut yang ditentukan dan dibuat sendiri oleh pengguna atau disebut dengan “User-Define Attributes.”
5.2.1 Pengertian User-Defined Attributes
User-defined attributes adalah atribut yang didefinisikan oleh pengguna sendiri, bukan atribut standar bawaan VHDL. Atribut ini digunakan untuk menambahkan informasi atau parameter ke suatu entitas, arsitektur, atau objek lainnya dalam VHDL. Atribut ini biasanya digunakan untuk:
- Mengonfigurasi perilaku suatu modul atau komponen.
- Menambahkan informasi tambahan tentang desain, seperti versi, tanggal, atau penulis.
- Mengatur parameter desain yang dapat diubah tanpa perlu mengubah kode utama.
Atribut yang ditentukan pengguna (User-define) dapat dideklarasikan di mana saja, kecuali di dalam badan PACKAGE. Jika tidak dikenali oleh alat sintesis, hal itu akan diabaikan begitu saja oleh compiler VHDL, atau peringatan kesalahan akan muncul.
5.2.2 Cara Mendefinisikan User-Defined Attributes
Atribut yang ditentukan pengguna dapat didefinisikan sebagai konstanta atau tipe data khusus yang terkait dengan suatu entitas atau arsitektur. Berikut adalah cara mendefinisikan user-defined attributes:
A. Mendefinisikan Atribut di dalam ENTITY
Atribut dapat ditambahkan langsung ke dalam deklarasi entitas menggunakan kata kunci ATTRIBUTE.
|
1 2 3 4 5 6 7 8 9 10 11 12 |
ENTITY user_defined_attribute_example IS PORT ( clk : IN STD_LOGIC; data_in : IN STD_LOGIC_VECTOR(7 DOWNTO 0); data_out : OUT STD_LOGIC_VECTOR(7 DOWNTO 0) ); ATTRIBUTE version : STRING; ATTRIBUTE author : STRING; BEGIN version := "7.1"; author := "Robonesia team"; END user_defined_attribute_example; |
B. Mendefinisikan Atribut di dalam ARCHITECTURE
Atribut juga dapat didefinisikan untuk arsitektur tertentu.
|
1 2 3 4 5 |
ARCHITECTURE behavioral OF user_defined_attribute_example IS ATTRIBUTE optimization_level : INTEGER; BEGIN optimization_level := 2; -- Nilai optimasi tingkat 2 END behavioral; |
C. Mendefinisikan Atribut pada SIGNAL atau Variabel
Atribut juga dapat diterapkan pada sinyal atau variabel. Untuk menggunakan user-define atribut pada sinyal atau variabel, atribut tersebut harus dideklarasikan dan ditentukan spesifikasinya. Sintaksnya adalah sebagai berikut:
Syntax deklarasi atribut user-define:
|
1 |
ATTRIBUTE attribute_name: attribute_type; |
Syntax spesifikasi atribut user-define:
|
1 |
ATTRIBUTE attribute_name OF target_name: class IS value; |
di mana:
attribute_type : Semua tipe data (BIT, INTEGER, STD_LOGIC_VECTOR, dan lainnya)
class : TYPE, SIGNAL, FUNCTION, dan yang lainnya.
Value : ‘0’, 27, ‘‘00 11 10 01’’, dan yang lainnya.
Contoh 1:
|
1 2 3 4 |
ATTRIBUTE jumlah_input: INTEGER; -- deklarasi ATTRIBUTE jumlah_input OF nand3: SIGNAL IS 3; -- spesifikasi ... input <= nand3'jumlah_pin; -- pemanggilan atribut, mengembalikan 3 |
Contoh 2:
|
1 2 3 |
SIGNAL internal_signal : STD_LOGIC_VECTOR(7 DOWNTO 0); ATTRIBUTE keep : BOOLEAN; ATTRIBUTE keep OF internal_signal : SIGNAL IS TRUE; |
5.2.3 Keterbatasan Penggunaan User-Defined Attribut
Penggunaan User-Defined Attribut dalam pemrograman VHDL memiliki keterbatasan, diantaranya sebagai berikut:
- Keterbatasan Synthesizability: Beberapa atribut mungkin tidak dapat disintesis, terutama jika digunakan untuk tujuan dokumentasi atau informasi non-fungsional.
- Keterbatasan Dukungan Tool: Beberapa alat sintesis atau simulator mungkin tidak mendukung semua jenis atribut.
- Keterbatasan Kompatibilitas: Atribut yang ditentukan pengguna mungkin tidak kompatibel dengan semua versi VHDL.



