有关按键的问题
这个程序时,当检测到有按键按下的时候,产生一个高电平的key_pulse,用key_pilse控制led灯变化一次。
我的仿真波形和我想的都一样,但是下到板子上就是不行。请大家帮忙看一下,谢谢大家了!
(我消抖时间选用了10ms)
module ceshi(
input wire sclk,
input wire s_rst_n,
input wire pi_key,
output reg led
);
regkey_pulse;
regpi_key_reg;
//前消抖变量
reg pre_cnt_10ms;
regpre_flag_10ms;
//后消抖变量
reg pos_cnt_10ms;
regpos_flag_10ms;
parameter CNT = 19'd49_9999;
//打一拍抓下降沿
always@(posedge sclk or negedge s_rst_n)
pi_key_reg <= pi_key;
//前端 消抖
always@(posedge sclk or negedge s_rst_n)
if(s_rst_n==1'b0)
pre_flag_10ms <= 1'b0;
else if(pi_key==1'b0&&pi_key_reg==1'b1&&pos_flag_10ms==1'b0)
pre_flag_10ms <= 1'b1;
else if(pre_cnt_10ms>=CNT)
pre_flag_10ms <= 1'b0;
else
pre_flag_10ms <= pre_flag_10ms;
always@(posedge sclk or negedge s_rst_n)
if(s_rst_n==1'b0)
pre_cnt_10ms <= 19'd0;
//else if(pos_flag_10ms==1'b1)
// pre_cnt_10ms <= 19'd0;
else if(pre_flag_10ms==1'b1)
pre_cnt_10ms <= pre_cnt_10ms + 19'd1;
else
pre_cnt_10ms <= pre_cnt_10ms;
//后端消抖
always@(posedge sclk or negedge s_rst_n)
if(s_rst_n==1'b0)
pos_flag_10ms <= 1'b0;
else if(pi_key==1'b1&&pi_key_reg==1'b0&&pre_flag_10ms==1'b0)
pos_flag_10ms <= 1'b1;
else if(pos_cnt_10ms>=CNT)
pos_flag_10ms <= 1'b0;
else
pos_flag_10ms <= pos_flag_10ms;
always@(posedge sclk or negedge s_rst_n)
if(s_rst_n==1'b0)
pos_cnt_10ms <= 19'd0;
//else if(pre_flag_10ms==1'b1)
// pos_cnt_10ms <= 19'd0;
else if(pos_flag_10ms==1'b1)
pos_cnt_10ms <= pos_cnt_10ms + 19'd1;
else
pos_cnt_10ms <= pos_cnt_10ms;
//前抖消除之后产生一个key_pulse
always@(posedge sclk or negedge s_rst_n)
if(s_rst_n==1'b0)
key_pulse <= 1'b0;
else if(pre_cnt_10ms==CNT)
key_pulse <= 1'b1;
else
key_pulse <= 1'b0;
always@(posedge sclk or negedge s_rst_n)
if(s_rst_n==1'b0)
led <= 4'b0011;
else if(key_pulse==1'b1)
led <= 4'b1100;
else
led <= led;
endmodule
页:
[1]