您的位置:首页 > 教育 > 培训 > 网站运营的含义_优化方案物理必修一答案_四年级的简短新闻播报_百度贴吧官网首页

网站运营的含义_优化方案物理必修一答案_四年级的简短新闻播报_百度贴吧官网首页

2025/3/10 21:47:50 来源:https://blog.csdn.net/qq_45956475/article/details/146078797  浏览:    关键词:网站运营的含义_优化方案物理必修一答案_四年级的简短新闻播报_百度贴吧官网首页
网站运营的含义_优化方案物理必修一答案_四年级的简短新闻播报_百度贴吧官网首页

按键消抖

1. 原理

在这里插入图片描述

2. 关键程序实现
always @(posedge clk or negedge rst) beginif(!rst)begincnt_wait <= 26'd0;end else if(flag_nege || flag_pose)begincnt_wait <= 26'd1;end else if(cnt_wait == MAX_CNT) begincnt_wait <= 26'd0;end else if(cnt_wait > 26'd0 && cnt_wait < MAX_CNT)begincnt_wait <= cnt_wait + 26'd1;end
endalways @(posedge clk or negedge rst) beginif(!rst)beginkey_scan1 <= 4'b1111;key_scan2 <= 4'b1111;end else if(cnt_wait == MAX_CNT)beginkey_scan1 <= key_in;key_scan2 <= key_scan1;end else beginkey_scan2 <= key_scan1;end
end
3. 仿真波形

在这里插入图片描述

4. 源代码
module key(input                               clk                        ,input                               rst                        ,input              [   3:0]         key_in                     ,output             [   3:0]         key_out_down               ,           output             [   3:0]         key_out_up                     
);wire                                    key_tmp = &key_in          ;reg                    key_in_r2                  ;
reg                    key_in_r1                  ;always @(posedge clk or negedge rst)beginif(!rst)beginkey_in_r1 <= 1'b1;key_in_r2 <= 1'b1;end else beginkey_in_r1 <= key_tmp;key_in_r2 <= key_in_r1;end
endwire                                    flag_nege = key_in_r2 & !key_in_r1;//
wire                                    flag_pose = !key_in_r2 & key_in_r1;//reg                    [  25:0]         cnt_wait                   ;
// localparam  MAX_CNT = 50_000_000/50;
localparam                              MAX_CNT = 1_000_000 - 1    ;
always @(posedge clk or negedge rst) beginif(!rst)begincnt_wait <= 26'd0;end else if(flag_nege || flag_pose)begincnt_wait <= 26'd1;end else if(cnt_wait == MAX_CNT) begincnt_wait <= 26'd0;end else if(cnt_wait > 26'd0 && cnt_wait < MAX_CNT)begincnt_wait <= cnt_wait + 26'd1;end
endreg                    [   3:0]         key_scan1                  ;
reg                    [   3:0]         key_scan2                  ;
always @(posedge clk or negedge rst) beginif(!rst)beginkey_scan1 <= 4'b1111;key_scan2 <= 4'b1111;end else if(cnt_wait == MAX_CNT)beginkey_scan1 <= key_in;key_scan2 <= key_scan1;end else beginkey_scan2 <= key_scan1;end
end// wire                   [   3:0]         kay_val = !key_scan1 & key_scan2;  !不行   !的优先级低
wire                   [   3:0]         kay_val_down = ~key_scan1 & key_scan2;//
wire                   [   3:0]         kay_val_up = key_scan1 & ~key_scan2;//assign key_out_down = kay_val_down;
assign key_out_up = kay_val_up;endmodule

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com