62
function add_f (A,B: data_type) return data_type is
variable m: data_type;
begin
m:=a + b;
return m;
end add_f;
procedure sub_p (signal A: in data_type; signal B: in data_type; signal
Q: out data_type) is
begin
Q <= A - B;
end sub_p;
end package body;
➔ Adăugarea
comportamentului
funcției
➔ Adăugarea
comportamentului
procedurii
Pachetul poate fi găsit și în fișierul pkg_exp.vhd , fișierul demo poate fi găsit în fișierul
pkg_demo.vhd, iar fișierul de tip testbench poate fi găsit în fișierul testB_pkg_demo.vhd.
- Constantele pot fi folosite ca și parametri în codul de descriere a componentelor. Dacă există
constanta definită ce are același nume cu un parametru generic al componentei, parametrul
generic are prioritate.
De asemenea, pot fi folosite în locul parametrilor generici, și, astfel, semnalele definite în
entitate pot avea dimensiunea în funcție de constantele definite în pachet, însă această practică
nu este cea mai recomandată deoarece, astfel, nu se pot utiliza două componente cu același
comportament, dar cu anumite dimensiuni diferite. - Funcțiile sunt definite, la fel ca în majoritatea limbajelor de programare, ca având parametri de
intrare și returnează un tip de dată. Acestea pot fi definite atât în pachet, cât și în partea de
arhitectură a componentelor. Toți parametrii funcțiilor sunt semnale de intrare, însă, acest lucru
nu trebuie declarat explicit. Cu alte cuvinte, nu vor fi folosite cuvintele-cheie “in”, “out” sau
“inout” pentru declararea parametrilor deoarece cu toții sunt de intrare.
Funcțiile pot fi utilizate și la inițializarea semnalelor. De exemplu, dacă se dorește ca un semnal la
inițializare să aibă o anumită valoare greu de implementat fără o funcție, atunci va trebui
utilizată o funcție pentru respectiva inițializare.
[https://www.nandland.com/vhdl/examples/example-package.html]
- La proceduri, spre deosebire de funcții, tipul parametrilor trebuie declarat explicit utilizând
cuvintele-cheie “in”, “out” sau “inout”. Acestea nu returnează nimic, însă parametrii de ieșire
sunt similari cu partea de return de la funcții. Diferența majoră între funcții și proceduri este în
modul de apelare al acestora.
[https://vhdlguide.readthedocs.io/en/latest/vhdl/package.html]
- Componentele sunt declarate în pachet, însă implementarea efectivă va fi realizată în alt fișier
VHDL. Această abordare va face ca această componentă să nu mai trebuiască redeclarată în
celelalte componente.
Rezultatul din urma simulării se poate vedea în figura următoare: