方波中的毛刺

在FPGA设计中,经常要对外部输入的信号捕捉上升沿。

在某些设计中,外部输入信号为方波信号,由比较器输出。

如上图,比较器输出方波后,电路设计欠佳,产生抖动,下降沿产生毛刺,如果FPGA逻辑设计不好,容易在方波下降沿时再次捕捉到上升沿。

在电路无法更改的情况下,只能更改FPGA逻辑设计,过滤毛刺。

在捕捉边沿中通常使用以下逻辑:

时序逻辑:

always@(posedge sys_clk)

begin

reg1 <= rising_in;

reg2 <= reg1;

end

组合逻辑:

assign rising_cap = reg1 & (~reg2);

方案一:

通过降频采集外部输入信号:

always@(posedge sys_clk)

begin

if(div_clk)

begin

reg1 <= rising_in;

reg2 <= reg1;

end

end

将sys_clk分频到div_clk,注意分频时要满足采样定理。通过降频,过滤毛刺。

方案二:

在某些设计中,由于使用方波上升沿进行完全同步,而且整个系统使用sys_clk,所以不能进行分频设计。

对信号进行多次采样,过滤毛刺。

always@(posedge sys_clk)

begin

reg1 <= rising_in;

reg2 <= reg1;

reg3 <= reg2;

reg4 <= reg3;

reg5 <= reg4;

reg6 <= reg5;

reg7 <= reg6;

reg8 <= reg7;

end

组合逻辑:

assign rising_cap = reg1 & reg2 & reg3 & reg4 & (~& reg5)

& (~& reg6) & (~& reg7) & (~& reg8);

在方波上升沿很陡的情况下,可使用上述方式,方波上升沿的上升时间可由电路电阻改变。

原文地址:卿萃科技FPGA极客空间 微信公众号