以前没接触过FPGA,目前只会一个always,像什么wire啊什么assign什么的还不知道什么意思。
写了个按键检测程序,有按下及松手的检测。
功能实现了,只是不知道这样写会有什么问题。
先谢谢各位了。
以下是代码:
module key(sys_clk, sys_rstn, led, key);
//输入/输出信号定义
input key;
input sys_clk;
input sys_rstn;
output led;
//寄存器定义
reg [19:0] delay_cnt;
reg key_pressed;
reg key_stat;
reg led;
//逻辑部分
always@(posedge sys_clk or negedge sys_rstn)
begin
if (!sys_rstn)
begin
led<=1'b1;
key_stat<=1'b0;
delay_cnt<=20'h0;
end
else
begin
key_stat<=~key;
if(key_stat)
begin
//检测到按键按下,延时一段时间后如果依然为按下状态则判定为按键真实按下了。置key_pressed为1.
if (delay_cnt==20'hfffff)
begin
delay_cnt<=20'h0;
key_pressed<=1'b1;
end
else
begin
led<=led;
delay_cnt<=delay_cnt+1'b1;
end
end
else
begin
//在前一状态为按键按下且松手一段时间后判定为真实松开了。
if(key_pressed)
begin
led<=led;
delay_cnt<=delay_cnt+1'b1;
if(delay_cnt==20'hfffff)
begin
delay_cnt<=20'b0;
key_pressed<=1'b0;
led<=~led;
end
else
led<=led;
end
else
led<=led;
end
end
end
endmodule