0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

怎样使用毛刺滤波器来滤除毛刺和反弹?

OpenFPGA 来源:OpenFPGA 2023-08-30 10:24 次阅读

编程逻辑系统通常部署在可能存在噪声的应用中。这种噪声会影响可编程逻辑设计接收的信号。例如,它可能会导致信号故障或跳动,如果处理不当,可能会导致设计和操作出现问题。

f4a9cb24-46db-11ee-a2ef-92fbcf53809c.png

毛刺的持续时间是随机的,并且与时钟沿不同步。因此,它们可能会导致下游信息损坏。

处理此问题的最常见方法是使用毛刺滤波器来滤除毛刺和反弹。

毛刺滤波器核心是使用长度可变的移位寄存器,噪声信号被放到寄存器中,直到移位寄存器的所有值都一致。此时,信号可以视为稳定。当然,我们必须确定潜在毛刺和反弹可能持续多长时间,以确保时钟周期的寄存器大小正确。这就是为什么我们的毛刺滤波器需要非常灵活,并且需要确保其大小能够适合每个应用程序的要求。

滤波器应该能够接收噪声输入并滤除持续时间为多个时钟脉冲的毛刺。

f4e60832-46db-11ee-a2ef-92fbcf53809c.png

libraryieee;
useieee.std_logic_1164.all;
useieee.numeric_std.all;

entityglitch_filteris
generic(
G_FILER_LEN:integer:=8
);
port(
i_clk:instd_ulogic;
i_noisy:instd_ulogic;
o_clean:outstd_ulogic
);
endglitch_filter;

architecturebehaviourofglitch_filteris

signals_delay_line:std_ulogic_vector(G_FILER_LEN-1downto0);
signals_delay_and:std_ulogic;
signals_delay_nor:std_ulogic;
signals_output_clean:std_ulogic;

begin

o_clean<= s_output_clean;

    --Delay disctete using delay line
    synchroniser_process : process (i_clk) begin
        if rising_edge(i_clk) then
            s_delay_line <= s_delay_line(G_FILER_LEN - 2 downto 0) & 
                            i_noisy;
        end if;
    end process;

    --Generate AND and NOR of delay line bits
    s_delay_and <= '1' when to_01(s_delay_line) = 
                            (s_delay_line'range =>'1')else'0';
s_delay_nor<= '1' when to_01(s_delay_line) = 
                            (s_delay_line'range =>'0')else'0';

--Setdiscretebasedondelayline
output_process:process(i_clk)begin
ifrising_edge(i_clk)then
ifs_delay_nor='1'then
s_output_clean<= '0';
            elsif s_delay_and = '1' then
                s_output_clean <= '1';
            end if;
        end if;
    end process;

end behaviour;

为了测试这个模块,创建一个简单的测试文件,它将随机数量的毛刺注入信号中。在信号改变状态后,许多随机毛刺被输入到信号中。如果滤波器运行正常,则这些毛刺将在毛刺滤波器输出干净的信号。

libraryieee;
useieee.std_logic_1164.all;
useieee.numeric_std.all;
useieee.math_real.all;

entityglitch_filter_tbis
end;

architecturebenchofglitch_filter_tbis

componentglitch_filter
generic(
G_FILER_LEN:integer
);
port(
i_clk:instd_ulogic;
i_noisy:instd_ulogic;
o_clean:outstd_ulogic
);
endcomponent;

--Clockperiod
constantclk_period:time:=10ns;
--Generics
constantG_FILER_LEN:integer:=8;

--Ports
signali_clk:std_ulogic:='0';
signali_noisy:std_ulogic;
signalo_clean:std_ulogic;

begin

i_clk<= not i_clk after (clk_period/2);

  glitch_filter_inst : glitch_filter
    generic map (
      G_FILER_LEN =>G_FILER_LEN
)
portmap(
i_clk=>i_clk,
i_noisy=>i_noisy,
o_clean=>o_clean
);

uut:process

variableglitch_duration:integer;
variableseed1:positive:=1;
variableseed2:positive:=283647823;

impurefunctioninteger_random(min,max:integer)returnintegeris
variablerandom:real;
begin
uniform(seed1,seed2,random);
returninteger(round(random*real(max-min)+real(min)));
endfunction;

begin
i_noisy<= '0';
    wait until rising_edge(i_clk);
    wait for G_FILER_LEN * clk_period;
    test: for i in 0 to 1 loop
        i_noisy <= '1';
        wait until rising_edge(i_clk);
        glitch_duration := integer_random(1,5);
        for x in 0 to glitch_duration loop
            i_noisy <= not i_noisy;
            wait until rising_edge(i_clk);
        end loop;
        i_noisy <= '1';
        wait for 20 * clk_period;
        report "loop high completed" severity note;
        i_noisy <= '0';
        wait until rising_edge(i_clk);
        glitch_duration := integer_random(1,5);
        for x in 0 to glitch_duration loop
            i_noisy <= not i_noisy;
            wait until rising_edge(i_clk);
        end loop;
        i_noisy <= '0';
        wait for 20 * clk_period;
        report "loop low completed" severity note;
    end loop;
    report "Simulation complete" severity failure;
    
end process;

end;
f4fea07c-46db-11ee-a2ef-92fbcf53809c.png

运行仿真后显示在信号状态改变后随机数量的脉冲便增加。检查输出信号表明滤波器已正确滤除输入信号中可能存在的毛刺。

正如在一开始所说的,这样的滤波器对于部署在可能存在电噪声的环境中非常有用。与 BRAM 上的 EDAC 等其他缓解策略相结合,这是可用于实现设计弹性的关键方法之一。






审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 滤波器
    +关注

    关注

    160

    文章

    7725

    浏览量

    177630
  • 寄存器
    +关注

    关注

    31

    文章

    5308

    浏览量

    119977
  • 状态机
    +关注

    关注

    2

    文章

    492

    浏览量

    27469
  • BRAM
    +关注

    关注

    0

    文章

    41

    浏览量

    10942
  • 时钟脉冲
    +关注

    关注

    0

    文章

    19

    浏览量

    12667

原文标题:【数字实验室】消除毛刺

文章出处:【微信号:Open_FPGA,微信公众号:OpenFPGA】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    TPA3110D2无信号输入时,输出336kHZ的正弦波信号有明显的毛刺,如何滤除毛刺

    采用TPA3110D2设计的功放板,无信号输入时,输出336kHZ的正弦波信号,有明显的毛刺,可否有办法滤除毛刺?该正弦信号虽然人的耳朵听不到,可否滤除掉?
    发表于 11-04 06:58

    波形滤除毛刺

    rt我的波形如下图所示,想用硬件把毛刺去除掉,请问各路大神原理图怎么设计谢谢·~~
    发表于 04-11 22:08

    引入输入滤波器滤除噪声设计

    会在输入电容上产生电压纹波,从而增加EMI。因此,有必要采用一些其他方法提高传导EMI的性能。本文主要讨论的是引入输入滤波器滤除噪声,或增加屏蔽罩
    发表于 07-05 09:52

    毛刺滤波方法

    ,放大毛刺后如图2所示,大约维持10ns的高电平。图1图2如何滤除这些毛刺呢?办法有两个,其一就是用纯粹硬件的办法,在信号进入FPGA之前进行滤波处理,串个电阻并个电容都可以,特权同学
    发表于 06-04 05:00

    怎样去设计一个使用时序逻辑对单bit信号进行毛刺滤除操作的电路

    什么是边沿检测计数法?怎样去设计一个使用时序逻辑对单bit信号进行毛刺滤除操作的电路?怎样用verilog写出其代码?
    发表于 08-19 06:53

    FPGA | 竞争冒险和毛刺问题

    产生的条件,减少毛刺的发生。例如,在数字电路设计中,常常采用格雷码计数取代普通的二进制计数,这是因为格雷码计数的输出每次只有一位跳变
    发表于 11-02 17:22

    电路从SDA和SCL线路中滤除毛刺的解决方法及过程

    I2C 控制规范 v2.1 规定了滤除快速工作模式下 SDA 和 SCL 线路上最大间距为 50ns 的毛刺。 Zynq-7000 AP SoCs PS7 中的 I2C 控制没有实
    的头像 发表于 06-29 14:00 1.8w次阅读

    FPGA中的冒险现象和如何处理毛刺

    通过改变设计,破坏毛刺产生的条件,减少毛刺的发生。例如,在数字电路设计中,常常采用格雷码计数取代普通的二进制计数,这是因为格雷码计数
    发表于 06-23 08:49 1817次阅读
    FPGA中的冒险现象和如何处理<b class='flag-5'>毛刺</b>

    电感的毛刺现象是什么意思?如何解决感应毛刺

    毛刺现象是我们每一个电子爱好者避之唯恐不及的,今天我们学习一个毛刺现象以及如何规避它,进而掌握电感升压的原理。
    的头像 发表于 08-15 14:53 3872次阅读
    电感的<b class='flag-5'>毛刺</b>现象是什么意思?如何解决感应<b class='flag-5'>毛刺</b>?

    在 FlexIO上进行毛刺滤波的方法

    会由于毛刺的存在,导致错误数据被接收。 对于这种情况,可以使用额外的定时设计一个毛刺滤波器,以避免错误的发生。 使用定时 进行
    的头像 发表于 10-19 11:25 940次阅读

    什么是毛刺毛刺的大小和方向 如何测量毛刺的尺寸?

    的外观、质量和安全性。测量毛刺的尺寸及方向,以及检查已去除的毛刺都是确保产品质量的重要环节。 首先,我们讨论毛刺的大小和方向如何测量。对于毛刺
    的头像 发表于 12-07 14:24 4673次阅读

    如何最小化毛刺尺寸?如何控制毛刺方向?

    如何最小化毛刺尺寸?如何控制毛刺方向? 为了得到高质量的产品或工艺品,我们通常需要把毛刺的尺寸最小化,并控制其方向。毛刺会影响制品的外观质量、功能性能以及使用寿命。本文将介绍
    的头像 发表于 12-07 14:24 720次阅读

    PCB钻孔毛刺产生的原因及毛刺的危害

    PCB钻孔毛刺产生的原因及毛刺的危害 PCB(Printed Circuit Board)是一种非常重要的电子组件,被广泛应用于各种电子设备中。在PCB的生产过程中,钻孔是一个非常关键的步骤,用于
    的头像 发表于 12-07 14:24 3691次阅读

    双面无毛刺冲裁如何实现(一种消除毛刺的加工方法)

    冲裁加工时总是会产生毛刺,很难消除掉,因此,经常在加工后进行压毛刺消除毛刺。鉴于分型面的问题,最近使用去毛刺的方式有增加的趋势.
    的头像 发表于 12-12 14:17 743次阅读
    双面无<b class='flag-5'>毛刺</b>冲裁如何实现(一种消除<b class='flag-5'>毛刺</b>的加工方法)

    I2C噪声毛刺滤波

    电子发烧友网站提供《I2C噪声毛刺滤波.pdf》资料免费下载
    发表于 10-08 14:39 5次下载
    I2C噪声<b class='flag-5'>毛刺</b><b class='flag-5'>滤波</b>