VHDL’de Alt Devre Tanımlama – PORT MAP Kullanımı

VHDL varlığında, bir kaynak kod dosyası başka bir kaynak dosyası altında alt devre olarak kullanılabilir. VHDL dilinde alt devre component olarak adlandırılır. Giriş çıkış portlarından oluşan bileşenlerin tanımı, component tanımlamaya uygun olarak yapılmalıdır. Bu tanımlama, ana kod içerisinde tanımlama bölgesinde (architecture Behavioral of varlik_adi is ile begin arasında) veya package içerisinde tanımlanabilmektedir. Ana kod içerisinde alt devre aşağıdaki gibi tanımlanabilmektedir.

durum_adi : component_adi port map (
   asil_ad => mevcut_ad
{, asil_ad => mevcut_ad} ) ;

asil_ad, alt devre varlığında tanımlı portların isimleridir. mevcut_ad ise sinyal veya ana kod portlarıdır. port map tanımlama içerisinde asil_ad kullanmak zorunlu değildir. Aşağıda component tanımlama şekli gösterilmiştir.

architecture Behavioral of varlik_adi is
      ..
      ..
component bilesen_adi
    generic (parametre_adi : integer := varsayilan_deger{;
         parametre_adi : integer := varsayilan_deger} ) ;
    port( port_adi {, port_adi} : [port_modu] tip_adi {;
      port_adi {, port_adi} : [port_modu] type_adi} ) ;
end component;
..
..
begin

Aşağıda 4 bitlik toplayıcı devresinin, tam_toplayici alt devresinin kullanımı ile tasarlanmasına ilişkin blok şema gösterilmiştir. Şekilden de görüleceği üzere dort_bit_toplayici 4 bitlik in_giris_1 ve in_giris_2 giriş portlarına, 1 bitlik in_giris_elde giriş portuna, 4 bitlik out_cikis çıkış portuna ve 1 bitlik out_cikis_elde çıkış portuna sahiptir. tam_toplayici varlığı ise 1 bitlik 3 giriş portuna ve 1 bitlik 2 çıkış portuna sahiptir. 

Şekil 1 4 bitlik tam toplayıcı devresinin alt devre kullanılarak gösterimi

in_giris_elde girişi ile birlikte in_giris_1 ve in_giris_2 girişlerinin en anlamsız bitleri (in_giris_1(0) ve in_giris_2(0)) adim_0 ile tanımlanan tam_toplayici alt devresine giriş olarak verilmektedir. adim_0 alt devrenin sonucunda elde edilen ilk çıkış biti out_cikis çıkış değerinin en anlamsız biti (out_cikis(0)) olmaktadır. Diğer çıkış parametresi olan elde değeri r_elde sinyalinin 1. bitine atanmakta ve bu bit değeri aynı zamanda adim_1 ile tanımlanan tam_toplayici alt devresine giriş olarak verilmektedir.

r_elde(1) girişi ile birlikte in_giris_1(1) ve in_giris_2(1) bitleri adim_1 ile tanımlanan tam_toplayici alt devresine giriş olarak verilmektedir. Bu alt devrenin sonucunda elde edilen ilk çıkış biti out_cikis(1) çıkış değerine atanmaktadır. Diğer çıkış parametresi olan elde değeri r_elde sinyalinin 2. bitine atanmakta ve bu bit değeri aynı zamanda adim_2 ile tanımlanan tam_toplayici alt devresine giriş olarak verilmektedir.

r_elde(2) girişi ile birlikte in_giris_1(2) ve in_giris_2(2) bitleri adim_2 ile tanımlanan tam_toplayici alt devresine giriş olarak verilmektedir. Bu alt devrenin sonucunda elde edilen ilk çıkış biti out_cikis(2) çıkış değerine atanmaktadır. Diğer çıkış parametresi olan elde değeri r_elde sinyalinin 3. bitine atanmakta ve bu bit değeri aynı zamanda adim_3 ile tanımlanan tam_toplayici alt devresine giriş olarak verilmektedir. 

r_elde(3) girişi ile birlikte in_giris_1(3) ve in_giris_2(3) bitleri adim_3 ile tanımlanan tam_toplayici alt devresine giriş olarak verilmektedir. Bu alt devrenin sonucunda elde edilen ilk çıkış biti out_cikis(3) çıkış değerine atanmaktadır. Diğer çıkış parametresi olan elde değeri ise out_cikis_eldeçıkışına atanarak toplama işleminin sonucu elde edilmektedir.

Uygulamada dikkat edilmesi gereken husus, adım_1ile tanımlanan alt devrenin doğru sonuç üretebilmesi için adım_0 ile tanımlanan alt devrenin sonucunu bekleyeceğidir. Aynı şekilde adım_2 ile tanımlanan alt devre adim_1 ile tanımlanan alt devrenin, adim_3 ile tanımlanan alt devre ise adim_2 ile tanımlanan alt devrenin sonucunu beklemektedir.

Örnek 1: Şekil 1’de verilen blok şemaya ait dort_bit_toplayici.vhd  VHDL kodu aşağıda verilmiştir. dort_bit_toplayici varlığının port tanımlamaları 5-11. satırlar arasında yapılmıştır. in_giris_elde portu in modunda std_logic tipindedir. in_giris_1 ve in_giris_2  portları in modunda 4 bitlik std_logic_vector tipindedir. out_cikis portu out modunda 4 bitlik std_logic_vector tipindedir. out_cikis_elde portu out modunda std_logic tipindedir. tam_toplayici alt devresinin tanımlama işlemleri 17-25. satırlar arasında yapılmıştır.

30-31. satırlarda adim_0 isimli tam_toplayici alt devresin port atamaları yapılmıştır. Görüleceği üzere atam işlemleri yapılırken asil_ad kullanılmamıştır. Şekil 5.1’de gösterildiği gibi adim_0 alt devresinde in_giris_elde, in_giris_1(0) ve in_giris_2(0) giriş portları alt devreye giriş olarak verilmiştir. adim_0 alt devresi çıkışlarından sonuç değerini tutan port direk olarak out_cikis(0) çıkış portuna bağlanmıştır. Elde değerini tutan çıkış portu r_elde sinyalinin 1. bitine atanarak adim_1 alt devresine elde girişi olarak verilmektedir.

32-33. satırlarda adim_1 isimli tam_toplayici alt devresin port atamaları yapılmıştır. Görüleceği üzere atam işlemleri yapılırken asil_ad kullanılmamıştır. adim_1 alt devresinde r_elde(1) sinyali ile birlikte in_giris_1(1) ve in_giris_2(1) giriş portları alt devreye giriş olarak verilmiştir. adim_1 alt devresi çıkışlarından sonuç değerini tutan port direk olarak out_cikis(1) çıkış portuna bağlanmıştır. Elde değerini tutan çıkış portu r_elde sinyalinin 2. bitine atanarak adim_2 alt devresine elde girişi olarak verilmektedir.

34-35. satırlarda adim_2 isimli tam_toplayici alt devresin port atamaları yapılmıştır. Görüleceği üzere atam işlemleri yapılırken asil_ad kullanılmamıştır. adim_2 alt devresinde r_elde(2) sinyali ile birlikte in_giris_1(2) ve in_giris_2(2) giriş portları alt devreye giriş olarak verilmiştir. adim_2 alt devresi çıkışlarından sonuç değerini tutan port direk olarak out_cikis(2) çıkış portuna bağlanmıştır. Elde değerini tutan çıkış portu r_elde sinyalinin 3. bitine atanarak adim_3 alt devresine elde girişi olarak verilmektedir.

36-41. satırlarda adim_3 isimli tam_toplayici alt devresin port atamaları yapılmıştır. Görüleceği üzere atam işlemleri yapılırken asil_ad kullanılmıştır. Kullanımdan da görüleceği üzere önce component içerisinde tanımlanan giriş çıkış değerlerine karşılık gelen atamalarının yapıldığı görülmektedir. Örneğin r_elde(3) sinyali tam_toplayici alt devresinin in_giris_elde giriş portuna bağlanmıştır. adim_3 alt devresinde r_elde(3) sinyali ile birlikte in_giris_1(3) ve in_giris_2(3) giriş portları alt devreye giriş olarak verilmiştir. adim_3 alt devresi çıkışlarından sonuç değerini tutan port direk olarak out_cikis(3) çıkış portuna bağlanmıştır. Elde değerini tutan çıkış portu out_cikis_elde çıkış portuna bağlanmıştır.

library IEEE;
use IEEE.STD_LOGIC_1164.all;
 
entity dort_bit_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 dort_bit_toplayici;
 
architecture Behavioral of dort_bit_toplayici is
 
  component tam_toplayici
  Port (
    in_giris_elde : in std_logic;
    in_giris_1 : in std_logic;
    in_giris_2 : in std_logic;
    out_cikis : out std_logic;
    out_cikis_elde : out std_logic
  );   
  end component;

  signal r_elde : std_logic_vector(1 to 3) ;

begin

  adim_0: tam_toplayici port map (in_giris_elde, in_giris_1(0),
         in_giris_2(0), out_cikis(0), r_elde(1) ) ;
  adim_1: tam_toplayici port map (r_elde(1), in_giris_1(1),
         in_giris_2(1), out_cikis(1), r_elde(2) ) ;
  adim_2: tam_toplayici port map (r_elde(2), in_giris_1(2),
          in_giris_2(2), out_cikis(2), r_elde(3) ) ;
  adim_3: tam_toplayici port map (
          in_giris_elde => r_elde(3),
          in_giris_1 => in_giris_1(3),
          in_giris_2 => in_giris_2(3),
          out_cikis => out_cikis(3),
          out_cikis_elde => out_cikis_elde) ;

end Behavioral;

Örnekte alt devre olarak tam toplayıcı devresine ait tam_toplayici.vhd VHDL kodu aşağıda verilmiştir.

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
 
entity tam_toplayici is
  Port (
    in_giris_elde : in std_logic;
    in_giris_1 : in std_logic;
    in_giris_2 : in std_logic;
    out_cikis : out std_logic;
    out_cikis_elde : out std_logic
  );
end tam_toplayici;
 
architecture Behavioral of tam_toplayici is
 
begin
 
  out_cikis <= in_giris_elde xor in_giris_1 xor in_giris_2;
  out_cikis_elde <= (in_giris_elde and in_giris_1) or
                    (in_giris_elde and in_giris_2) or
                    (in_giris_1 and in_giris_2);
 
end Behavioral;

Bir yanıt yazın

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