外部脉冲输入滤波处理疑问

2019-07-16 01:16发布

本帖最后由 cxFPGA 于 2013-9-26 14:02 编辑

正在做一个增量式编码器相关的项目,需要对外部输入的脉冲进行计数,为了滤除干扰,做了如下的滤波处理,fpga时钟为40M,经过pll倍频到160M,滤波的原理是每当io的滤波值不等于io时开始计数,当计数值达到预设值120时更新滤波值并清零计数,若计数未达到预设值期间滤波值与io值相等了则清零计数,等待下次的不同。这样一个滤波理论上能够滤除周期为1.5us以上的脉冲实现,仿真也没有问题,可是实际下板子时发现并不能很好的滤除干扰,在输入脉冲的结尾人为的加入一个75ns的干扰信号,结果是偶尔会多数一个脉冲。代码如下,忘各位能帮忙分析一下。
reg[7:0] io_filter_cnt;
always@(posedge clk or negedge rst_n)begin
        if(!rst_n)begin
                io_filter_cnt<=0;
                io_filter<=0;
                end
        else begin
                if(io_filter != io)begin
                        if(io_filter_cnt>8‘d120) begin
                                io_filter_cnt<=0;
                                io_filter<=io;
                                end
                        else io_filter_cnt<=io_filter_cnt+8'd1;
                        end
                else io_filter_cnt<=0;

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。