赞
踩
目录
当模块 A 以时钟 Clka 和模块 B 以时钟Clkb,进行数据交互时,两模块的数据时钟不同,如果直接相互传递数据,很可能会导致数据据再传输过程中出现错误:比如数据错误、遗漏、重复等。这时候就需要跨时钟域处理,让数据准确传递。
Setup Time:时钟信号上升沿到来之前,输入信号数据需要维持一定时间的稳定状态,这个“一定时间”就是建立时间。
Hold Time:时钟信号上升沿到来之后,输入信号数据也需要保持一定时间的不变,这个“一定时间”就是保持时间。
全同步设计
全异步设计
全局异步,局部同步设计
如图所示,当sys_clk时钟信号上升沿踩到Rx信号的变化间隙时,此时输出的Rx_reg1信号就会出现亚稳态,其输出信号就会出现震荡、毛刺或者固定在某一电压值,而不是等于D端输入的值,经过震荡之后,Q端会输出0或者1。这就会产生亚稳态。
再数据跳变期间采样,建立时间或保持时间不满足
同步失败、系统失败,按概率出现:发生概率可能达到可靠性要求无法接受的程度。
根据跨时钟域信号的特点来选择同步化方法:
为什么使用两级寄存器(接收时钟域)
因为两级寄存是一级寄存概率的平方,两级并不能完全消除亚稳态危害,但是提高了可靠性,减少亚稳态发生的概率
一级寄存大概率无法改善亚稳态,三级寄存相对于二级寄存改善不大,所以二级寄存是最好的选择
下图是电平同步器的原理图,可以看到对于两个时钟 clk1、clk2,再处理两个时钟的直接按的数据传输时,使用了两级寄存器进行数据同步,但是电平同步器只能对两个频率相同、相位不同的时钟之间进行处理,对于频率不同的时钟就无法处理。
下图是边沿检测同步器,用于慢时钟域(clk1)到快时钟域(clk2)的同步处理。慢到快可能会使数据重复采集。解决办法:取沿电路:把上升沿即数据的变化转化成脉冲,然后让输出与寄存的输出取反相与,这样就可以检测出上升沿并将上升沿转换成脉冲。
下图是脉冲同步器,用于快时钟域(clk1)到慢时钟域(clk2)的同步处理,快到慢可能会使数据出现遗漏采集,和边沿检测同步器有着相类似的原理。
如果直接使用同步器会带来某些问题
正确方法
以上两种方法都要使用同步器
同步 FIFO:写时钟和读时钟为同一个时钟
异步 FIFO:写时钟和读时钟为独立时钟
跨时钟域的数据信号需要用到异步 FIFO,隔离时钟域,匹配读写速度
读写指针比较产生
异步 FIFO 设计
根据 full 和 empty 产生方法分为:
多时钟域设计不可避免
减少亚稳态的风险
工具不能保证,只能靠设计来保证
同步化技术的选用要结合具体的情况
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。