VHDL’de Procedure Kullanımı

Fonksiyonun aksine procedure VHDL dilinde tanımlanan diğer söz dizimlerini de kullanılabilmektedir. Fonksiyon gibi bir değer döndürmez. VHDL kodundaki pozisyonlarına (mimari veya process içerisinde) bağlı olarak eş zamanlı veya sıralı olarak gerçeklenebilmektedir.

procedure modül içerisinde VHDL kodunun analizini kolaylaştırmaktadır. Çıkış parametrelerini kullanarak değişkenlerin sayılarını döndürebilir. Söz dizimi aşağıdaki gibidir :

procedure procedure_adi [(procedures_arayuz_listesi)] is
    tanımlamalar
begin
    Söz dizimleri
end procedures_adi;

Aşağıda 4 bitlik tam toplayıcı devresinin procesdure kullanılarak gerçeklenmesi gösterilmiştir.

procedure toplayici_4_bit(
  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 ) is

  variable v_elde: std_logic_vector(4 downto 0);

begin
 
  v_elde(0) := in_giris_elde;
  for n_i in 0 to 3 loop     
    out_cikis (n_i) <= in_giris_1(n_i) xor in_giris_2(i) xor v_elde(n_i);
    v_elde(n_i + 1) := (in_giris_1(n_i) and in_giris_2(n_i)) or
                       (in_giris_2(n_i) and v_elde(n_i)) or
                       (in_giris_2(n_i) and v_elde(n_i));
  end loop;
 
  out_cikis_elde  <= v_elde(4);
 
end toplayici_4_bit;

Örnek 1: Yukarıda tanımlanan toplayici_4_bit procedure’nin kullanıldığı procedure_ornek.vhd VHDL kodu aşağıda verilmiştir. Kodda procedure tanımlama işlemleri 16-38. satırlar arasında yapılmaktadır. 44. Satırda toplayici_4_bit fonksiyonu çağrılmaktadır. Fonksiyon girişleri in_giris_1, in_giris_2 ve in_giris_elde giriş portlarıdır. Fonksiyonun dönderdiği değer r_toplama_sonuc sinyaline atanmaktadır. 45. satırda toplama sonucu out_cikis çıkış portuna r_toplama_sonuc sinyalinin sağdan 4 biti atanmaktadır. 46. satırda elde sonuç değeri out_cikis_elde portuna r_toplama_sonuc sinyalinin en anlamlı biti atanmaktadır.

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
 
entity procedure_ornek 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 procedure_ornek;
 
architecture Behavioral of procedure_ornek is
 
  procedure toplayici_4_bit(
   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 ) is

    variable v_elde: std_logic_vector(4 downto 0);
 
  begin
 
    v_elde(0) := in_giris_elde;
    for n_i in 0 to 3 loop     
      out_cikis (n_i) := in_giris_1(n_i) xor in_giris_2(n_i) xor   v_elde(n_i);
      v_elde(n_i + 1) := (in_giris_1(n_i) and in_giris_2(n_i)) or  (in_giris_2(n_i) and v_elde(n_i)) or (in_giris_2(n_i) and v_elde(n_i));
    end loop;

    out_cikis_elde := v_elde(4);

  end toplayici_4_bit;
 
begin
 
  process(in_giris_elde, in_giris_1, in_giris_2)
    variable v_cikis : std_logic_vector(3 downto 0);
    variable v_cikis_elde : std_logic;               
  begin
 
    toplayici_4_bit(in_giris_elde, in_giris_1, in_giris_2, v_cikis, v_cikis_elde );
    out_cikis <= v_cikis;
    out_cikis_elde <= v_cikis_elde;
  end process;

end Behavioral;

Bir yanıt yazın

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