开关消抖的讨论
0赞
发表于 2013/12/16 14:02:06
阅读(1088)
今天在EEPW 论坛上看到了一个前辈写的code。说是用10行实现开关消抖。当时我就在想,如果让我写一个开关消抖,我会怎么写呢,先琢磨了一下
//date : 2013/12/16 //designer :pengxiaoen // version : QuartusII 13.0 64bit //function : module key_ON_OFF ( clock ,reset, key_in, key_out ); input clock ,reset; input key_in ; output key_out ; reg [7:0] counter1; reg key_reg0,key_reg1,key_reg2; always @ (posedge clock ) if(!reset) begin key_reg0 <= 1'd0; counter1 <= 8'h00; end else if(counter1 == 8'dff) begin counter1 <= 8'h00; key_reg0 <= key_in; end always @ (posedge clock) if(!reset) begin key_reg1 <= 1'd0; key_reg2 <= 1'd0; end else begin key_reg1 <= key_reg0; key_reg2 <= key_reg1; end assign key_out = (key_reg1 == !(key_reg2)) ? 1'd1 : 1'd0; endmodule
一不小心 30行就被我花销掉了。看着繁琐的代码后来还是要参考前辈们的了
reg key_reg1,key_reg2,key_out; always @( posedge clk)//CLK 50M begin count2<=count2+1; if(count2==500000) begin key_reg1<=key1; count2<=0; end key_reg2<=key_reg1; key_out<=key_reg2&(!key_reg1); end
代码行数只有我的一半。主要是很好看懂,思维很清晰。
个人一点私下观点:我自己的代码设计思路是参照特权同学的(没有说人家的思路不好的意思),分模块的思维很强烈,就是将电路分解出来进行设计。 而下面的一种我想到我看黑金的资料,有点像他们的设计思路,有点软件的味道。个人意见,不喜勿喷。