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;