在线咨询 切换到宽版
eetop公众号 创芯大讲堂 创芯人才网

 找回密码
 注册

手机号码,快捷登录

手机号码,快捷登录

搜帖子
查看: 4698|回复: 12

[求助] 求助,关于消抖电路的问题

[复制链接]
发表于 2014-4-6 18:58:45 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

×
这是我在网上搜到的消抖电路verilog代码
  reg key0, key1, key2, key3;
  reg [19:0] cnt;
  
  wire keyy0;
  
  always @(posedge clk, negedge rst)
  begin
    if(!rst)
    begin
      key0<=1;
      key1<=1;
    end
    else
    begin
      key0<=indata;
      key1<=key0;
    end
  end
  
  always @(posedge clk, negedge rst)
  begin
    if(!rst) cnt<=0;
    else if(keyy0) cnt<=0;
    else cnt<=cnt+1;
  end
  
  assign keyy0=key1&(~key0);
  
  always @(posedge clk, negedge rst)
  begin
    if(!rst)
    begin
      key2<=1;
    end
    else if(cnt==20'hfffff)
    begin
      key2<=indata;
    end
  end
  
  always @(posedge clk, negedge rst)
  begin
    if(!rst)
    begin
      key3<=1;
    end
    else
    begin
      key3<=key2;
    end
  end
  
  assign outdata=key3&(~key2);

我怎么感觉有点问题啊
如果出现了下面的时序,结果不就错了吗,求解,谢谢
IMG_0970.JPG
 楼主| 发表于 2014-4-6 18:59:49 | 显示全部楼层
为什么是绿色的?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-4-6 19:00:39 | 显示全部楼层
这是我在网上搜到的消抖电路verilog代码
  reg key0, key1, key2, key3;
  reg [19:0] cnt;
  
  wire keyy0;
  
  always @(posedge clk, negedge rst)
  begin
    if(!rst)
    begin
      key0<=1;
      key1<=1;
    end
    else
    begin
      key0<=indata;
      key1<=key0;
    end
  end
  
  always @(posedge clk, negedge rst)
  begin
    if(!rst) cnt<=0;
    else if(keyy0) cnt<=0;
    else cnt<=cnt+1;
  end
  
  assign keyy0=key1&(~key0);
  
  always @(posedge clk, negedge rst)
  begin
    if(!rst)
    begin
      key2<=1;
    end
    else if(cnt==20'hfffff)
    begin
      key2<=indata;
    end
  end
  
  always @(posedge clk, negedge rst)
  begin
    if(!rst)
    begin
      key3<=1;
    end
    else
    begin
      key3<=key2;
    end
  end
  
  assign outdata=key3&(~key2);

我怎么感觉有点问题啊
如果出现了下面的时序,结果不就错了吗,求解,谢谢
回复 支持 反对

使用道具 举报

发表于 2014-4-7 19:27:38 | 显示全部楼层
不知道你说的是什么,不过感觉你没理解什么是阻塞赋值,什么是非阻塞赋值。keyy0和outdata都是下降沿检测,即是按键按下的下降沿检测。。。而且我觉得这个消抖程序不好。或者根本不是消抖。消抖时钟是要有点时间的,怎么用50m时钟来,这也太快了。新人见解,不对勿怪。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-4-7 22:37:55 | 显示全部楼层
回复 4# MapleKing1990


   这个应该是按键下去的后一个时钟进行检测吧,怎么是下降沿呢,求解
回复 支持 反对

使用道具 举报

发表于 2014-4-8 13:24:28 | 显示全部楼层
assign keyy0=key1&(~key0);
这种电路简称为沿探测电路,有上升沿、下降沿、双边沿三种,具体这个是哪种,lz可以慢慢体会

说到具体功能,还是建议仿真一下,加强下切身感受吧
回复 支持 反对

使用道具 举报

发表于 2014-4-8 16:55:02 | 显示全部楼层
回复 5# nm2012


  always @(posedge clk, negedge rst)
  begin
    if(!rst)
    begin
      key0<=1;
      key1<=1;
    end
    else
    begin
      key0<=indata;
      key1<=key0;
    end
  end
  
  assign keyy0=key1&(~key0);
花点时间和你说点吧,我也知道新人学习很苦,因为我也是新人。复位不用说了,按键按下时是0,这点要知道,原来初始值是1。按下键后,从1到0是一个下降沿,第一个时钟沿到来后,key0=0,key1还是1,于是keyy0就是1,这个时间很短就是一个clk,就是按键的下降沿经历时间,你想是不是按键的下降沿检测呢。
回复 支持 反对

使用道具 举报

发表于 2014-4-8 19:09:27 | 显示全部楼层
升级了,yeah。。
回复 支持 反对

使用道具 举报

发表于 2014-4-9 14:18:41 | 显示全部楼层
说白了就是使用更高频率的时钟来做出各种处理,给生活的道理是一样的,有钱可以有很多种玩法。没有时钟看你怎么做,哈哈,老外的搞法也都是一样。
回复 支持 反对

使用道具 举报

发表于 2014-4-10 07:20:34 | 显示全部楼层
网上有关于消抖的经典电路,根据电路写代码,会事半功倍
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /1 下一条


手机版| 小黑屋| 关于我们| 联系我们| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2025-9-14 00:03 , Processed in 0.026872 second(s), 6 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表