本帖最后由 entepino 于 2013-3-24 14:37 编辑
我把外部输入的异步信号进行同步处理,请教大家,这样处理算同步吗?谢谢!
--由系统clk(100M)产生200k的clk
CLKDIV200K :process
begin
WAIT UNTIL CLK100M ='1';
if RESET = '0' then
CLK200k<= '0';
count200k<=0 ;
elsif count200k>=499 then
CLK200k<= '1';
count200k<=0 ;
elsif count200k =249 then
CLK200k<= '0';
count200k <= count200k+1;
else
count200k <= count200k+1;
end if;
end process CLKDIV200K;
--用系统clk(100M)同步外部输入的异步脉冲PulseIN,相当于图中触发器1,a_clk相当于clk(100M),同步后的输出信号为SynPulseINCLK1。
SynPulseCLK1:process
begin
WAIT UNTIL CLK100M ='1';
if RESET = '0' then
SynPulseINCLK1<= '0';
else
SynPulseINCLK1 <= PulseIN;
end if;
end process SynPulse;
--用系统clk产生的200k时钟,再次同步一下信号SynPulseINCLK1,相当于图中的触发器2,输出信号为SynPulseINCLK2。
SynPulseCLK2:process
begin
WAIT UNTIL CLK200k ='1';
if RESET = '0' then
SynPulseINCLK2<= '0';
else
SynPulseINCLK2 <= SynPulseINCLK1;
end if;
end process SynPulseCLK2;
--第三次同步一下信号SynPulseINCLK2,相当于图中的触发器3,输出信号为SynPulseIN。
SynPulse:process
begin
WAIT UNTIL CLK200k ='1';
if RESET = '0' then
SynPulse<= '0';
else
SynPulseIN <= SynPulseINCLK2;
end if;
end process SynPulse;
经过这三次处理后我是不是可以认为外部输入的信号PulseIN现在已经变成与系统时钟clk同步的信号了?是不是就可以用
if (SynPulseIN 'EVENT AND SynPulseIN = '1') then
CntINPulse<=CntINPulse+1;
对它进行计数了,谢谢!
|