开关消抖的讨论

        今天在EEPW 论坛上看到了一个前辈写的code。说是用10行实现开关消抖。当时我就在想,如果让我写一个开关消抖,我会怎么写呢,先琢磨了一下  

 1 //date : 2013/12/16
 2 //designer :pengxiaoen
 3 // version : QuartusII 13.0  64bit 
 4 //function : 
 5 module key_ON_OFF (
 6                    clock ,reset,
 7                          key_in,
 8                          key_out
 9                          );
10 input clock ,reset;
11 input key_in ;
12 output key_out ;
13 
14 reg [7:0]  counter1;
15 reg        key_reg0,key_reg1,key_reg2;
16 
17 always @ (posedge clock )
18     if(!reset) begin 
19              key_reg0  <= 1'd0;
20                 counter1  <= 8'h00;
21                 end 
22      else if(counter1 == 8'dff)  begin 
23              counter1  <= 8'h00;
24                 key_reg0  <= key_in;
25              end 
26       
27 always @ (posedge clock)
28     if(!reset)  begin 
29             key_reg1 <= 1'd0;
30               key_reg2 <= 1'd0;
31               end         
32      else begin 
33              key_reg1 <= key_reg0;
34                 key_reg2 <= key_reg1;
35                 end 
36                 
37 assign key_out = (key_reg1 == !(key_reg2)) ?  1'd1  : 1'd0; 
38 
39 endmodule 


       一不小心 30行就被我花销掉了。看着繁琐的代码后来还是要参考前辈们的了

 1 reg key_reg1,key_reg2,key_out;
 2 always @( posedge clk)//CLK 50M
 3     begin
 4     count2<=count2+1;
 5     if(count2==500000)
 6     begin
 7         key_reg1<=key1; 
 8         count2<=0;
 9     end
10     key_reg2<=key_reg1; 
11     key_out<=key_reg2&(!key_reg1); 
12 end

代码行数只有我的一半。主要是很好看懂,思维很清晰。

个人一点私下观点:我自己的代码设计思路是参照特权同学的(没有说人家的思路不好的意思),分模块的思维很强烈,就是将电路分解出来进行设计。  而下面的一种我想到我看黑金的资料,有点像他们的设计思路,有点软件的味道。个人意见,不喜勿喷。

原文地址:https://www.cnblogs.com/sepeng/p/3477215.html