用verilog编写按键消抖代码

编程入门 行业动态 更新时间:2024-10-22 07:53:16

用verilog编写<a href=https://www.elefans.com/category/jswz/34/1768597.html style=按键消抖代码"/>

用verilog编写按键消抖代码

本代码在按键按下和松开情况下均能消抖,消抖延时20ms(时钟频率为100MHz时)。

代码如下

module key3_led2(
//from system input
    input    clk,
    input    rstn,
//from external input to pl
    input    ex_key1,        //按键从PL端输入
//from pl to ps
    output    reg    pl_key1    //处理后的按键信号传给PS端

    
);

parameter    delay_t=21'd2_00;//0_000;    //时钟100MHz,延时20ms
//按键输入信号异步转同步(消除亚稳态)
reg [1:0]        key1_r;
//捕捉按键跳变沿
wire        key1_change;
//按键消抖延时计数
reg [20:0]        delay_key1_cnt;
//按键状态
wire        key1_state_down;//(按键未按时为1,按下为0)检测按下时的下降沿
wire        key1_state_up;    //检测按键松开时的上升沿。

//key1消抖
//消除亚稳态,单bit信号异步转同步
always@(posedge clk or negedge rstn)
begin
    if(!rstn)
        begin
            key1_r<=1;
        end
    else
        begin
            key1_r<={key1_r[0],ex_key1};
        end
end

//边沿检测上升沿和下降沿

assign key1_change=(~key1_r[1]&key1_r[0]) | (key1_r[1] & ~key1_r[0]);

//延时20ms
always@(posedge clk or negedge rstn)
begin
    if(!rstn)
        begin
            delay_key1_cnt<=0;
        end
    else if(key1_change==1'b1)
        begin
            delay_key1_cnt<=0;    
        end
           else if (delay_key1_cnt == delay_t)
            begin
                delay_key1_cnt<=delay_t;
            end
                  else
            begin
                delay_key1_cnt<=delay_key1_cnt+1'b1;
            end
end
//按键状态输出,key1_state_a假定按键默认状态为1,按下为0;
assign    key1_state_down = ((delay_key1_cnt == delay_t)&&(key1_r[1] == 1'b0))?1'b0:1'b1;
assign    key1_state_up = ((delay_key1_cnt == delay_t)&&(key1_r[1] == 1'b1))?1'b1:1'b0;

always@(posedge clk or negedge rstn)
begin
    if(!rstn)
        begin
            pl_key1<=1'd1;
        end
    else
       if(pl_key1)
            pl_key1<=key1_state_down;
        else
          pl_key1<=key1_state_up;
end
endmodule

用该代码扩展到3个按键,仿真结果如下图,按键信号输入名称ex_key1、ex_key2、ex_key4;按键边沿检测信号key1_change、key2_change、key4_change;消抖后的信号pl_key1、pl_key2、pl_key4。

 

更多推荐

用verilog编写按键消抖代码

本文发布于:2023-06-27 08:20:23,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/908693.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:按键   代码   verilog

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!