VHDL’de Kaydırmalı Saklayıcı (Shift Register) Tasarımı

Sık kullanılan bir diğer saklayıcı tasarımı da “Kaydırmalı Saklayıcı” adı verilen tasarımdır. Bu tasarımda giriş portundan verilen veriler sırayla kayarak saklayıcı içinde D İki Durumluları (D Flip-Flop) arasında aktarılır. Şekil 1’de bu saklayıcıya mimari gösterimi verilmiştir. Kaydırmalı  Saklayıcı çıkışları her saat darbesi ile güncellendiği için çıkışlar gelen veriye göre sürekli değişiklik gösterecektir.

Şekil 9‑11 Kaydırmalı saklayıcı tasarımı

Örnek 1: Aşağıda 4 bitlik, sağa kaydırma yapan saklayıcı devresinin gerçekleştirildiği kaydirmali_saklayici.vhd VHDL kodu verilmiştir. kaydirmali_saklayici varlığımıza ilişkin port bildirimleri 5-10. satırlar arasında yapılmıştır. Kaydırmalı saklayıcı tasarımında 1 bitlik saat darbesi giriş portu, 1 bitlik reset giriş portu, 1 bitlik data giriş portu ve 4 bitlik çıkış portu mevcuttur.  15. satırda 4 bitlik r_saklayici sinyali tanımlanmaktadır. 19. satırda out_cikis portuna r_saklayici sinyali atanmaktadır. 21. satırda tanımlanan söz dizimi ile process’in in_clk, in_rst ve in_giris giriş portlarında meydana gelen değişiklikler ile aktif olacağı belirtilmektedir.

process içerisinde yapılan tanımlamardan da görüleceği üzere saklayıcı tasarımında eş zamanlı olmayan reset kullanılmıştır. 23. satırda  in_rst giriş portu ‘1’ değerini aldığında  in_giris giriş portunun aldığı değerler  farketmeksiniz r_saklayici sinyalinin tüm bitlerine ‘0’ değeri atanmaktadır. Bu durumda out_cikis çıkış portunun tüm bitleride ‘0’ atanmaktadır.

in_rst giriş portunun diğer durumlarında ise in_clk giriş portunun yükselen kenarı ile birlikte 26. satırda tanımlanan koşul ifadesinin gerçeklenmesiyle in_giris giriş port değeri r_saklayici sinyalinin en anlamlı bitine atanmaktadır. r_saklayici sinyalinin 3. biti 2.bite, 2.biti 1.bite ve 1. bit en anlamsız bite atanmtakdır. r_saklayici sinyal olarak tanımlandığından dolayı tüm atama işlemleri process sonunda yapılmaktadır. in_clk giriş portunda yükselen kenarının meydana gelmemesi durumunda ise r_saklayici sinyali bir önceki değerini korumaktadır.

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
 
entity kaydirmali_saklayici is
  Port (
    in_clk : in std_logic;
    in_rst : in std_logic;
    in_giris : in std_logic;
    out_cikis : out std_logic_vector(3 downto 0)
  );
end kaydirmali_saklayici;
 
architecture Behavioral of kaydirmali_saklayici is
 
  signal r_saklayici : std_logic_vector(3 downto 0) := (others => ‘0’);
 
begin
 
  out_cikis <= r_saklayici;
 
  process(in_clk, in_rst, in_giris)
  begin
    if in_rst = '1' then
      r_saklayici <= (others => '0');
    elsif rising_edge(in_clk) then
      r_saklayici(3) <= in_giris ;
      r_saklayici(2) <= r_saklayici(3) ;
      r_saklayici(1) <= r_saklayici(2) ;
      r_saklayici(0) <= r_saklayici(1) ;

    end if;
  end process;
 
end Behavioral;

Aşağıda ise kaydirmali_saklayici varlığının benzetim yapılabilmesi için tb_kaydirmali_saklayici.vhd sınama kodu verilmiştir ve benzetim çıktısı Şekil 2’de gösterilmiştir. Şekil 2’de gösterilen benzetim sonucunda:

1. adım: in_rst giriş portunundeğerinin ‘0’ olması ve in_clk giriş portunun yükselen kenarı ile birliktein_giris giriş portu değeri (‘1’)  r_saklayici sinyalinin en anlamlı bitine atanmaktadır ve diğer bitlerin sırasıyla atama işlemleri yapılmaktadır. Atama işlemi ile birlikte r_sakalyici sinyalinin değeri “1000” olmaktadır. r_saklayici değerinin “1000” olması ile out_cikis çıkış portuna “1000” değeri atanmaktadır.

2. adım: in_rst giriş portunundeğerinin ‘0’ olması ve in_clk giriş portunun yükselen kenarı ile birliktein_giris giriş portu değeri (‘0’) r_saklayici sinyalinin en anlamlı bitine atanmaktadır ve diğer bitlerin sırasıyla atama işlemleri yapılmaktadır. Atama işlemi ile birlikte r_sakalyici sinyalinin değeri “0100” olmaktadır. r_saklayici değerinin “0100” olması ile out_cikis çıkış portuna “0100” değeri atanmaktadır.

3. adım: in_rst giriş portunundeğerinin ‘0’ olması ve in_clk giriş portunun yükselen kenarı ile birliktein_giris giriş portu değeri (‘1’) r_saklayici sinyalinin en anlamlı bitine atanmaktadır ve diğer bitlerin sırasıyla atama işlemleri yapılmaktadır. Atama işlemi ile birlikte r_sakalyici sinyalinin değeri “1010” olmaktadır. r_saklayici değerinin “1010” olması ile out_cikis çıkış portuna “1010” değeri atanmaktadır.

4. adım :in_rst giriş portunundeğeri ‘1’ olması nedeniyle r_saklayici değerine “0000” atanmaktadır. r_saklayici değerinin “0000”  olması ile out_cikis çıkış portuna “0000” değeri atanmaktadır.

5. adım : in_rst giriş portunundeğerinin ‘0’ olması ve in_clk giriş portunun yükselen kenarı ile birliktein_giris giriş portu değeri (‘1’) r_saklayici sinyalinin en anlamlı bitine atanmaktadır ve diğer bitlerin sırasıyla atama işlemleri yapılmaktadır. Atama işlemi ile birlikte r_sakalyici sinyalinin değeri “1000” olmaktadır. r_saklayici değerinin “1000” olması ile out_cikis çıkış portuna “1000” değeri atanmaktadır.

6. adım : in_rst giriş portunundeğerinin ‘0’ olması ve in_clk giriş portunun yükselen kenarı ile birliktein_giris giriş portu değeri (‘0’) r_saklayici sinyalinin en anlamlı bitine atanmaktadır ve diğer bitlerin sırasıyla atama işlemleri yapılmaktadır. Atama işlemi ile birlikte r_sakalyici sinyalinin değeri “0100” olmaktadır. r_saklayici değerinin “0100” olması ile out_cikis çıkış portuna “0100” değeri atanmaktadır.

7. adım :in_rst giriş portunundeğerinin ‘0’ olması ve in_clk giriş portunun yükselen kenarı ile birliktein_giris giriş portu değeri (‘1’) r_saklayici sinyalinin en anlamlı bitine atanmaktadır ve diğer bitlerin sırasıyla atama işlemleri yapılmaktadır. Atama işlemi ile birlikte r_sakalyici sinyalinin değeri “1010” olmaktadır. r_saklayici değerinin “1010” olması ile out_cikis çıkış portuna “1010” değeri atanmaktadır.

8. adım:in_rst giriş portunundeğeri ‘1’ olması nedeniyle r_saklayici değerine “0000” atanmaktadır. r_saklayici değerinin “0000”  olması ile out_cikis çıkış portuna “0000” değeri atanmaktadır.

Şekil 2  signal veri nesnesi kullanılan kaydirmali_saklayici varlığı benzetim çıktısı

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
 
entity tb_kaydirmali_saklayici is
end tb_kaydirmali_saklayici;
 
architecture Behavioral of tb_kaydirmali_saklayici is
 
  component kaydirmali_saklayici
  Port (
    in_clk : in std_logic;
    in_rst : in std_logic;
    in_giris : in std_logic;
    out_cikis : out std_logic_vector(3 downto 0)
  );
  end component;
 
  constant CLK_PERIOD : time := 150 ns;
  signal in_clk : std_logic := '0';
  signal in_rst : std_logic := '0';
  signal in_giris : std_logic := '0';
  signal out_cikis : std_logic_vector(3 downto 0) := (others => '0');
 
begin
 
  process
  begin
    in_clk <= '1';    wait for CLK_PERIOD / 2;
    in_clk <= '0';    wait for CLK_PERIOD / 2;       
  end process;

  process
  begin
    in_rst <= '0'; wait for 350 ns;
    in_rst <= '1'; wait for 150 ns;
    in_rst <= '0'; wait for 450 ns;
    in_rst <= '1'; wait for 50 ns;             
  end process;
 
  process
  begin
    in_giris <= '1'; wait for CLK_PERIOD;
    in_giris <= '0'; wait for CLK_PERIOD;
    in_giris <= '1'; wait for 3 * CLK_PERIOD;
    in_giris <= '0'; wait for CLK_PERIOD;
    in_giris <= '1'; wait for CLK_PERIOD;
    in_giris <= '0'; wait for CLK_PERIOD;                        
  end process;

  kaydirmali_saklayic_map : kaydirmali_saklayici
  port map(
    in_clk => in_clk,
    in_rst => in_rst,
    in_giris => in_giris,
    out_cikis => out_cikis       
  );
end Behavioral;

Örnek 2: Örnek 1’de verilen VHDL kodunda ufak bir değişiklik yapılarak tasarımda signal veri nesnesi yerine variable veri nesnesi kullanılmıştır. Bu tasarıma ait VHDL kodu aşağıda verilmiştir.  15. satırda 4 bitlik r_saklayici sinyali ve 22.satırda 4 bitlik  v_saklayici değişkeni tanımlanmaktadır. 19. satırda out_cikis çıkış portuna r_saklayici sinyali atanmaktadır. 21. satırda tanımlanan söz dizimi ile process’in in_clk, in_rst ve in_giris giriş portlarında meydana gelen değişiklikler ile aktif olacağı belirtilmektedir.

process içerisinde yapılan tanımlamardan da görüleceği üzere saklayıcı tasarımında eş zamanlı olmaya reset kullanılmıştır. 24. satırda  in_rst giriş portu ‘1’ değerini aldığında  in_giris giriş portunun aldığı değerler  farketmeksiniz v_saklayi değişkeninin tüm bitlerine ‘0’ değeri atanmaktadır. in_rst girişinin diğer durumlarında ise in_clk giriş portunun yükselen kenarı ile birlikte 27. satırda tanımlanan koşul ifadesi ile in_giris giriş port değeri v_saklayici değişkeninin en anlamlı bitine atanmaktadır. v_saklayici sinyalinin 3. biti 2.bite, 2.biti 1.bite ve 1. bit en anlamsız bite atanmtakdır.

34. satırda process‘in sonunda v_saklayici değişkeninin aldığı değer r_saklayici değişkenine atanarak process dışına aktarılmaktadır.  variable veri nesnesi tüm atama işlemleri o anda yapıldığından dolayı in_giris portunun değeri v_saklayici değişkeninin tüm bitlerine atanmaktadır. Şekil 3’den de görüleceği üzere in_giris giriş portu değerinin ‘1’ olduğu zamanlarda r_saklayici sinyali ve out_cikis çıkış portu “1111” değerini almaktadır. Aynı şekilde in_giris giriş portu değerinin ‘0’ olduğu zamanlarda r_saklayici sinyali ve out_cikis çıkış portu “0000” değerini almaktadır.

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
 
entity kaydirmali_saklayici is
  Port (
    in_clk : in std_logic;
    in_rst : in std_logic;
    in_giris : in std_logic;
    out_cikis : out std_logic_vector(3 downto 0)
  );
end kaydirmali_saklayici;

architecture Behavioral of kaydirmali_saklayici is

  signal r_saklayici : std_logic_vector(3 downto 0) := (others => '0');

begin

  out_cikis <= r_saklayici;

  process(in_clk, in_rst, in_giris)
    variable v_saklayici : std_logic_vector(3 downto 0) := (others => '0');
  begin
    if in_rst = '1' then
      v_saklayici := (others => '0');

    elsif rising_edge(in_clk) then
      v_saklayici(3) := in_giris ;
      v_saklayici(2) := v_saklayici(3) ;
      v_saklayici(1) := v_saklayici(2) ;
      v_saklayici(0) := v_saklayici(1) ;

    end if;
    r_saklayici <= v_saklayici;
  end process;

end Behavioral;

Şekil 3  variable veri nesnesi kullanılan kaydirmali_saklayici varlığı benzetim çıktısı

Şekil 9‑13’tende görüleceği üzere yukarıda verilen kaydirmali_saklayici.vhd VHDL kodu kaydırmalı saklayıcı işlevini yerine getirememektedir. Kodun kaydırmalı saklayıcı işlevini yapabilmesi için 28-31 nolu satırlar aşağıda verilen kod satırı ile değiştirilmelidir.

v_saklayici(0) := v_saklayici(1) ;
v_saklayici(1) := v_saklayici(2) ;
v_saklayici(2) := v_saklayici(3) ;
v_saklayici(3) := in_giris ;

Örnek 3: Aşağıda kaydırma yönünün tayin edilebildiği n_bit bitlik kaydırmalı saklayıcı devresinin gerçekleştirildiği generic_kaydirmali_saklayici.vhd VHDL kodu verilmiştir.  generic_kaydirmali_saklayici varlığımıza ilişkin generic bildirimleri 5-7. satırlarda, port bildirimleri 8-14. satırları arasında yapılmaktıdır.

Kaydırmalı saklayıcı tasarımında 1 bitlik saat darbesi giriş portu, 1 bitlik reset giriş portu, 1 bitlik kaydırma yönünün tayin edildiği giriş portu, 1 bitlik data giriş portu ve n_bit bitlik çıkış portu mevcuttur. 

20-31. satırlar arasında sola kaydırma işleminin yapıldığı f_sola_kaydir fonksiyonu tanımlanmıştır. 33-44. satırlar arasında sağa kaydırma işleminin yapıldığı f_saga_kaydir fonksiyonu tanımlanmıştır.

56. satırta tanımlı koşul ifadesinin gerçeklenmesi durumunda r_saklayici sinyalinin tüm bitleri sola kaydırılmakta ve en anlamsız bitine in_giris giriş portu değeri yazılmaktadır. 58. satırta tanımlı koşul ifadesinin gerçeklenmesi durumunda r_saklayici sinyalinin tüm bitleri sağa kaydırılmakta ve en anlamlı bitine in_giris giriş portu değeri yazılmaktadır.

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
 
entity generic_kaydirmali_saklayici is
  Generic(
    n_bit : integer := 4
  );
  Port (
    in_clk : in std_logic;
    in_rst : in std_logic;
    in_yon : in std_logic;
    in_giris : in std_logic;               
    out_cikis : out std_logic_vector(n_bit - 1 downto 0)
  );
end generic_kaydirmali_saklayici;

architecture Behavioral of generic_kaydirmali_saklayici is
  signal r_saklayici : std_logic_vector(n_bit - 1 downto 0) := (others => '0');
 
  function f_sola_kaydir(in_giris : std_logic; in_saklayici : std_logic_vector(n_bit - 1 downto 0) ) 
  return std_logic_vector is
    variable v_saklayici : std_logic_vector(n_bit - 1 downto 0);
  begin
    v_saklayici := in_saklayici;
    for n_i in n_bit - 2 downto 0 loop
      v_saklayici(n_i + 1) := v_saklayici(n_i);
    end loop;
    v_saklayici(0) := in_giris;
    return v_saklayici;
 
  end f_sola_kaydir;
 
  function f_saga_kaydir(in_giris : std_logic; in_saklayici : std_logic_vector(n_bit - 1 downto 0) ) 
  return std_logic_vector is
    variable v_saklayici : std_logic_vector(n_bit - 1 downto 0);
  begin
    v_saklayici := in_saklayici;
    for n_i in  1 to n_bit - 1 loop
      v_saklayici(n_i - 1) := v_saklayici(n_i);
    end loop;
    v_saklayici(n_bit - 1) := in_giris;
    return v_saklayici;
 
  end f_saga_kaydir;    
begin
 
  out_cikis <= r_saklayici;
 
  process(in_clk, in_rst, in_giris)
  begin
    if in_rst = '1' then
      r_saklayici <= (others => '0');
 
    elsif rising_edge(in_clk) then
 
      if in_yon = '0' then
        r_saklayici <= f_sola_kaydir(in_giris, r_saklayici);
      elsif in_yon = '1' then
        r_saklayici <= f_saga_kaydir(in_giris, r_saklayici);
      end if;
    end if;
  end process;
 
end Behavioral;

Aşağıda ise kaydirmali_saklayici varlığının benzetim yapılabilmesi için tb_kaydirmali_saklayici.vhd sınama kodu verilmiştir ve benzetim çıktısı Şekil 4’de gösterilmiştir. Şekil 4’de gösterilen benzetim sonucunda:

1. adım : in_rst giriş portunundeğerinin ‘0’ olması ve in_clk giriş portunun yükselen kenarı ile birlikte in_yon giriş portunun ‘0’ değerini alması ile 56. satırda tanımlı koşul ifadesine bağlı 57. satırda tanımlı f_sola_kaydir fonksiyon işlemi gerçekleştirilerilmektedir ve  fonksiyonun döndürdüğü değer r_saklayici sinyaline atanmaktadır. in_giris giriş portu değeri (‘1’) r_saklayici sinyalinin en anlamsız bitine atanmaktadır ve diğer bitlerin sırasıyla atama işlemleri yapılmaktadır. Atama işlemlerinin sonucunda r_saklayici sinyalinin değeri “0001” olmaktadır. r_saklayici değerinin “0001”  olması ile out_cikis çıkış portuna “0001” değeri atanmaktadır.

2. adım :in_rst giriş portunundeğerinin ‘0’ olması ve in_clk giriş portunun yükselen kenarı ile birlikte in_yon giriş portunun ‘0’ değerini alması ile 56. satırda tanımlı koşul ifadesine bağlı 57. satırda tanımlı f_sola_kaydir fonksiyon işlemi gerçekleştirilerilmektedir ve  fonksiyonun döndürdüğü değer r_saklayici sinyaline atanmaktadır. in_giris giriş portu değeri (‘0’) r_saklayici sinyalinin en anlamsız bitine atanmaktadır ve diğer bitlerin sırasıyla atama işlemleri yapılmaktadır. Atama işlemlerinin sonucunda r_saklayici sinyalinin değeri “0010” olmaktadır. r_saklayici değerinin “0010”  olması ile out_cikis çıkış portuna “0010” değeri atanmaktadır.

3. adım :in_rst giriş portunundeğerinin ‘0’ olması ve in_clk giriş portunun yükselen kenarı ile birlikte in_yon giriş portunun ‘0’ değerini alması ile 56. satırda tanımlı koşul ifadesine bağlı 57. satırda tanımlı f_sola_kaydir fonksiyon işlemi gerçekleştirilerilmektedir ve  fonksiyonun döndürdüğü değer r_saklayici sinyaline atanmaktadır. in_giris giriş portu değeri (‘1’) r_saklayici sinyalinin en anlamsız bitine atanmaktadır ve diğer bitlerin sırasıyla atama işlemleri yapılmaktadır. Atama işlemlerinin sonucunda r_saklayici sinyalinin değeri “0101” olmaktadır. r_saklayici değerinin “0101”  olması ile out_cikis çıkış portuna “0101” değeri atanmaktadır.

4. adım :in_rst giriş portunundeğerinin ‘0’ olması ve in_clk giriş portunun yükselen kenarı ile birlikte in_yon giriş portunun ‘1’ değerini alması ile 58. satırda tanımlı koşul ifadesine bağlı 59. satırda tanımlı f_saga_kaydir fonksiyon işlemi gerçekleştirilerilmektedir ve  fonksiyonun döndürdüğü değer r_saklayici sinyaline atanmaktadır. in_giris giriş portu değeri (‘0’) r_saklayici sinyalinin en anlamlı bitine atanmaktadır ve diğer bitlerin sırasıyla atama işlemleri yapılmaktadır. Atama işlemlerinin sonucunda r_saklayici sinyalinin değeri “0010” olmaktadır. r_saklayici değerinin 0010  olması ile out_cikis çıkış portuna0010 değeri atanmaktadır.

5. adım :in_rst giriş portunundeğeri ‘1’ olması nedeniyle r_saklayici değerine “0000” atanmaktadır. r_saklayici değerinin “0000”  olması ile out_cikis çıkış portuna “0000” değeri atanmaktadır.

6. adım : in_rst giriş portunundeğeri ‘0’ olmasına rağmen in_clk giriş portunda yükselen kenar meydan gelmediği için r_saklayici sinyalinin değerinde değişiklik olmamıştır.

7. adım : in_rst giriş portunundeğerinin ‘0’ olması ve in_clk giriş portunun yükselen kenarı ile birlikte in_yon giriş portunun ‘0’ değerini alması ile 56. satırda tanımlı koşul ifadesine bağlı 57. satırda tanımlı f_sola_kaydir fonksiyon işlemi gerçekleştirilerilmektedir ve fonksiyonun döndürdüğü değer r_saklayici sinyaline atanmaktadır. in_giris giriş portu değeri (‘1’) r_saklayici sinyalinin en anlamsız bitine atanmaktadır ve diğer bitlerin sırasıyla atama işlemleri yapılmaktadır. Atama işlemlerinin sonucunda r_saklayici sinyalinin değeri “0001” olmaktadır. r_saklayici değerinin “0001”  olması ile out_cikis çıkış portuna “0001” değeri atanmaktadır.

8. adım :in_rst giriş portunundeğerinin ‘0’ olması ve in_clk giriş portunun yükselen kenarı ile birlikte in_yon giriş portunun ‘0’ değerini alması ile 56. satırda tanımlı koşul ifadesine bağlı 57. satırda tanımlı f_sola_kaydir fonksiyon işlemi gerçekleştirilerilmektedir ve  fonksiyonun döndürdüğü değer r_saklayici sinyaline atanmaktadır. in_giris giriş portu değeri (‘1’) r_saklayici sinyalinin en anlamsız bitine atanmaktadır ve diğer bitlerin sırasıyla atama işlemleri yapılmaktadır. Atama işlemlerinin sonucunda r_saklayici sinyalinin değeri “0011” olmaktadır. r_saklayici değerinin “0011”  olması ile out_cikis çıkış portuna “0011” değeri atanmaktadır.

Şekil 4  generic_kaydirmali_saklayici varlığı benzetim çıktısı

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
 
entity tb_generic_kaydirmali_saklayici is
end tb_generic_kaydirmali_saklayici;
 
architecture Behavioral of tb_generic_kaydirmali_saklayici is
 
  component generic_kaydirmali_saklayici
  Port (
    in_clk : in std_logic;
    in_rst : in std_logic;
    in_yon : in std_logic;
    in_giris : in std_logic;
    out_cikis : out std_logic_vector(3 downto 0)    );
  end component;
 
  constant CLK_PERIOD : time := 150 ns;
  signal in_clk : std_logic := '0';
  signal in_rst : std_logic := '0';
  signal in_yon : std_logic := '0';
  signal in_giris : std_logic := '0';
  signal out_cikis : std_logic_vector(3 downto 0) := (others => '0');
 
begin

  process
  begin
    in_clk <= '1';    wait for CLK_PERIOD / 2;
    in_clk <= '0';    wait for CLK_PERIOD / 2;       
  end process;
 
  process
  begin
    in_rst <= '0'; wait for 550 ns;
    in_rst <= '1'; wait for 150 ns;
    in_rst <= '0'; wait for 300 ns;           
  end process;
 
  process
  begin
    in_yon <= '0'; wait for 350 ns;
    in_yon <= '1'; wait for 350 ns;
    in_yon <= '0'; wait for 300 ns;           
  end process;   
 
  process
  begin
    in_giris <= '1'; wait for CLK_PERIOD;
    in_giris <= '0'; wait for CLK_PERIOD;
    in_giris <= '1'; wait for CLK_PERIOD;
    in_giris <= '0'; wait for CLK_PERIOD;
    in_giris <= '1'; wait for 3 * CLK_PERIOD;
    in_giris <= '0'; wait for CLK_PERIOD;                        
  end process;
 
  generic_kaydirmali_saklayic_map : generic_kaydirmali_saklayici
  port map(
    in_clk => in_clk,
    in_rst => in_rst,
    in_yon => in_yon,
    in_giris => in_giris,
    out_cikis => out_cikis       
  );

end Behavioral;

Bir yanıt yazın

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