63
Fig 67: Simulare pentru testB_pkg_demo.vhd
Această simulare a fost realizată utilizând Post-Implementation Functional Simulation. Modul de
generare a stimulilor pentru acest tip de simulare trebuie să fie puțin diferit față de Behavioral Simulation.
Aici, practic, trebuie introdusă o mică întârziere în momentul în care stimulii sunt generați. Pentru aceasta,
în exemplul următor se utilizează cuvântul “after”:
if cnt_test = x"01" then
a <= "010" after 1ns;
Aici, stimulii pentru semnalul ‘a’ va fi generat după o nanosecundă după ce cnt_test ajunge la valoarea
x"01". Trebuie introdusă această întârziere deoarece acum simularea nu este una ideală, folosește
componente reale și ține cont de toate întârzierile introduse de componentele utilizate (bistabili si LUT-uri),
dar și de întârzierile de pe traseu.
Acest fișier, cu aceste întârzieri, poate fi utilizat și pentru Behavioral Simulation, însă, dacă aceste
întârzieri nu sunt puse, atunci fișierul poate fi utilizat doar pentru Behavioral Simulation.
7.2. Generate
Noțiunea de generate ne ajută să utilizăm mai multe componente de același tip cu conexiuni diferite. În
acest sens, un exemplu destul de bun este testul de stres pentru FPGA. Acest test reprezintă utilizarea a cât
mai multe resurse, în special bistabili, pentru a vedea cum se comportă componenta FPGA la utilizare
extremă. Pentru a face acest lucru vom putea utiliza regiștri, deoarece aceștia conțin doar bistabili. În urma
codului scris, va fi simplu de modificat numărul de regiștri utilizați deoarece va fi suficient să modificăm un
singur parametru.
Cuvintele-cheie 'generate' și 'generic' sunt adesea utilizate împreună, parametrul generic determinând
câte componente vor fi generate. Astfel vom putea avea parametrul generic "reg_width" care să determine
numărul de regiștri utilizați. [https://www.ics.uci.edu/~jmoorkan/vhdlref/generate.html]
De asemenea se pot genera și procese sub generate astfel încât să se poată realiza legăturile între
componentele generate. În următorul cod se poate vedea un scurt exemplu de utilizare a cuvântului
generate.
reg_generated:
for i in 0 to (reg_width - 1) generate
REGX : reg port map
(clk => CLK100MHZ,
d => data_in(i),