Diferență între revizuiri ale paginii „Circuite secvențiale”
(Nu s-au afișat 7 versiuni intermediare efectuate de același utilizator) | |||
Linia 23: | Linia 23: | ||
[[Fișier:seq3.png|thumb|Simulare a unui registru pe 4 biți]] | [[Fișier:seq3.png|thumb|Simulare a unui registru pe 4 biți]] | ||
− | Aceasta este implementarea în Verilog a unui registru pe 4 biți care nu face decât să | + | Aceasta este implementarea în Verilog a unui registru pe 4 biți care nu face decât să încarce registrul cu valoarea de intrare, iar în imagine puteți vedea o simulare Modelsim care arată că ieșirea nu se schimbă decât pe frontul pozitiv de ceas care urmează schimbării intrării: |
<syntaxhighlight lang="verilog"> | <syntaxhighlight lang="verilog"> | ||
module Register( | module Register( | ||
− | + | output reg [3:0] out, | |
− | + | input [3:0] in, | |
− | + | input clock | |
− | + | ); | |
always@(posedge clock) begin | always@(posedge clock) begin | ||
− | + | out <= in; | |
end | end | ||
Linia 40: | Linia 40: | ||
== Reset pentru circuitele secvențiale == | == Reset pentru circuitele secvențiale == | ||
+ | |||
+ | Există situații în care registrele trebuie resetate, adică încărcate cu o valoare implicită. Acest proces de reset este de obicei utilizat când circuitul de blochează, dintr-un motiv sau altul, sau când se dorește repornirea acestuia dint-o stare inițială. Circuitelor pentru care este necesar să fie posibilă resetarea, li se adaugă un semnal de reset. Descrierea în Verilog a unui registru pe 4 biți cu semnal de reset, care doar se încară cu o valoarea de pe intrare, este următoarea: | ||
+ | |||
+ | <syntaxhighlight lang="verilog"> | ||
+ | module Register( | ||
+ | output reg [3:0] out, | ||
+ | input [3:0] in, | ||
+ | input clock, | ||
+ | input reset | ||
+ | ); | ||
+ | |||
+ | always@(posedge clock) begin | ||
+ | if(reset) begin | ||
+ | out <= 4'b0; | ||
+ | end else begin | ||
+ | out <= in; | ||
+ | end | ||
+ | end | ||
+ | |||
+ | endmodule | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | Acest tip de reset se numește reset sincron, pentru ca el este evaluat doar pe frontul de ceas (sincron cu ceasul). Există și cazuri în care resetul este asincron, iar atunci frontul activ al semnalului de reset trebuie să apară în lista de sensitivități a blocului '''always'''. |
Versiunea curentă din 1 aprilie 2014 05:59
Circuitele secvențiale sunt circuitele care sunt sincronizate de un semnal de ceas, adică ale căror ieșiri nu se modifică decât pe frontul pozitiv (sau negativ, în funcție de descriere) de ceas.
Semnalul de ceas
Semnalul de ceas este un semnal periodic, care oscilează cu o anumită frecvență, numită frecvența de ceas.
Observație: Vezi sintaxa Verilog pentru a afla cum se generează un semnal de ceas în simulare.
Circuite de memorare. Registrul
Registrul este celula elementară de memorare și baza circuitelor secvențiale. Odată o valoare încarcată într-un registru, aceasta se păstrează până la suprascrierea ei cu o altă valoare.
Aceasta este implementarea în Verilog a unui registru pe 4 biți care nu face decât să încarce registrul cu valoarea de intrare, iar în imagine puteți vedea o simulare Modelsim care arată că ieșirea nu se schimbă decât pe frontul pozitiv de ceas care urmează schimbării intrării:
module Register(
output reg [3:0] out,
input [3:0] in,
input clock
);
always@(posedge clock) begin
out <= in;
end
endmodule
Reset pentru circuitele secvențiale
Există situații în care registrele trebuie resetate, adică încărcate cu o valoare implicită. Acest proces de reset este de obicei utilizat când circuitul de blochează, dintr-un motiv sau altul, sau când se dorește repornirea acestuia dint-o stare inițială. Circuitelor pentru care este necesar să fie posibilă resetarea, li se adaugă un semnal de reset. Descrierea în Verilog a unui registru pe 4 biți cu semnal de reset, care doar se încară cu o valoarea de pe intrare, este următoarea:
module Register(
output reg [3:0] out,
input [3:0] in,
input clock,
input reset
);
always@(posedge clock) begin
if(reset) begin
out <= 4'b0;
end else begin
out <= in;
end
end
endmodule
Acest tip de reset se numește reset sincron, pentru ca el este evaluat doar pe frontul de ceas (sincron cu ceasul). Există și cazuri în care resetul este asincron, iar atunci frontul activ al semnalului de reset trebuie să apară în lista de sensitivități a blocului always.