代码拉取完成,页面将自动刷新
module key_filter(
Clk,
Reset_n,
Key,
// Key_P_Flag,
// Key_R_Flag,
Key_Flag,
Key_State
);
input Clk;
input Reset_n;
input Key;
// output reg Key_P_Flag;
// output reg Key_R_Flag;
output Key_Flag;
output reg Key_State;
reg Key_P_Flag;
reg Key_R_Flag;
assign Key_Flag = Key_P_Flag | Key_R_Flag;
reg [2:0] r_Key; //防止亚稳态用三个移位寄存器
always@(posedge Clk)
r_Key <= {r_Key[1:0],Key};
// always@(posedge Clk)begin
// r_Key[0] <= Key;
// r_Key[1] <= r_Key[0];
// r_Key[2] <= r_Key[1];
// end
wire pedge_key;
assign pedge_key = (r_Key[2:1] == 2'b01);
wire nedge_key;
assign nedge_key = (r_Key[2:1] == 2'b10);
reg [19:0]cnt;
reg [1:0]state;
always@(posedge Clk or negedge Reset_n)
if(!Reset_n)begin
state <= 0;
Key_R_Flag <= 1'b0;
Key_P_Flag <= 1'b0;
cnt <= 0;
Key_State <= 1;
end
else begin
case(state)
0:
begin
Key_R_Flag <= 1'b0;
if(nedge_key)
state <= 1;
else
state <= 0;
end
1:
if((pedge_key)&&(cnt <1000000 -1))begin
state <= 0;
cnt <= 0;
end
else if(cnt >= 1000000 -1)begin
state <= 2;
cnt <= 0;
Key_P_Flag <= 1;
Key_State <= 0;
end
else begin
cnt <= cnt + 1'b1;
state <= 1;
end
2:
begin
Key_P_Flag <= 0;
if(pedge_key)
state <= 3;
else
state <= 2;
end
3:
if((nedge_key)&&(cnt <1000000 -1))begin
state <= 2;
cnt <= 0;
end
else if(cnt >= 1000000 -1)begin
state <= 0;
cnt <= 0;
Key_R_Flag <= 1'b1;
Key_State <= 1;
end
else begin
cnt <= cnt + 1'b1;
state <= 3;
end
endcase
end
endmodule
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。