在看赛林思官网上一个同步模块的代码时,有点看不懂,请问如下的一个process代表什么电路?谢谢
--
-- Synchronize the INCREMENT_BUFFER_COUNT signal to the READ clock and one shot it
--
process (RD_CLK, RESET)
begin
if RESET='1' then
INCREMENT_BCOUNT_METASTABLE <= '0';
INCREMENT <= '0';
elsif RD_CLK='1' and RD_CLK'event then
INCREMENT_BCOUNT_METASTABLE <= (INCREMENT_BCOUNT_CAPTURED and (not INCREMENT));
INCREMENT <= (INCREMENT_BCOUNT_METASTABLE and (not INCREMENT));
end if;
end process;
x = INCREMENT_BCOUNT_CAPTURED
y0 = INCREMENT_BCOUNT_METASTABLE
y1 = INCREMENT
那么
y0 <= x and not y1
y1 <= y0 and not y1
x 是输入
y1是输出
当x连续为L时,输出y1=L
当x出现1~2个周期宽度的H电平时,y1也会输出1个周期宽度的H电平。y1的拉低是自动完成的,与x无关。
总体来说,处理步骤为:
首先,这个同步电路对输入进行2周期延迟。这是同步电路通常的做法。可以减弱亚稳态影响。
然后,输出维持1周期H电平之后自动拉低。有一点巧妙,将亚稳态出现的几率大致降低了1半。