我需要使用计数器分别计算毛刺信号的数量和毛刺的宽度,我可以使用向上计数器处理来解决边缘问题,如下所示:
counterC1 : process (clk, reset, clr)
--variable count : integer RANGE 0 TO 4 ;
begin
if (reset='1') then
r_regC1 <= (others=>'0');
elsif (clk'event and clk ='1') then
r_regC1 <= r_nextC1;
end if;
end process;
-- next-state logic
r_nextC1 <= (others=>'0') when reset = '1' or clr = '1' else
r_regC1 + 1 when (sw_tick'event and sw_tick = '1') else
r_regC1;
--sw_tick is glitch by rebound
-- output logic
qC1 <= std_logic_vector(r_regC1);
如何识别计数器以计算过渡边缘或计算整个冲击的较大值?有什么建议吗?
谢谢!
答案 0 :(得分:1)
这对EE网站来说是个更好的问题。
首先,您应该通过一对触发器同步外部信号。这确保了它与时钟域同步。然后,只要同步信号发生变化,您就会重置向下计数器。如果计数器达到0,那么信号已经足够稳定,可以认为它没有干扰,你可以将去抖信号设置为新状态。