FPGA_VIVADO_SI_VHDL_Mihael_Cristian_Ignat

(Cristian I.K_ntXI) #1
61

7. Noțiuni avansate


În acest capitol vor fi descrise câteva noțiuni ce nu sunt critice în implementare, totuși este important
pentru a afla lucruri noi și pentru a ști cum să acționăm în diferite situații critice. Problema în implementarea
pe FPGA este atunci când lucrurile nu funcționează cum ar trebui, când avem probleme de timing, când
resursele sunt utilizate la maximum și atunci când sinteza / implementarea este depășită de situație. Astfel
acest capitol ne ajută să gestionăm acest tip de probleme și să ne ușureze soarta când vine vorba de codul
VHDL.


7.1. Crearea și utilizarea unui pachet................................................................................................


Un pachet este tot un fișier VHDL, însă acesta nu este un fișier clasic de implementare a componentelor.
În acest fișier pot fi declarate constante, funcții și proceduri și subtipuri sau tipuri de date. Pachetele, pentru
a fi utilizate, vor trebui incluse ca și biblioteci în fișierele VHDL și, astfel, acel pachet poate fi folosit ca și
bibliotecă.


În pachete pot fi declarate și componente, însă arhitectura componentelor (descrierea funcționalității),
trebuie făcută în fișier VHDL separat.


Marele avantaj al pachetelor este acela că datele declarate în pachet sunt vizibile în tot proiectul. Practic
datele din pachet sunt vizibile în fișierele VHDL cât timp pachetul este inclus în respectivul fișier.


Mai jos se găsește un exemplu simplu de pachet, unde se declară o constantă, subtip de dată, o
componentă, o functie și o procedură:


library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;

package pkg_exp is
CONSTANT WIDTH_LIMIT : positive:= 3;
subtype data_type is STD_LOGIC_VECTOR(WIDTH_LIMIT - 1 downto 0);
function add_f (A,B: data_type) return data_type;
procedure sub_p (signal A: in data_type; signal B: in data_type; signal
Q: out data_type);

component shift_reg is
Generic(number_of_FF: integer := 16);
Port ( clk : in STD_LOGIC;
rst : in STD_LOGIC;
ce : in STD_LOGIC;
rot : in STD_LOGIC;
load : in STD_LOGIC;
load_data : in STD_LOGIC_VECTOR(number_of_FF - 1 downto 0);
data : out STD_LOGIC_VECTOR(number_of_FF - 1 downto 0);
q : out STD_LOGIC);
end component;
end;
package body pkg_exp is

➔ Declararea bibliotecilor

➔ Adăugarea unei constante
➔ Adăugarea unui subtip
➔ Adăugarea funcției
➔ Adăugarea procedurii

➔ Adăugarea componentei
Această componentă va
trebui creată într-un alt
fișier separat
Free download pdf