D Mandalı devresi giriş sinyalinin durumu değiştiği zaman çıkış değerini güncelleyen, değişim olmadığı durumlarda ise çıkış değerini koruyan bir devre elemanıdır. Bu elemana bir yetkilendirme girişi eklendiğinde oluşan elemana “Yetki Girişli D Mandalı” adı verilmektedir. Bu elemanda çıkış değerinin güncellenmesi normal D Mandalından farklı olarak yetki girişinin de ‘1’ olması gerekmektedir. Eğer yetki girişi ‘0’ ise giriş değeri değişse bile çıkış değeri son durumunu korumaya devam edecektir.
Yetki girişli D mandalı doğruluk tablosu Tablo 1’de verilmiştir. Tablo 1’den de görüleceği üzere in_en giriş portu değeri ‘0’ olduğunda çıkış değerleri in_giris giriş portu değerinin önemi olmadan bir önceki değerini korumaktadır. in_engirişi portu değeri‘1’ olduğunda ise in_giris giriş portu değeri out_cikis çıkış portuna ve in_giris giriş portu değerinin değili ise out_cikis’ çıkış portuna aktarılmaktadır. Şekil 1’de ise yetki girişli D mandalı mantık devresi gösterilmiştir.
in_en | in_giris | out_cikis(+) | out_cikis'(+) |
0 | 0 | out_cikis | out_cikis’ |
0 | 1 | out_cikis | out_cikis’ |
1 | 0 | 0 | 1 |
1 | 1 | 1 | 0 |

Şekil 1 D mandalı mantık devresi
Örnek 1: Bu örnekte Yetki Girişli D Mandalı mantık devresinin gerçekleştirildiği d_latch.vhd VHDL kodu verilmiştir. Tablo 1 ve Şekil 1’den de görülceği üzere d_latch varlığımız iki giriş ve iki çıkış portuna sahiptir. Port tanımlamaya ilişkin bildirimler 5-10. satırları arasında yapılmatıdır. Port tanımalamaları std_logic veri tipinde yapıldığından dolayı 1. ve 2. satırlarda gerekli kütüphane bildirimleri yapılmaktadır.
15. satırda std_logic veri tipinde r_cikis sinyali tanımlanmaktadır. 19. satırda tanımlanan söz dizimi ile process’in in_en ve in_giris giriş portları değerlerinde meydana gelen değişiklikler ile aktif olacağı belirtilmektedir. 22. satırda tanımlı koşul ifadesinin sağlanması yani in_en giriş portu değerinin ‘1’ olması durumunda in_giris giriş portu değeri r_cikis sinyaline atanmaktadır. Aksi durumlarda ise r_cikis sinyali bir önceki değerini korumaktadır. 28. satırda out_cikis çıkış portuna r_cikis sinyalinin değeri atanırken, 29. satırda ise out_cikis_degil çıkış portuna r_cikis sinyalinin değerinin değili atanmaktadır.
library IEEE; use IEEE.STD_LOGIC_1164.all; entity d_latch is port ( in_en : in std_logic; in_giris : in std_logic; out_cikis : out std_logic; out_cikis_degil : out std_logic ); end d_latch; architecture Behavioral of d_latch is signal r_cikis : std_logic := '0'; begin process(in_en, in_giris) begin if in_en = '1' then r_cikis <= in_giris; end if; end process; out_cikis <= r_cikis; out_cikis_degil <= (not r_cikis); end Behavioral;
Aşağıda ise d_latch varlığının benzetim yapılabilmesi için tb_d_latch.vhd sınama kodu (test bench) verilmiştir ve sınama koduna ait benzetim çıktısı Şekil 2’de gösterilmiştir. Şekil 2’de gösterilen benzetim sonucunda:
1. adım: in_en giriş portu değeri ‘1’ olduğundan r_cikis sinyaline in_giris giriş portu değeri atanmaktadır ve r_cikis sinyalinin değeri ‘0’ olmaktadır. r_cikis sinyalinin değerinin ‘0’ olması ile out_cikis çıkış portuna ‘0’, out_cikis_degil çıkış portuna ‘1’ değerleri atanmaktadır.
2. adım: in_en giriş portu değerine‘0’ ve in_giris giriş portu değerine ‘1’ atanmaktadır. r_cikis sinyalinin değeri in_en giriş portu değerinin ‘0’ olması nedeniyle bir önceki adımdaki değerini korumuştur. r_cikis sinyalinin değerinin değişmemesi ile çıkış portlarının değerleride değişmemiştir.
3. adım: in_en giriş portu değerine ‘1’ atanmaktadır. in_en girişi portu değeri ‘1’ olmasıyla r_cikis sinyaline in_giris giriş portu değeri atanmıştır ve r_cikis sinyalinin değeri ‘1’ olmaktadır. r_cikis sinyalinin değerinin ‘1’ olması ile out_cikis çıkış portuna ‘1’, out_cikis_degil çıkış portuna ‘0’ değerleri atanmaktadır.
4. adım:in_en giriş portu değeri ‘1’ olduğundan r_cikis sinyaline in_giris giriş portu değeri atanmıştır ve r_cikis sinyalinin değeri ‘0’ olmaktadır. r_cikis sinyalinin değerinin ‘0’ olması ile out_cikis çıkış portuna ‘0’, out_cikis_degil çıkış portuna ‘1’ değerleri atanmaktadır.
5. adım: in_en giriş portu değeri‘0’ olmaktadır. r_cikis sinyalinin değeri in_en giriş portu değerinin ‘0’ olması nedeniyle bir önceki adımdaki değerini korumuştur. r_cikis sinyalinin değerinin değişmemesi ile çıkış portlarının değeride değişmemiştir.
6. adım: in_en giriş portu değeri ‘1’ olduğundan r_cikis sinyaline in_giris giriş portu değeri atanmıştır ve r_cikis sinyalinin değeri ‘1’ olmaktadır. r_cikis sinyalinin değerinin ‘1’ olması ile out_cikis çıkış portuna ‘1’, out_cikis_degil çıkış portuna ‘0’ değerleri atanmaktadır.
7. adım: in_en giriş portu değeri‘1’ olduğundan r_cikis sinyaline in_giris giriş portu değeri atanmıştır ve r_cikis sinyalinin değeri ‘0’ olmaktadır. r_cikis sinyalinin değerinin ‘0’ olması ile out_cikis çıkış portuna ‘0’, out_cikis_degil çıkış portuna ‘1’ değerleri atanmaktadır.
8. adım:in_en giriş portu değeri‘0’ olmaktadır. r_cikis sinyalinin değeri in_en giriş portu değerinin ‘0’ olması nedeniyle bir önceki adımdaki değerini korumuştur. r_cikis sinyalinin değerinin değişmemesi ile çıkış portlarının değeride değişmemiştir.

Şekil 2 d_latch varlığı benzetim çıktısı
tb_d_latch.vhd VHDL kodun amacı d_latch varlığının benzetiminin yapmak olduğundan dolayı tb_d_latch varlığına ait bir port tanımlaması yapılmamıştır. tb_d_latch.vhd VHDL kodu sentezlenemez ve sadece benzetim için kullanılabilmektedir. Test kodlarının oluşturulması amacı ile kullanılacak olan sinyallerin tanımlama işlemleri 18-21. satırlarda yapılmıştır.
25-33. satırlar arasında tanımlanan process ile in_en yetkilendirme sinyalinin davranışı tanımlanmaktadır. wait for komutu ile tanımlanan süre kadar process içinde beklenmektedir.
- 27. satırda yapılan tanımlama ile in_en yetkilendirme sinyaline ‘1’ değeri atanmaktadır ve 100ns beklendikten sonra 28. satırda tanımlanan ifade gerçeklenecektir. Diğer bir ifade ile 27. satırda yapılan tanımlama ile in_en yetkilendirme sinyalinin 0-100 ns aralığında alacağı değer tanımlanmıştır.
- 28. satırda tanımlanan ifade ile in_en yetkilendirme sinyalinin 100-220 ns aralığında alacağı değerin ‘0’ olacağı belirtilmektedir.
- 29. satırda tanımlanan ifade ile in_en yetkilendirme sinyalinin 220-540 ns aralığında alacağı değerin ‘1’ olacağı belirtilmektedir.
- 30. satırda tanımlanan ifade ile in_en yetkilendirme sinyalinin 540-700 ns aralığında alacağı değerin ‘0’ olacağı belirtilmektedir.
- satırda tanımlanan ifade ile in_en yetkilendirme sinyalinin 700-900 ns aralığında alacağı değerin ‘1’ olacağı belirtilmektedir.
- satırda tanımlanan ifade ile in_en yetkilendirme sinyalinin 900-1000 ns aralığında alacağı değerin ‘0’ olacağı belirtilmektedir.
35-42. satırları arasında tanımlanan process içerisinde in_giris sinyalinin davranışı tanımlanmaktadır.
- 37. satırda tanımlanan ifade ile in_giris sinyalinin 0-100 ns aralığında alacağı değerin ‘0’ olacağı belirtilmektedir.
- 38. satırda tanımlanan ifade ile in_giris sinyalinin 100-500 ns aralığında alacağı değerin ‘1’ olacağı belirtilmektedir.
- 39. satırda tanımlanan ifade ile in_giris sinyalinin 500-700 ns aralığında alacağı değerin ‘0’ olacağı belirtilmektedir.
- 40. satırda tanımlanan ifade ile in_giris sinyalinin 700-800 ns aralığında alacağı değerin ‘1’ olacağı belirtilmektedir.
- 41. satırda tanımlanan ifade ile in_giris sinyalinin 800-1000 ns aralığında alacağı değerin ‘0’ olacağı belirtilmektedir.
d_latch varlığının tb_d_latch varlığında alt devre olarak kullanılabilmesi için gerekli component tanımlama işlemleri 9-16. satırlar arasında yapılmıştır. 44-50. satırlar arasında ise d_latch alt devresine ilişkin bağlantılar yapılmaktadır.
library IEEE; use IEEE.STD_LOGIC_1164.all; entity tb_d_latch is end tb_d_latch; architecture Behavioral of tb_d_latch is component d_latch Port ( in_en : in std_logic; in_giris : in std_logic; out_cikis : out std_logic; out_cikis_degil : out std_logic ); end component; signal in_en : std_logic := '0'; signal in_giris : std_logic := '0'; signal out_cikis : std_logic := '0'; signal out_cikis_degil : std_logic := '0'; begin process begin in_en <= '1'; wait for 100 ns; in_en <= '0'; wait for 120 ns; in_en <= '1'; wait for 320 ns; in_en <= '0'; wait for 160 ns; in_en <= '1'; wait for 200 ns; in_en <= '0'; wait for 100 ns; end process; process begin in_giris <= '0'; wait for 100 ns; in_giris <= '1'; wait for 400 ns; in_giris <= '0'; wait for 200 ns; in_giris <= '1'; wait for 100 ns; in_giris <= '0'; wait for 200 ns; end process; d_latch_map : d_latch port map( in_en => in_en, in_giris => in_giris, out_cikis => out_cikis, out_cikis_degil => out_cikis_degil ); end Behavioral;