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 等其他缓解策略相结合,这是可用于实现设计弹性的关键方法之一。






审核编辑:刘清

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

    关注

    158

    文章

    7331

    浏览量

    174780
  • 寄存器
    +关注

    关注

    30

    文章

    5028

    浏览量

    117721
  • 状态机
    +关注

    关注

    2

    文章

    486

    浏览量

    27168
  • BRAM
    +关注

    关注

    0

    文章

    40

    浏览量

    10885
  • 时钟脉冲
    +关注

    关注

    0

    文章

    19

    浏览量

    12554

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

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

收藏 人收藏

    评论

    相关推荐

    波形滤除毛刺

    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.7w次阅读

    沈阳莱茵打磨去毛刺机器人

    铸铁去毛刺,切冒口,切焊口。铝件去毛刺,发动机壳去毛刺
    发表于 11-24 14:40 3次下载

    常用的修边与去毛刺的方法介绍

    毛刺,就是去除在零件面与面相交处所形成的刺状物或飞边。毛刺的危害性尤为明显, 逐渐引起人们的普遍重视, 并开始对毛刺的生成机理及去除方法进行研究。
    的头像 发表于 05-22 11:24 8521次阅读

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

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

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

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

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

    什么是毛刺毛刺的大小和方向 如何测量毛刺的尺寸?如何检查已去除的毛刺毛刺是指由于加工工艺或其他原因产生的金属表面上的不平整区域或小尖刺
    的头像 发表于 12-07 14:24 1820次阅读

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

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

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

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

    什么是紧固件毛刺呢?紧固件毛刺是怎么样形成的呢?

    什么是紧固件毛刺呢?紧固件毛刺是怎么样形成的呢?要如何很好的去除这种毛刺呢? 紧固件毛刺是指在紧固件(如螺钉、螺帽、螺栓等)的表面形成的一层或多层细小的突起。这些
    的头像 发表于 12-07 14:24 358次阅读

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

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