FPGA_VIVADO_SI_VHDL_Mihael_Cristian_Ignat

(Cristian I.K_ntXI) #1
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:
Free download pdf