VHDL’de Saat Darbesi (Clock) Kullanımı

Genelde process yapılarını tetikleme için harici bir kaynak tarafından üretilen kare dalga işareti kullanılmaktadır. Bu kare dalga işaretinin değişimlerinde ise process yapısı tetiklenmektedir. Bu dışarıdan uygulanan (tasarıma göre FPGA içerisinde de üretilebilir) tetikleme işareti çoğu zaman “saat darbesi” (clock) olarak adlandırılır.

Şekil 1’de saat darbesi gösterimi verilmiştir. Şekil 1’den de görüleceği üzere saat darbesi işaretin 0’dan 1’e veya 1’den 0’a değişim göstermektedir. Bu değişimler iki şekilde adlandırılır:

  • Yükselen Kenar Tetikleme (Rising Edge Triggered)
  • Düşen Kenar Tetikleme (Falling Edge Triggered)’dir.

Şekil 1 Saat darbesi gösterimi

VHDL dilinde yükselen kenar durumunu tespiti için iki tip sözdizimi mevcuttur:

  • if in_clk’event and in_clk=’1’  then
  • if rising_edge(in_clk) then

Yukarıda verilen sözdizimleri in_clk sinyalinde değişim meydana geldiğinde ve in_clk değerinin 0’dan 1’e değiştiğinde koşul ifadelerini aktif etmektedir.

VHDL dilinde düşen kenar durumunu tespiti için iki tip sözdizimi mevcuttur:

  • if in_clk’event and in_clk=’0’  then
  • if falling_edge(in_clk) then

Yukarıda verilen sözdizimleri in_clk sinyalinde değişim meydana geldiğinde ve in_clk değerinin 1’den 0’a değiştiğinde koşul ifadelerini aktif etmektedir.

Örnek 1 : Aşağıda saat_darbesi_ornek.vhd VHDL kodunda saat darbesi uygulaması gerçeklenmiştir. process hassasiyet listesinde in_clk giriş portu mevcuttur. 20. satırda tanımlanan koşul ifadesi ile in_clk giriş portunda değişim meydana geldiğinde ve in_clk giriş portu değeri 0’dan 1’e değiştiğinde: in_giris_secme giriş port değeri ‘0’ ise out_cikis çıkış portuna in_giris_1 giriş portunun değeri atanmaktadır. Eğer in_giris_secme giriş port değeri ‘1’  ise out_cikis çıkış portuna in_giris_2 giriş portunun değeri atanmaktadır. in_giris_secme giriş port değeri ‘0’ ve ‘1’ haricinde başka değerler alması durumunda ise out_cikis çıkış portuna ‘0’ değeri atanmaktadır.

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
	
entity saat_darbesi_ornek is
  Port ( 
    in_clk : in std_logic;
    in_giris_1 : in std_logic;
    in_giris_2 : in std_logic;
    in_giris_secme : in std_logic;
    out_cikis : out std_logic
  );
end saat_darbesi_ornek;
	
architecture Behavioral of saat_darbesi_ornek is
begin
	    
  process(in_clk)
  begin
	    
    if rising_edge(in_clk) then
      if in_giris_secme = '0' then
        out_cikis <= in_giris_1;
      elsif in_giris_secme = '1' then
        out_cikis <= in_giris_2;
      else
        out_cikis <= '0';
      end if;
    end if;
  end process;
end Behavioral;

    Bu noktada önemli bir uyarı yapmak gerekmektedir. Bir process içerisinden aynı anda hem yükselen hem de düşen kenar kontrolü yapılamaz. Bu şekilde bir kod yazıldığında sentezleyici hata verecektir.

    Bir yanıt yazın

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