AC620FPGA學習筆記——按鍵消抖

按鍵消抖

工程地址:https://github.com/HaHaHaHaHaGe/Planof2019_half/tree/master/Course_Project/FPGA/class02_pushkey
學習重點:
1、多模塊之間的連接
2、消抖原理
3、亞穩態處理

多模塊之間的連接

module key_cnt_led(
	led1,
	led2,
	led3,
	led4,
	key,
	clk,
	rst
);

input wire clk,rst;
input key;
reg key_1;
reg key_2;
output wire led1,led2,led3,led4;
wire outkey;

pushkey pushkey_01(
	.clk(clk),
	.key(key_2),
	.out(outkey)
);

count_led count_led_01(
	.led1(led1),
	.led2(led2),
	.led3(led3),
	.led4(led4),
	.clk(outkey),
	.rst(rst)
);

always@(posedge clk) begin
key_1 <= key;
key_2 <= key_1;
end
endmodule

就像用烙鐵焊接元器件一樣,使用wire將各個module連接起來

消抖原理

module pushkey(
	clk,
	key,
	out
);

input clk,key;
output reg out;

reg flag;
reg [20:0]cnt;

localparam PUSH = 1'b1;
localparam NO_PUSH = 1'b0;

always@(posedge clk) begin

if(!key) 
	flag <= PUSH;
else begin
	cnt[20:0] <= 21'd0;
	flag <= NO_PUSH;
end

case(flag)
	NO_PUSH:
		out <= 1'b0;
	PUSH:	if(cnt[20:0] == 21'd999999)
			out <= 1'b1;
		else
			cnt <= cnt + 21'b1;
endcase
end
endmodule

使用定時器對按鍵的狀態進行檢測,若20ms內沒有出現波動,則認爲按下了按鍵

亞穩態處理

亞穩態是由於異步系統信號的不確定性造成的。亞穩態的狀態會對次級系統造成嚴重的影響,導致系統崩潰
處理的辦法,使用級聯DQ觸發器即可解決

always@(posedge clk) begin
key_1 <= key;
key_2 <= key_1;
end

1

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章