Diferență între revizuiri ale paginii „Circuitul de debounce”

De la WikiLabs
Jump to navigationJump to search
(Pagină nouă: În circuitele secvențiale, orice variabilă de intrare care nu este dependentă de ceasul sistemului, este o intrare asincronă. Majoritatea acestor intrări asincrone provin de la ...)
 
Linia 1: Linia 1:
 
În circuitele secvențiale, orice variabilă de intrare care nu este dependentă de ceasul sistemului, este o intrare asincronă. Majoritatea acestor intrări asincrone provin de la dispozitive mecanice, cum ar fi cele patru butoane de pe placa de dezvoltare din laborator. Pe lângă faptul ca sunt asincrone, aceste semnale nu sunt perfect dreptunghiulare, elementele mecanice din interiorul butoanelor avand nevoie de un mic timp pentru a se stabiliza. In acest timp semnalul generat este format din multe spike-uri, care conduc la funcționarea gresită a circuitului nostru (se comportă ca un semnal dreptunghiular de frecvența foarte mare). Ne propunem să rezolvăm această problemă prin ignorarea acelei perioade din semnal (cateva
 
În circuitele secvențiale, orice variabilă de intrare care nu este dependentă de ceasul sistemului, este o intrare asincronă. Majoritatea acestor intrări asincrone provin de la dispozitive mecanice, cum ar fi cele patru butoane de pe placa de dezvoltare din laborator. Pe lângă faptul ca sunt asincrone, aceste semnale nu sunt perfect dreptunghiulare, elementele mecanice din interiorul butoanelor avand nevoie de un mic timp pentru a se stabiliza. In acest timp semnalul generat este format din multe spike-uri, care conduc la funcționarea gresită a circuitului nostru (se comportă ca un semnal dreptunghiular de frecvența foarte mare). Ne propunem să rezolvăm această problemă prin ignorarea acelei perioade din semnal (cateva
 
milisecunde). Acest lucru îl face circuitul de Debounce, care primește la intrare un semnal, asemanator lui '''in''' din figura de mai jos și generează la ieșire un semnal perfect  dreptunghiular, de durata unei singure perioade de ceas ('''out''' din figura de mai jos).
 
milisecunde). Acest lucru îl face circuitul de Debounce, care primește la intrare un semnal, asemanator lui '''in''' din figura de mai jos și generează la ieșire un semnal perfect  dreptunghiular, de durata unei singure perioade de ceas ('''out''' din figura de mai jos).
 +
 +
[[Fișier:debounce1.png|Intrare asincronă și ieșire debounce]]
 +
 +
== Implementarea unui circuit de debounce ==
 +
 +
<syntaxhighlight lang="Verilog">
 +
module Debounce3(
 +
output out,
 +
input clock,
 +
input reset,
 +
input in
 +
);
 +
 +
parameter limit = 20'd650000;
 +
 +
reg [19:0] counter;
 +
reg hit;
 +
 +
assign out = (counter == limit);
 +
 +
always@(posedge clock) begin
 +
if(reset) begin
 +
counter <= 0;
 +
hit <= 0;
 +
end if(counter == limit) begin
 +
hit <= 1;
 +
counter <= counter + 1;
 +
end else if(!in) begin
 +
counter <= 0;
 +
hit <= 0;
 +
end else if(in & !hit) begin
 +
counter <= counter + 1;
 +
end
 +
end
 +
 +
endmodule
 +
</syntaxhighlight>

Versiunea de la data 25 martie 2012 12:41

În circuitele secvențiale, orice variabilă de intrare care nu este dependentă de ceasul sistemului, este o intrare asincronă. Majoritatea acestor intrări asincrone provin de la dispozitive mecanice, cum ar fi cele patru butoane de pe placa de dezvoltare din laborator. Pe lângă faptul ca sunt asincrone, aceste semnale nu sunt perfect dreptunghiulare, elementele mecanice din interiorul butoanelor avand nevoie de un mic timp pentru a se stabiliza. In acest timp semnalul generat este format din multe spike-uri, care conduc la funcționarea gresită a circuitului nostru (se comportă ca un semnal dreptunghiular de frecvența foarte mare). Ne propunem să rezolvăm această problemă prin ignorarea acelei perioade din semnal (cateva milisecunde). Acest lucru îl face circuitul de Debounce, care primește la intrare un semnal, asemanator lui in din figura de mai jos și generează la ieșire un semnal perfect dreptunghiular, de durata unei singure perioade de ceas (out din figura de mai jos).

Intrare asincronă și ieșire debounce

Implementarea unui circuit de debounce

module Debounce3(
	output out,
	input clock,
	input reset,
	input in
);

parameter limit = 20'd650000;

reg [19:0] counter;
reg hit;

assign out = (counter == limit);

always@(posedge clock) begin
	if(reset) begin
		counter <= 0;
		hit <= 0;
	end if(counter == limit) begin
		hit <= 1;
		counter <= counter + 1;
	end else if(!in) begin
		counter <= 0;
		hit <= 0;
	end else if(in & !hit) begin
		counter <= counter + 1;
	end
end

endmodule