VHDL Veri Tipleri – signed ve unsigned Tipleri

signed ve unsigned veri tipi tanımlamaları std_logic_vector’e benzer şekilde yapılmaktadır. signed tipi VHDL dilinde kodda işaretli sayılar (2’ye tümleyen) için kullanılır. unsigned tipi işaretsiz sayılar için kullanılır.

Aşağıda örnek signed ve unsigned tipinde signal bildirimleri verilmiştir. kelime_unsigned sinyali 4 bitlik işaretsiz olarak tanımlanmıştır. Yani bu sinyal 0 ile 15 arasında on tabanındaki sayı değerlerini alabilecektir. kelime_signed sinyali 4 bitlik işaretli olarak tanımlandığından -8 ile 7 arasında değerleri alabilir.

signal kelime_unsigned : unsigned(3 downto 0);
signal kelime_signed : signed(3 downto 0);

Bu veri tiplerinin kullanımı için aşağıda verilen paketin kütüphane bildirimine eklenmesi gerekmektedir.

use ieee.std_logic_arith.all;

Bu paket aritmetik operatörlerin gerçeklenmesinde kullanılan devre tiplerini tanımlar. signed ve unsigned tiplerini içermektedir. Bu tipler, std_logic_vector tipi ile temelde aynıdır. Çünkü std_logic sinyalleri bir dizi halinde gösterirler. signed ve unsigned tipleri, kullanıcının VHDL kodunda kullanılan sayı gösterim çeşidini belirlemesine izin vermektedir.

sinyal_1  ve sinyal_2’nin signed tipinde tanımlı 4 bitlik sinyaller olduğunu farz edelim. Bu iki sinyal arasındaki “sinyal_1 < sinyal_2” karşılaştırması yapılırsa signed tipinde sonuç doğru olacaktır. Çünkü sinyal_1 sinyali -6 değerini temsil etmekte ve sinyal_2 sinyali 2  değerini temsil etmektedir.

sinyal_1 <= "1001"; -- signed sayı -6
sinyal_2 <= "0010"; -- signed sayı 2

sinyal_1  ve sinyal_2’nin unsigned tipinde tanımlı 4 bitlik sinyaller olduğunu farz edelim. Bu iki sinyal arasındaki “sinyal_1 < sinyal_2” karşılaştırması yapılırsa unsigned tipinde sonuç yanlış olacaktır. Çünkü sinyal_1 sinyali 9 değerini temsil etmekte ve sinyal_2 sinyali 2 değerini temsil etmektedir.

sinyal_1 <= "1001"; -- unsigned sayı 9
sinyal_2 <= "0010"; -- unsigned sayı 2

std_logic_signed paketinde, std_logic_vector tipine signed tipindeki gibi davranışlar tanımlanmıştır. Aynı şekilde std_logic_unsigned paketinde, std_logic_uvector tipine unsigned tipindeki gibi davranışlar tanımlanmıştır.

Aşağıda verilen ornek_signed.vhd kodunda 1. satırda IEEE kütüphanelerinin kullanılacağına ilişkin bildirim yapılmaktadır. 2. satır da std_logic veri tipinin kullanımı içine gerekli kütüphane bildirimi yapılmaktadır. 3. satırda yapılan tanımlama ile std_logic veri tipinde toplama ve çarpma işlemlerinin yapılması sağlanmaktadır. 4. satırda yapılan tanımlama ile signed ve unsigned tanımlama işlemlerinin yapılması sağlanmaktadır. ornek_signed varlığının port tanımlama işlemleri 7-13. satırlar arasında yapılmıştır. in_giris_1 ve in_giris_2 giriş portları 4 bitlik std_logic_vector tipindedir. in_giris_3 giriş portu ise 4 bitlik signed tipindedir.  out_cikis_1 çıkış portu 4 bitlik std_logic_vector tipindedir. out_cikis_2 çıkış portu ise 4 bitlik signed tipindedir.  20. satırda tanımlanan söz diziminde in_giris_3 giriş port std_logic_vector tipine dönüştürüldükten sonra 1 eklenerek out_cikis_1 çıkış portuna atanmaktadır. 21. satırda in_giris_1 ve in_giris_2 giriş portları toplandıktan sonra signed tipine dönüştürülmekte ve out_cikis_2 çıkış portuna atanmaktadır.

library IEEE;
use IEEE.STD_LOGIC_1164.all;
use IEEE.STD_LOGIC_SIGNED.all;
use IEEE.STD_LOGIC_ARITH.all;
 
entity ornek_signed is
  port (
    in_giris_1 : in std_logic_vector(3 downto 0);
    in_giris_2 : in std_logic_vector(3 downto 0);
    in_giris_3 : in signed(3 downto 0);
    out_cikis_1 : out std_logic_vector(3 downto 0);
    out_cikis_2 : out signed(3 downto 0)
  );
end ornek_signed; 

architecture Behavioral of ornek_signed is

begin

  out_cikis_1 <= std_logic_vector(in_giris_3) + 1;
  out_cikis_2 <= signed(in_giris_1 + in_giris_2);

end Behavioral;

Bir yanıt yazın

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