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ış portuna “0010“ 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;