verilog语言 BCD码按键从1到60计数,再跳1循环计数。加入键盘防抖动。
源代码:
module BCD_60(
input clk,clr,en,
output reg cout,
output reg[7:0]q);
reg[7:0]count;
always @(posedge clk,negedge clr)
begin
q<=count;
if (clr==0) count<=8'b00000000;
else if(en==1)
begin
if(count==8'b01011001)
count=8'b00000000;
else if(count[3:0]<9) count[3:0]=count[3:0]+1'b1;
else if(count[7:4]<5)
begin
count[7:4]=count[7:4]+1'b1;
count[3:0]=4'b0000;
end
if(count==8'b01011001) cout=1;
else cout=0;
end
end
endmodule
键盘仿抖动设计
module eg347(
input clk,key,
output reg keyout);
reg[3:0] cta,ctb;
always@(posedge clk)
begin
if(key==0)
begin cta<=cta+1 ;
ctb<=4'b0000;
end
if(cta>=5)
begin
cta<=0;
keyout<=0;
end
else if(key==1)
begin
ctb<=ctb+1;
cta<=4'b0000;
end
if(ctb>=5)
begin
ctb<=0;
keyout<=1;
end
end
endmodule
BCD60计数器设计,以普通按键增加防抖动设计作为时钟输入的测试。
1.新建 Verilog 文件,将例 3.4.7 加入到工程中,并创建符号文件。
2.打开原理图文件,设计电路如图所示,其中防抖动模块 debounce 的时钟连接 24 位分频计数器的 ck[15]输出端。
3.存盘,将该文件设置为顶层编译实体,编译该设计。由于该电路存在巨大的分频比,时钟频率差异巨大,如果要仿真,需要的时钟周期数将非常巨大,仿真时间会非常长。由于电路较简单,每个模块均已独立仿真,因此可以不再做整体仿真。
4.锁定管脚,将 clk 锁定至系统 20MHz 信号源,key、clr、en 均锁定在普通机械开关或拨码开关上,重新编译。
5.下载配置。
6.硬件测试。按动键盘上的 key 键,给计数器输入手动脉冲,观察每按动 1 次,计数数据是否变化,是否只加 1,是否存在按动 1 次,数据增加几个的现象。
7.通过修改调整时钟输入频率或内部延时数值的大小,重新测试,观察不同延时时间对键盘防抖动的影响。
原理图