VHDL Nitelikleri (Attributes)

VHDL dilinde ayrıca kod yazmayı kolaylaştıran ve tekrar kullanılabilirliği arttıran nitelik (attributes) tanımlamaları da mevcuttur. VHDL dilinde ön tanımlı olarak gelen nitelik (attributes) tanımlamaları olduğu gibi, kullanıcılar da kendi tanımlamalarını oluşturabilmektedir.

Bu bölümdeki başlıklar operatörlerin öncelik sırasına göre düzenlenmiş olup operatör tanımlamalarından sonra ise nitelik (attributes) tanımlamalarından bahsedilmiştir. Nitelik tanımlamaları özellikle genelleştirilebilir (generic design) tasarım yapmak adına oldukça faydalı araçlardır.

Nitelikler önceden tanımlı ve kullanıcı tanımlı olmak üzere ikiye ayrılmaktadır.

Önceden Tanımlı Nitelikler (Pre-defined Attributes)

Aşağıda önceden tanımlı nitelikler gösterilmiştir:

Veri Nitelikleri

  • LOW: Dizinin alt indisini döndürür.
  • HIGH: Dizinin üst indisini döndürür.
  • LEFT: Dizinin en soldaki indisini döndürür.
  • RIGHT: Dizinin en sağdaki indisini döndürür.
  • LENGTH: Vektör uzunluğunu döndürür.
  • RANGE: Vektör aralığını döndürür.
  • REVERSE_RANGE: Vektör aralığının tersini döndürür.

Aşağıda tanımlanan ornek_sinyal sinyali kullanarak veri niteliklerinin kullanımına ilişkin örnekler verilmiştir.

signal ornek_sinyal : std_logic_vector(3 downto 0) := “0101”;
-----
A <= ornek_sinyal(ornek_sinyal’low) ;
A <= ornek_sinyal(0) ;
-----
B <= ornek_sinyal(ornek_sinyal’high) ;
B <= ornek_sinyal(3) ;
-----
C <= ornek_sinyal(ornek_sinyal’left) ;
C <= ornek_sinyal(3) ;
-----
D <= ornek_sinyal(ornek_sinyal’right) ;
D <= ornek_sinyal(0) ;
-----
E <= ornek_sinyal’range ;
for n_i in E loop
for n_i in 3 downto 0 loop
-----
F <= ornek_sinyal’reverse_range ;
for n_i in F loop
for n_i in 0 to 3 loop

Sinyal tanımlama işleminde listeleme tipi tür kullanılmış ise aşağıda verilen nitelikler kullanılır.

  • VAL : Tip değerinin pozisyonunu döndürür.
type t_Kontrol is (BOSTA, BASLA, OKU, YAZ, TAMAM);
signal pozisyon : integer := t_Kontrol’pos(Yaz);
signal pozisyon : integer := 3;
  • POS : Tanımlı pozisyondaki tip değerinin döndürür.
type t_Kontrol is (BOSTA, BASLA, OKU, YAZ, TAMAM);
signal  deger: t_Kontrol := t_Kontrol’val(3);
signal  deger : t_Kontrol := Yaz;
  • LEFTOF : Tip değerinin solundaki değeri döndürür.
type t_Kontrol is (BOSTA, BASLA, OKU, YAZ, TAMAM);
signal  deger: t_Kontrol := t_Kontrol’leftof(Yaz);
signal  deger : t_Kontrol := Oku;
  • RIGHTOF : Tip değerinin sağındaki değeri döndürür.
type t_Kontrol is (BOSTA, BASLA, OKU, YAZ, TAMAM);
signal deger: t_Kontrol := t_Kontrol’rightof(Yaz);
signal deger : t_Kontrol := TAMAM;

Sinyal Nitelikleri

  • EVENT: Olay gerçekleştiğinde doğru değeri döndürür.
if (in_clk'event and in_clk='1') then
  • STABLE: Olay gerçekleşmediğinde doğru değeri döndürür.
if (not in_clk'stable and in_clk='1') then
  • ACTIVE: Herhangi bir hareket meydana geldiğinde doğru değeri döndürür.
  • QUIET(süre) : Belirtilen zaman diliminde hiçbir hareket meydana gelmediğinde doğru değeri döndürür.
  • LAST_VALUE: Son olaydan önceki değeri döndürür.

Kullanıcı Tanımlı Nitelikler (User Defined Attributes)

Aşağıda kullanıcı tanımlı nitelik söz dizimi verilmiştir.

attribute nitelik_ismi : nitelik_tipi;
attribute nitelik_ismi of hedef_isim : nesne is deger;

Aşağıda kullanıcı tanımlı niteliklerde kullanılabilecek nitelik_tipi, nesne ve deger örnekleri gösterilmiştir.

nitelik_tipi :  bit, integer, std_logic_vector(tüm veri tipleri)
nesne : type, signal, procedure, v.b
deger : ‘1’, 254, v.b

Aşağıda tanımlanan kosul_nitelik niteliği boolean nitelik tipindedir ve in_clk sinyalinin true olduğu durumlarda doğru değeri döndürür.

attribute kosul_nitelik : boolean;
attribute kosul_nitelik of in_clk: signal is “true”;

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir