VHDL Veri Tipleri – INTEGER Tipi

VHDL standardında aritmetik operatörlerin kullanımı ve ikili sayıların gösterimi için integer tipi kullanmak da mümkündür. integer tipinde, std_logic_vector tipinden farklı olarak bit sayısı belirtmeye gerek yoktur. Varsayılan olarak integer sayı tipi 32 bittir ve –(231-1) ile 231 – 1 aralığındaki sayıları göstermektedir.  Aşağıda örnek integer tipinde signal, constant, variable ve port  bildirimleri verilmiştir.

sayi : in integer;
signal sayi : integer;
constant sayi : integer;
variable sayi : integer;

integer tipinde sayaç kullanılacak ve bu sayaç 0 ile 15 arasında değer alacaksa integer veri tipinin tüm bitlerinin kullanımın yerine sadece 5 bitinin (1 bit işaret biti, 4 bit değer bitleri)  kullanımı yeterli olacaktır. Bu örnekte olduğu gibi integer tipinde, kullanılacak olan sayı aralığı tasarım aşamasında belirlenmiş ise bu sayı aralıkları tanımlanabilmektedir.  Bu şekilde VHDL sentezleyicisi tanımlı olan aralığa uygun bit uzunluğunda sentezleme işlemi yapabilmektedir. Sayı aralığı VHDL dilinde range to/downto sözdizimleri ile gerçeklenmektedir. Aşağıda tanımlanan sayı gösterimleri için sentezleyici 7 (1 bit işaret biti, 6 bit değer bitleri) bitlik değerler oluşturacaktır.

sayi : in integer range -63 to 63;
signal sayi : integer range -63 to 63;
constant sayi : integer range -63 to 63;
variable sayi : integer range -63 to 63;

Aşağıda verilen  ornek_integer.vhd VHDL kodunda  1. satırda IEEE kütüphanelerinin kullanılacağına ilişkin bildirim yapılmaktadır. 2. satır da integer veri tipinin kullanımı ve aritmetik işlemler için gerekli kütüphane bildirimi yapılmaktadır. ornek_integer varlığının port tanımlamaları 5-11. satırlar arasında yapılmıştır. Giriş-çıkış portlarının tümü integer tipinde tanımlanmıştır. in_giris_1 giris portu 0 ile 15 aralığında tanımlanmıştır ve bu giriş portu derleyici tarafından 5 bit (1 bit işaret biti, 4 bit değer bitleri)  ile sentezlenebilmektedir. in_giris_2 giriş portu 0 ile 31 aralığında tanımlanmıştır ve bu giriş portu derleyici tarafından 6 bit (1 bit işaret biti, 5 bit değer bitleri)  ile sentezlenebilmektedir. in_giris_3 giriş portu 0 ile 128 aralığında tanımlanmıştır ve bu giriş portu derleyici tarafından 9 bit (1 bit işaret biti, 8 bit değer bitleri) ile sentezlenebilmektedir. out_cikis_1 çıkış portu 0 ile 511 aralığında tanımlanmıştır ve bu çıkış portu derleyici tarafından 10 bit (1 bit işaret biti, 9 bit değer bitleri) ile sentezlenebilmektedir. out_cikis_2 çıkış portunda aralık tanımlaması yapılmadığından bu çıkış portu derleyici tarafından 32 bit ile sentezlenebilmektedir. Kodda 18. satırda in_giris_1 ve in_giris_2 giriş portları çarpılarak out_cikis_1 çıkış portuna atanmaktadır. 19. satırda in_giris_2 ve in_giris_3 giriş portları çarpılarak out_cikis_2 çıkış portuna atanmaktadır.

library IEEE;
use IEEE.STD_LOGIC_1164.all;
 
entity ornek_signed is
  port (
    in_giris_1 : in integer range 0 to 15;
    in_giris_2 : in integer range 0 to 31;
    in_giris_3 : in integer range 0 to 128;
    out_cikis_1 : out integer range 0 to 511;
    out_cikis_2 : out integer
  );
end ornek_signed;
 
architecture Behavioral of ornek_signed is
 
begin
 
  out_cikis_1 <= in_giris_1 * in_giris_2;
  out_cikis_2 <= in_giris_2 * in_giris_3;
 
end Behavioral;

std_logic_vector veri tipinde aritmetik işlemleri yapabilmek için std_logic_signed veya std_logic_unsigned kütüphanelerine ihtiyaç duyulmaktadır. integer veri tipinde aritmetik işlemler std_logic_1164 kütüphanesinde tanımlanmıştır.

Bir yanıt yazın

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