复位按钮的消抖以及初始化代码

59 篇文章 4 订阅
14 篇文章 0 订阅


module debounce #(

parameter  INIT=10*1000*1000

parameter OVF=10*1000*1000

)(
   input     clk , i ,
   output reg    o  );

   reg [31:0]init;
   reg [31:0] c;

always @(posedge clk) if (init != INIT)  init<=init + 1 ;
   always @(posedge clk)  o <=  ( init == (OVF -1 )) || ( c == (OVF -1 ) ) ;
   always @(posedge clk)  if ( i==0 ) c<=0;  else if ( c != OVF )  c <= c + 1;

endmodule

分析上述代码:

1,i=1时候标示有按钮按下。i接按钮高有效,o接rst高有效。

2,一开始上电,init=0,经历了ovf个周期后o输出1,表达了自动产生一个周期的rst信号。

3,如果按下按钮,并保持ovf个周期以上,产生一个周期的rst信号,之后停止计数,直到为i=0;

4,如果按下按钮,没有保持ovf个周期,则不会产生rst信号。

5,此代码实现了上电复位和key复位。







module delay_reset#( 
parameter DELAY=10*1000*1000
)(
   input     clk ,
input     key,
   output   reg  rst ,
   output   reg  rst_n 
); 
   
reg [31:0]init;
reg keyr;always @(posedge clk) keyr<=key;

always @(posedge clk)  if ({keyr,key} == 2'b01) init<=0;else if (init != DELAY )  init<=init + 1 ;
   always @(posedge clk)  rst <=   init == (DELAY -1 ) ; 
   always @(posedge clk)  rst_n <= ~ rst ; 


endmodule


1,如果一个按钮按下KEY=1,则rst生效。

2,如果RST 继续保持则在DELAY 周期后继续产生一个RST信号,循环往复。

3,这是一个纯粹消抖动的应用。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值