FPGA_VIVADO_SI_VHDL_Mihael_Cristian_Ignat

(Cristian I.K_ntXI) #1
30

5. Logica secvențială în FPGA


Logica secvențială în VHDL se implementează utilizând procese în care semnalele de la lista de
sensitivități ale acestora sunt semnalele de clock.


5.1. Implementarea unui bistabil


Reluând definiția bistabilului de la Arhitectura FPGA, un bistabil este o memorie ce reține un bit la fiecare
front crescător al semnalului de clock.


Mai jos găsiți imaginea unui bistabil simplu. Pe lângă pinii ce se văd în imagine, și anume D, CLK și Q, mai
pot exista și alți pini, cum ar fi pinul R – reset sincron, Clr – reset asincron, CE – validare a clocului (clock
enable) și nQ – valoarea negată a pinului de ieșire.


Fig. 36: Simbolul unui bistabil simplu

Pentru implementarea unui astfel de bistabil este nevoie doar de un proces ce va fi sensibil la unul
dintre fronturile clockului.


Acest proces trebuie utilizat în partea de arhitectură. Se observă
că procesul este sensibil la oricare tranziție a clockului, însă
expresia din interiorul procesului “rising_edge(clk)” va permite
rularea secventei “q <= d” doar la front crescător.

Un proces echivalent cu cel de mai sus este următorul:

process(clk)
begin
if clk’event and clk = ‘1’ then
q <= d;
end fi;
end process;

Aici, expresia < clk’event and clk = ‘1’ > este echivalentă cu expresia <rising_edge(clk)>. Se poate utiliza
apostrof pentru utilizarea unui atribut al semnalului respectiv.
[https://www.csee.umbc.edu/portal/help/VHDL/attribute.html]. Astfel clk’event va avea valoarea de adevăr
‘1’ atunci când apare trecerea din ‘0’ in ‘1’ sau din ‘1’ in ‘0’ a semnalului “clk”, sau, altfel spus, va avea
valoarea de adevăr ‘1’ atunci când apare un front (crescător sau descrescător) pe semnalul “clk”. Astfel,
acest eveniment combinat cu <clk = ‘1’> în construcția de tip IF, va genera un proces ce va fi sensibil la
frontul crescător al semnalului “clk”.

Free download pdf