VHDL’de PACKAGE Kullanımı

package, VHDL dilinde tanımlanacak olan type, function gibi genel ifadeleri tanımlamada kullanılır. package iki temel bömlümden oluşur:

  • paket tanımlama
  • paket gövdesi

Genel olarak paket dosyasında tanımlama işlemi aşağıdaki gibi yapışmaktadır.

package paket_adi is
    Tip ve alt tip tanimlama    
    Alt programlar
    Sabitler, sinyaller, vb    
end paket_adi;

package body paket_adi is
    Öncelikli tanımlamalar
    Sabitler
    Altprogramlar
    Tip ve alt tip tanimlama    
    Alt programlar
    Sabitler, sinyaller, vb    
end paket_adi;

Örnek 1: Aşağıda örnek olarak oluşturulan benim_paketim.vhd VHDL paketi verilmiştir. benim_paketim paketi içerisinde tanımlama bölgesinde 6-7. Satırlarda bir bitlik std_logic tipinde r_giris_1, r_giris_2 sinyalleri, 8. satırda integer tipinde VERI_UZUNLUGU sabiti ve 9-10. satırlarda VERI_UZUNLUGU boyutunda in_giris_1 ve in_giris_2 sinyalleri, 12-14. satırlarda t_Kelime tipi ve bu tip ile tanımlanmış r_Kelime_1, r_Kelime_2 sinyalleri, 16. satırda buyuk_bul isimli fonksiyonun tanımı ve 18-29. satırlarda generic_toplama alt devresine ilişkin component tanımlama işlemleri yapılmıştır. Paket gövdesi bölümünde ise 34-42. satırlarda buyuk_bul fonksiyonunun işlevi tanımlanmıştır.

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
 
package benim_paketim is
 
  signal r_giris_1 : std_logic := '0';
  signal r_giris_2 : std_logic := '0';
  constant VERI_UZUNLUGU : integer := 6;
  signal in_giris_1 : std_logic_vector(VERI_UZUNLUGU - 1 downto 0) := (others => '0');
  signal in_giris_2 : std_logic_vector(VERI_UZUNLUGU - 1 downto 0) := (others => '0');
 
  type t_Kelime is array (9 downto 0) of std_logic;
  signal r_Kelime_1 : t_kelime := (others => '0');
  signal r_Kelime_2 : t_kelime := (others => '0');
 
  function buyuk_bul(in_Kelime_1, in_Kelime_2 : t_Kelime) return t_Kelime;
 
  component generic_toplayici
  Generic(
    n_bit : integer := 8   
  );
  Port ( 
    in_giris_elde : in std_logic;
    in_giris_1 : in std_logic_vector(n_bit - 1 downto 0);
    in_giris_2 : in std_logic_vector(n_bit - 1 downto 0);
    out_cikis : out std_logic_vector(n_bit - 1 downto 0);
    out_cikis_elde : out std_logic     
  );
  end component;
 
end benim_paketim;
 
package body benim_paketim is
  function buyuk_bul(in_Kelime_1, in_Kelime_2 : t_Kelime) return t_Kelime is
    variable v_buyuk : t_Kelime;
  begin
    v_buyuk := in_Kelime_1;
    if v_buyuk < in_Kelime_2 then
      v_buyuk := in_Kelime_2;
    end if;
    return v_buyuk;
  end buyuk_bul;
end benim_paketim;

benim_paketim isimli paket dosyasının kullanılacağı VHDL kodunun kütüphane bildirim kısmında bildirimi aşağıda verilen söz dizimi ile yapılmaktadır.

LIBRARY work;
work.benim_paketim.all;

Aşağıda benim_paketim paketi kullanılarak paket içerisinde kullanılan tüm tanımlamaların kullanıldığı paket_kullanimi.vhd  VHDL kodu aşağıda verilmiştir.

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
 
library work;
use work.benim_paketim.all;
 
entity paket_kullanimi is
end paket_kullanimi;
 
architecture Behavioral of paket_kullanimi is
   
  signal r_Buyuk : t_Kelime;

begin
 
  r_Buyuk <= buyuk_bul(r_Kelime_1, r_Kelime_2);
  generic_toplayici_4_bit : generic_toplayici
    Generic map( n_bit => VERI_UZUNLUGU )
    Port map ( 
      in_giris_elde => r_giris_1,
      in_giris_1 => in_giris_1,
      in_giris_2 => in_giris_2,
      out_cikis => open,
      out_cikis_elde => r_giris_2     
  );
end Behavioral;

Bir yanıt yazın

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