Bu kısıma kadar anlatılan örneklerden görüleceği üzere “D Mandalı” bilgiyi saklama özelliğine sahip bir elemandır. 1 Bit uzunluğundaki bilgi (‘1’ ya da ‘0’) “D Mandalı” üzerinde saklanabilmektedir. Bu özellik kullanılarak, birden fazla “D Mandalı” bir araya getirilerek basit bir hafıza elemanı tasarlamak münkündür. Bu şekilde tasarlanmış hafıza elemanlarına “saklayıcı” (register) adı verilmektedir. Şekil 1’de “D Mandalı” kullanılarak tasarlanmış bir saklayıcıya ait genel tasarım gösterimi verilmiştir. İstenilen sayıda D Mandalı kullanılarak, istenilen uzunlukta bir saklayıcı tasarlamak mümkündür.

Şekil 9‑8 Saklayıcı tasarımı
Örnek 1: Aşağıda 4 bitlik saklayıcı devresinin gerçekleştirildiği saklayici_4_bit.vhd VHDL kodu verilmiştir. saklayici_4_bit varlığımıza ilişkin port bildirimleri 5-10. satırları arasında yapılmaktıdır. Tanımlamalardan da görüleceği üzere saklayıcımızın data giriş ve çıkış portları 4 bittir. 17. satırda 4 bitlik r_saklayici sinyali tanımlanmaktadır. 20. 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 değerlerinden 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 r_saklayici sinyalinin tüm bitlerine ‘0’ değeri atanmaktadır. Bu durumda out_cikis değerinin tüm bitleride ‘0’ olmaktadır. in_rst girişinin diğer durumlarında ise in_clk giriş portunun yükselen kenarı ile birlikte in_giris değeri r_cikis sinyaline atanmaktadır. in_clk giriş sinyalinin yükselen kenarının meydana gelmemesi durumunda ise r_cikis sinyali bir önceki değerini korumaktadır.
library IEEE; use IEEE.STD_LOGIC_1164.all; entity saklayici_4_bit is port ( in_clk : in std_logic; in_rst : in std_logic; in_giris : in std_logic_vector(3 downto 0); out_cikis : out std_logic_vector(3 downto 0) ); end saklayici_4_bit; architecture Behavioral of saklayici_4_bit is signal r_saklayici : std_logic_vector(3 downto 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 <= in_giris; end if; end process; end Behavioral;
Aşağıda ise saklayici_4_bit varlığının benzetim yapılabilmesi için tb_saklayici_4_bit.vhd sınama kodu (test bench) verilmiştir ve benzetim çıktısı Şekil 2’de gösterilmiştir. Şekil 2’de gösterilen benzetim sonucunda:
1. adım :in_clk giriş portunun yükselen kenarı ile birliktein_rst giriş portudeğerinin ‘0’ olmasıyla in_giris giriş portu değeri r_saklayici sinyaline atanmaktadır ve r_saklayici sinyalinin değeri “0000” olmaktadır. r_saklayici sinyalinin değerinin “0000” olması ile out_cikis çıkış portuna “0000” değeri atanmaktadır.
2. adım :in_rst giriş portudeğerinin ‘1’ olması nedeniyle r_saklayici sinyaline “0000” değeri atanmaktadır. r_saklayici sinyalinin değerinin “0000” olması ile out_cikis çıkış portuna “0000”, değeri atanmaktadır. 2. adım içerisinde in_giris giriş portu değerinin değişmesi ile birlikte saat darbesi yükselen kenarının meydana gelmesine rağmen eş zamanlı olmayan reset ile tasarlanmış saklayıcının çıkışı değişmemektedir.
3. adım :in_rst giriş portudeğeri ‘0’ olmakta fakat saat darbesi yükselen kenarı meydana gelmemesi nedeniyle r_saklayici sinyalinin değeri değişmemektedir ve bu nedenle out_cikis çıkış portunun değeri de değişmemiştir.
4. adım : in_clk giriş portunun yükselen kenarı ile birliktein_rst giriş portudeğerinin ‘0’ olmasıyla in_giris giriş portu değeri r_saklayici sinyaline atanmaktadır ve r_saklayici sinyalinin değeri “1111” olmaktadır. r_saklayici sinyalinin değerinin “1111” olması ile out_cikis çıkış portuna “1111” değeri atanmaktadır.
5. adım :in_rst giriş portudeğerinin ‘1’ olmasıyla r_saklayici sinyalinin değerine “0000” atanmaktadır. r_saklayici sinyalinin değerinin “0000” olması ile out_cikis çıkış portuna “0000”değeri atanmaktadır.
6. adım :in_clk giriş portunun yükselen kenarı ile birliktein_rst giriş portudeğerinin ‘0’ olmasıyla in_giris giriş portu değeri r_saklayici sinyaline atanmaktadır ve r_saklayici sinyalinin değeri “0000” olmaktadır. r_saklayici sinyalinin değerinin “0000” olması ile out_cikis çıkış portuna “0000” değeri atanmaktadır.
7. adım :in_rst giriş portudeğerinin ‘1’ olmasıyla r_saklayici sinyaline “0000” değeriatanmaktadır. r_saklayici sinyalinin değerinin “0000” olması ile out_cikis çıkış portuna “0000” değeri atanmaktadır. 7. adım içerisinde in_giris giriş portu değerinin değişmesi ile birlikte saat darbesi yükselen kenarının meydana gelmesine rağmen eş zamanlı olmayan reset ile tasarlanmış saklayıcının çıkışı değişmemektedir.

Şekil 2 saklayici_4_bit varlığı benzetim çıktısı
library IEEE; use IEEE.STD_LOGIC_1164.ALL; entity tb_saklayici_4_bit is end tb_saklayici_4_bit; architecture Behavioral of tb_saklayici_4_bit is component saklayici_4_bit Port ( in_clk : in std_logic; in_rst : in std_logic; in_giris : in std_logic_vector(3 downto 0); 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_vector(3 downto 0) := (others => '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 50 ns; in_rst <= '1'; wait for 150 ns; in_rst <= '0'; wait for 300 ns; in_rst <= '1'; wait for 100 ns; in_rst <= '0'; wait for 100 ns; in_rst <= '1'; wait for 280 ns; in_rst <= '0'; wait for 20 ns; end process; process begin in_giris <= (others => '0'); wait for 100 ns; in_giris <= (others => '1'); wait for 370 ns; in_giris <= (others => '0'); wait for 230 ns; in_giris <= (others => '1'); wait for 100 ns; in_giris <= (others => '0'); wait for 200 ns; end process; saklayici_4_bit_map : saklayici_4_bit port map( in_clk => in_clk, in_rst => in_rst, in_giris => in_giris, out_cikis => out_cikis ); end Behavioral;
Örnek 2: Aşağıda etkinleştirme girişine sahip n_bit bitlik saklayıcı devresinin gerçekleştirildiği saklayici_generic_aktif_sinyal.vhd VHDL kodu verilmiştir. saklayici_generic_aktif_sinyal varlığımıza ilişkin generic bildirimleri 5-7. Satırlarda, port bildirimleri 8-14. satırları arasında yapılmaktıdır.
Tanımlamalardan da görüleceği üzere saklayıcımızın data giriş ve çıkış portları generic parametresi içersinde tanımlanan n_bit uzunluğundadır. 19. satırda n_bit bitlik r_saklayici sinyali tanımlanmaktadır. 23. satırda out_cikis portuna r_saklayici sinyali atanmaktadır. 25. satırda tanımlanan söz dizimi ile process’in in_clk, in_rst ve in_giris değerlerinden 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. 27. 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 değerinin tüm bitleride ‘0’ olmaktadır. in_rst girişinin diğer durumlarında ise in_clk giriş portunun yükselen kenarı ile birlikte 30. satırda tanımlanan koşul ifadesi ile in_en giriş portunun aktif olması (değerinin ‘1’ olması) ile birlikte in_giris giriş port değeri r_cikis sinyaline atanmaktadır. in_en giriş portunun pasif olması (değerinin ‘0’ olması) veya in_clk giriş sinyalinin 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 saklayici_generic_aktif_signal is Generic( n_bit : integer := 4 ); Port ( in_clk : in std_logic; in_rst : in std_logic; in_en : in std_logic; in_giris : in std_logic_vector(n_bit - 1 downto 0); out_cikis : out std_logic_vector(n_bit - 1 downto 0) ); end saklayici_generic_aktif_signal; architecture Behavioral of saklayici_generic_aktif_signal is signal r_saklayici : std_logic_vector(n_bit - 1 downto 0); begin out_cikis <= r_saklayici; process(in_clk, in_rst, in_en, in_giris) begin if in_rst = '1' then r_saklayici <= (others => '0'); elsif rising_edge(in_clk) then if in_en = '1' then r_saklayici <= in_giris; end if; end if; end process; end Behavioral;
Aşağıda ise saklayici_generic_aktif_signal varlığının benzetim yapılabilmesi için tb_saklayici_generic_aktif_signal.vhd sınama kodu (test bench) verilmiştir ve benzetim çıktısı Şekil 3’de gösterilmiştir. Şekil 3’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_en giriş portunun ‘1’ değerini almasıyla in_giris giriş portu değeri r_saklayici sinyaline atanmaktadır ve r_saklayici sinyalinin değeri “0000” olmaktadır. r_saklayici sinyalinin değerinin “0000” olması ile out_cikis çıkış portuna “0000” değeri atanmaktadır.
2. adım :in_rst giriş portunundeğeri ‘1’ olması nedeniyle r_saklayici sinyaline “0000” atanmaktadır. r_saklayici sinyalinin değerinin “0000” olması ile out_cikis değerine “0000” atanmaktadır. 2. adım içerisinde in_giris giriş portu değeri değişse de eş zamanlı olmayan reset ile tasarlanmış saklayıcının çıkışı değişmemektedir.
3. adım : in_rst giriş portunundeğerinin ‘0’ olması ve in_clk giriş portunun yükselen kenarı meydana gelmesine rağmen in_en giriş portu değerinin ‘0’ olması nedeniyle r_saklayici sinyalinin değeri değişmemiştir ve bu sebeple çıkış değeri de değişmemiştir.
4. adım :in_rst giriş portunundeğerinin ‘0’ ve in_en giriş portu değerinin ‘1’ olmasına rağmen in_clk giriş portunun yükselen kenarı meydana gelmemesi nedeniyle r_saklayici sinyalinin değeri değişmemiştir ve bu sebeple çıkış değeri de değişmemiştir.
5. adım:in_rst giriş portunundeğerinin ‘0’ olması ve in_clk giriş portunun yükselen kenarı ile birliktein_en giriş portunun ‘1’ değerini almasıyla in_giris giriş portu değeri r_saklayici değerine atanmıştır ve r_saklayici sinyalinin değeri “1111” olmaktadır. r_saklayici değerinin “1111” olması ile out_cikis değerine “1111” atanmaktadır.
6. 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.
7. adım: in_rst giriş portunundeğerinin ‘0’ olması ve in_clk giriş portunun yükselen kenarı ile birliktein_en giriş portunun ‘1’ değerini almasıyla in_giris giriş portu değeri r_saklayici değerine atanmıştır ve r_saklayici sinyalinin değeri “0000” olmaktadır. r_saklayici değerinin “0000” olması ile out_cikis çıkış portuna “0000” 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” atanmaktadır.

Şekil 3 saklayici_generic_aktif_signal varlığı benzetim çıktısı
library IEEE; use IEEE.STD_LOGIC_1164.ALL; entity tb_saklayici_generic_aktif_signal is end tb_saklayici_generic_aktif_signal; architecture Behavioral of tb_saklayici_generic_aktif_signal is component saklayici_generic_aktif_signal Generic( n_bit : integer := 4 ); Port ( in_clk : in std_logic; in_rst : in std_logic; in_en : in std_logic; in_giris : in std_logic_vector(n_bit - 1 downto 0); out_cikis : out std_logic_vector(n_bit - 1 downto 0) ); end component; constant CLK_PERIOD : time := 150 ns; signal in_clk : std_logic := '0'; signal in_rst : std_logic := '0'; signal in_en: std_logic := '0'; signal in_giris : std_logic_vector(3 downto 0) := (others => '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 50 ns; in_rst <= '1'; wait for 150 ns; in_rst <= '0'; wait for 300 ns; in_rst <= '1'; wait for 100 ns; in_rst <= '0'; wait for 100 ns; in_rst <= '1'; wait for 280 ns; in_rst <= '0'; wait for 20 ns; end process; process begin in_en <= '1'; wait for 250 ns; in_en <= '0'; wait for 150 ns; in_en <= '1'; wait for 250 ns; in_en <= '0'; wait for 150 ns; in_en <= '1'; wait for 200 ns; end process; process begin in_giris <= (others => '0'); wait for 100 ns; in_giris <= (others => '1'); wait for 370 ns; in_giris <= (others => '0'); wait for 230 ns; in_giris <= (others => '1'); wait for 100 ns; in_giris <= (others => '0'); wait for 200 ns; end process; saklayici_generic_aktif_signal_map : saklayici_generic_aktif_signal generic map( n_bit => 4 ) port map( in_clk => in_clk, in_rst => in_rst, in_en => in_en, in_giris => in_giris, out_cikis => out_cikis ); end Behavioral;