| 
 
| 本帖最后由 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;
 对它进行计数了,谢谢!
 
 
 
 
 
 
 | 
 |