Son Yazılar

VHDL ile Yarım Toplayıcı (Half Adder) Tasarımı ve Simülasyonu







Yarım Toplayıcı  (Half Adder) devresi, en basit toplama devresidir. Bu yazı içerisinde bu yapının tanımı, VHDL ile tasarımı ve simülasyonu gerçekleştirilmiştir. Yine blogumuz içerisinde Verilog HDL ile Yarım Toplayıcı Tasarımı ve Simülasyonunu da bulabilirsiniz. 

İki adet bir bitlik sayının toplamını gerçekleştiren bu devre yapısının çıkışında birer tane "Sum (Toplam)" ve "Carry (Elde)" çıktıları alınmaktadır.Yarım Toplayıcı devresinin doğruluk tablosu ve logic kapılarla oluşturulan devre şeması aşağıda görüldüğü gibidir. 

İki adet bir bitlik sayının toplamını gerçekleştiren bu devre yapısının çıkışında birer tane "Sum (Toplam)" ve "Carry (Elde)" çıktıları alınmaktadır. 


Görüldüğü üzere "Sum" ve "Carry" çıktılarının değerleri:

Sum=~A B + A ~B

Carry=A B

şeklindedir. Dolayısıyla bu devre şeması daha da basitleştirerek Sum ifadesi bir "XOR" kapısı şeklinde de ifade edilebilir.

Bu devreyi VHDL ile tasarıma gelecek olursak:

library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
 
entity half_adder is
  port (
    in_bit1  : in std_logic;
    in_bit2  : in std_logic;
    out_sum   : out std_logic;
    out_carry : out std_logic
    );
end half_adder;
 
architecture Behavioral of half_adder is
begin
  out_sum   <= in_bit1 xor in_bit2;
  out_carry <= in_bit1 and in_bit2;
end Behavioral;

Bildiğiniz üzere bir VHDL kodu, Kütüphane-Varlık-Mimari kısımlarından oluşmaktadır. Gerekli kütüphane tanımlamasından sonra Varlık kısmında giriş ve çıkış değerleri belirtilmiştir. Son kısmında da yukarıda göstediğimiz giriş değerlerine göre oluşan çıkış değerlerinin atamalarını gerçekleştirdik.

Test için gerekli kodlar ise aşağıdaki gibidir:

library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
 
entity half_adder_tb is
end half_adder_tb;
 
architecture Behavioral of half_adder_tb is
  signal r_bit1  : std_logic := '0';
  signal r_bit2  : std_logic := '0';
  signal w_sum   : std_logic;
  signal w_carry : std_logic;
begin
   
  UUT : entity work.half_adder  -- uses default binding
    port map (
      in_bit1  => r_bit1,
      in_bit2  => r_bit2,
      out_sum   => w_sum,
      out_carry => w_carry
      );
 
  process is
  begin
    r_bit1 <= '0'; r_bit2 <= '0'; wait for 10 ns;
    r_bit1 <= '0'; r_bit2 <= '1'; wait for 10 ns; 
    r_bit1 <= '1'; r_bit2 <= '0'; wait for 10 ns;
    r_bit1 <= '1'; r_bit2 <= '1'; wait for 10 ns;
  end process;
end Behavioral;

Bu kısımda ise farklı değerler ile simulasyonu gerçekleştirmek için gerekli sinyal değerleri tanımlanmış, bu değerlerin tasarım kısmındaki karşılıkları belirtilmiştir. En son kısımda da 10 ns aralıklarla yukarıda gösterdiğimiz doğruluk tablosundaki değerler giriş değeri olarak atanmıştır.

Kaynakça:

  • https://nandland.com/


Hiç yorum yok