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

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 30763|回复: 35

[原创] Verilog基本电路设计之四(去抖滤波)

[复制链接]
发表于 2016-6-20 17:13:10 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 杰克淡定 于 2016-6-20 17:22 编辑

debounce电路,就是常说的去抖滤波,主要用在芯片的PAD输入信号,或者模拟电路输出给数字电路的信号上。

parameter BIT_NUM  = 4 ;
reg [BIT_NUM-1 : 0] signal_deb ; //
always @ (posedge clk or negedge rst_n)
begin
    if (rst_n == 1'b0)
        signal_deb <= {BIT_NUM{1'b0}} ;
    else
        signal_deb <= # DLY {signal_deb[BIT_NUM-2:0],signal_i} ;
end

always @ (posedge clk or negedge rst_n)
begin
    if (rst_n == 1'b0)
        signal_o <= 1'b1 ;
    else if (signal_deb[3:1]==3'b111)
        signal_o <= # DLY 1'b1 ;
    else if (signal_deb[3:1]==3'b000)
        signal_o <= # DLY 1'b0 ;
    else ;
end

上面的电路,第一个always,还兼顾了去亚稳态作用。它可以滤掉的宽度是两个clk的cycle,对于大于两个cycle而小于三个cycle的信号,有些可以滤掉,有些不能滤掉,这与signal_i相对clk的相位有关。

根据希望滤除的宽度相关,换算到clk下是多少个cycle数,从而决定使用多少级DFF。如果希望滤除的宽度相对cycle数而言较大,可以先在clk下做一个计数器,产生固定间隔的脉冲,再在脉冲信号有效时使用多级DFF去抓signal_i;或者直接将clk分频后再使用。
发表于 2016-6-20 17:31:32 | 显示全部楼层
谢谢分享
发表于 2016-6-21 10:01:19 | 显示全部楼层
我想点个菜,不知楼主这里有没有,low power design for front end.
发表于 2016-6-21 10:34:51 | 显示全部楼层
在检测到有效信号后,该电路对非有效信号到来时刻的判断有些苛刻,需要signal_deb[3:1]里的值全相等才行。是否有一个比特不同,即可进行判断。
 楼主| 发表于 2016-6-21 10:52:08 | 显示全部楼层
回复 4# licaijunzhuce


这个电路,一旦置1,中间出现小于两个cycle的低电平也会滤掉;一旦置0,中间出现小于两个cycle的高电平也会滤掉。这只是一个示例而已,不是说所有滤波都要这样处理,你可以根据自己的应用需求去修改的。
 楼主| 发表于 2016-6-21 10:58:50 | 显示全部楼层
回复 3# yaya126

你说的low power design是针对多电压域设计和power gating,还是指从clock gating以及RTL风格这种级别的low power?
发表于 2016-6-21 11:03:31 | 显示全部楼层
回复 5# 杰克淡定


   刚刚又想了一下,之前考虑不全面,应该根据实际电路的情况来选择不同的判断依据。有的电路在有效信号期间也是可能抖动的。楼主说得有道理。
发表于 2016-6-21 15:13:29 | 显示全部楼层
回复 6# 杰克淡定
DVFS和power gating偏后端,一般前端的手段实现不了,讲讲前端可以操作的方法,如clock gating, coding style, logic sharing, area/power trade off,  etc.
 楼主| 发表于 2016-6-21 19:45:43 | 显示全部楼层
回复 8# yaya126


   你说的这个问题,想要讲的比较清楚易懂,需要结合文字代码以及时序图之类,还要适合在帖子里讨论。我先整理,看看好不好弄
发表于 2016-6-22 08:28:49 | 显示全部楼层
if(rst_n==1'b0)
signal_o <= 1'b1 ;
初始值一定为1吗
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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


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

GMT+8, 2024-12-22 21:53 , Processed in 0.023486 second(s), 10 queries , Gzip On, Redis On.

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