VHDL’de Basit Sinyal Atamaları

Basit sinyal atamaları lojik veya aritmetik ifadelerde kullanılır. Atama işlemine ait genel form aşağıda verilmiştir.

sinyal_adi <= ifade;

<= operatörü VHDL’de atama operatörüdür. Aşağıdaki verilen örnekte bu operatörün kullanımını daha detaylı olarak göstermektedir. sinyal_sonuc sinyaline, sinyal_1 ve sinyal_2 sinyallerinin xor sonucunun sinyal_3 ile and işlemine tabi tutulmasında elde edilen sonuç atanmaktadır. Bu tanımlamada sinyal_sonuc ifadesi, bir bitlik sonucu içermektedir.

..
..
signal sinyal_1 : std_logic;
signal sinyal_2 : std_logic;
signal sinyal_3 : std_logic;
signal sinyal_sonuc : std_logic;
..
..
sinyal_sonuc <= (sinyal_1 xor sinyal_2) and sinyal_3;
..
..

VHDL’de aynı zamanda çoklu bit atamaları da yapılabilmektedir. Aşağıda verilen örnekte sinyal_1 ve sinyal_2 sinyalleri 3 bitlik std_logic_vector tipinde tanımlanmıştır. sinyal_1 ve sinyal_2 sinyallerinin or işleminin sonucu ise yine 3 bitlik std_logic_vector tipinde tanımlanan sinyal_sonuc sinyaline atanmaktadır.

..
..
signal sinyal_1 : std_logic_vector(2 downto 0);
signal sinyal_2 : std_logic_vector(2 downto 0);
signal sinyal_sonuc : std_logic_vector(2 downto 0);
..
..
sinyal_sonuc <= sinyal_1 or sinyal_2;
..
..

Bu tanımlamada tek bitli olarak aslında aşağıdaki işlemler yapılmaktadır. sinyal_sonuc ifadesinin 0. bitine sinyal_1 ile sinyal_2’nin 0. bitlerinin or işlemlerinin sonucu atanmaktadır. Aynı şekilde sinyal_sonuc ifadesinin 1. bitine sinyal_1 ile sinyal_2’nin 1. bitlerinin or işlemlerinin sonucu ve sinyal_sonuc ifadesinin 2. bitine sinyal_1 ile sinyal_2’nin 2. bitlerinin or işlemlerinin sonucu atanmaktadır.

sinyal_sonuc(0) <= sinyal_1(0) or sinyal_2(0);
sinyal_sonuc(1) <= sinyal_1(1) or sinyal_2(1);
sinyal_sonuc(2) <= sinyal_1(2) or sinyal_2(2);

Aritmetik işlemlerde atama işlemlerine ilişkin örnek aşağıda verilmiştir. Verilen örnekte sinyal_1 ve sinyal_2 sinyalleri 4 bitlik std_logic_vector tipinde tanımlanmıştır. sinyal_1 ve sinyal_2 sinyallerinin toplama işleminin sonucu ise yine 4 bitlik std_logic_vector tipinde tanımlanan sinyal_sonuc sinyaline atanmaktadır.

..
..
signal sinyal_1 : std_logic_vector(3 downto 0);
signal sinyal_2 : std_logic_vector(3 downto 0);
signal sinyal_sonuc : std_logic_vector(3 downto 0);
..
..
sinyal_sonuc <= sinyal_1 + sinyal_2;
..
..

Yukarda belirtilen tanımlamaya alternatif olarak aşağıdaki tanımlamada kullanılabilmektedir. Verilen örnekte sinyal_1 ve sinyal_2 sinyalleri 4 bitlik std_logic_vector tipinde tanımlanmıştır. sinyal_3 ise 1 bitlik std_logic tipinde tanımlanmıştır. sinyal_1 sinyali & operatörü ile başına ‘0’ eklenerek 5 bitlik hale getirilmiştir. Daha sonra elde edilen bu değer sinyal_2 ve sinyal_3 ile toplanarak işleminin sonucu ise 5 bitlik std_logic_vector tipinde tanımlanan sinyal_sonuc sinyaline atanmaktadır.

..
..
signal sinyal_1 : std_logic_vector(3 downto 0);
signal sinyal_2 : std_logic_vector(3 downto 0);
signal sinyal_3 : std_logic;
signal sinyal_sonuc : std_logic_vector(4 downto 0);
..
..
sinyal_sonuc<= ('0' & sinyal_1) + sinyal_2  + sinyal_3 ;
..
..

Örnek 7.1 : Aşağıda verilen tam_toplayici.vhd VHDL kodunda 21. satırda yukarda anlatılan ifadenin kullanımıyla, 4 bitlik tam toplayıcı devresinde kullanılması gösterilmektedir. Toplam değerinin, en anlamlı biti elde değerini tutmaktadır ve out_cikis_elde değerine atanmaktadır. Geri kalan 4 bit ise toplam sonucu olarak out_cikis değerine atanmaktadır.

library IEEE;
use IEEE.STD_LOGIC_1164.all;
use IEEE.STD_LOGIC_SIGNED.all;
 
entity tam_toplayici is
  port (
    in_giris_elde : in std_logic;
    in_giris_1 : in std_logic_vector(3 downto 0);
    in_giris_2 : in std_logic_vector(3 downto 0);
    out_cikis : out std_logic_vector(3 downto 0);
    out_cikis_elde : out std_logic
  );
end tam_toplayici;
 
architecture Behavioral of tam_toplayici is
 
  signal r_Toplam : std_logic_vector(4 downto 0);
 
begin
 
  r_Toplam<= ('0' & in_giris_1) + in_giris_2 + in_giris_elde;
  out_cikis_elde<= r_Toplam(4);
  out_cikis<= r_Toplam(3 downto 0);

end Behavioral;

Bir yanıt yazın

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