verilog 按键消抖 vs 边沿检测
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了verilog 按键消抖 vs 边沿检测相关的知识,希望对你有一定的参考价值。
//按键消抖部分
always @(posedge clock)
begin
if(div_clk)
begin
dout1 <= key;
dout2 <= dout1;
dout3 <= dout2;
end
end
//按键边沿检测部分
always @(posedge clock)
begin
buff <= dout1 | dout2 | dout3;
end
assign key_edge = ~(dout1 | dout2 | dout3) & buff;
请问我把按键边沿检测改成
assgin buff = dout1 | dout2 | dout3;
assign key_edge = ~(dout1 | dout2 | dout3) & buff;
可以不?
要想得到好的消抖效果,采样周期最好大于20ms,也就是说你上面的div_clk很重要。另外一个小的建议,if—else最好都有,负责可能综合时出现锁存器。
以上纯属个人见解,希望能帮到您。追问
thaks all the same。 我试了几遍还是不行,clk改到25ms也不行。 我在控制直流电机,改来改去,就这块不能改。一改就不动了。
对于if-else的else,如果没有else该怎么改呢?
if(~div_clk)
begin
dout1 <= 1'b0;
dout2 <= 1'b0;
dout3 <= 1'b0;
end
else
begin
dout1 <= key;
dout2 <= dout1;
dout3 <= dout2;
end
最好不要让RTL中出现锁存器,除非是为了低功耗。
可以看看这种方式,http://wenku.baidu.com/link?url=AeM7JRIKiJ8L-qlwTRI9sCTsTwk6m51Fy_0Qh3SoO9_sBiqPa9C_w54U_EK0aeUwhhSxmhlqRg5SODmfd3CwZf8qy72oE1C3-YSoX6gQq-y
以上是关于verilog 按键消抖 vs 边沿检测的主要内容,如果未能解决你的问题,请参考以下文章