FPGA_VIVADO_SI_VHDL_Mihael_Cristian_Ignat

(Cristian I.K_ntXI) #1
35

Pe simulare se poate vedea că, imediat după ce apare impulsul de load, data de la intrare este încărcată,
după care, la fiecare front pozitiv al semnalului clk, data[3] va fi trimisă către ieșire.


Fig. 44: Simulare shift register

În acest exemplu este descris un registru de deplasare de tip “Paralel Input – Serial Output”, însă pot
exista și regiștri de deplasare “Serial Input – Serial Output”, dar și “Paralel Input – Paralel Output”.
[http://ep.etc.tuiasi.ro/files/CID/registre.pdf]


5.5. Variabile în VHDL


Dacă urmărim codul componentei de testbench, vedem un numărător, cnt_test, ce este utilizat doar în
procesul respectiv. În VHDL există și noțiunea de variabilă, aceasta fiind vizibilă doar în procesul respectiv. Cu
alte cuvinte, deoarece cnt_test este utilizat doar în procesul respectiv, putem să îl utilizăm, fără a schimba
funcționalitatea, ca variabilă în procesul respectiv. Mai jos, în partea stângă, se poate vedea codul în care
cnt_test este un semnal, iar în partea dreaptă, codul în care cnt_test este o variabilă. Variabilele sunt foarte
utilizate în funcții și proceduri, elemente ce vor fi explicate mai târziu.


signal cnt_test: std_logic_vector(7 downto 0) :=
(others => '0');
............................

cnt_proc: process(clk)
begin
if rising_edge(clk) then
if cnt_test = x"01" then
load <= '1';
cnt_test <= cnt_test + '1';
...................
end if;
end if;
end process;

cnt_proc: process(clk)
variable cnt_test: std_logic_vector(7 downto
0) := (others => '0');
begin
if rising_edge(clk) then
if cnt_test = x"01" then
load <= '1';
cnt_test := cnt_test + '1';
...................
end if;
end if;
end process;
Free download pdf