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;