(笔记)synchronizer step by step 优化设计
方法一:
此列子只用了一个flipflop同步另一个时钟域的信号,如果bclk时钟域穿过来的的信号在aclk的上升区域沿发生
变化(在setup time之后 hold time之前发生变化),那么所采到的信号就可能会产生亚稳态,这将对电路产生
严重的影响。能否有其他方法改变此情况呢?
方法二:
我们在方法一的基础上又加了一个flipflop,这样如果外部时钟域传来的signal在DEMET的上升沿变化,EDMET输出亚稳态,
如果EDMET亚稳态输出在SYNC上升沿到来之前消失(即在setup time到来之前消失),那么SYNC的输出将是正常值,这样
就有效地消除了亚稳态;如果亚稳态输出在SYNC上升沿到来之前没消失(即在setup time到来之前没消失),那么SYNC将输
出亚稳态,但此时的概率非常小,所以可以不用考虑。
但当signal的外部时钟域非常小的情况时(如下图),signal的变化可能在我们当前时钟clock_one的上升沿到来之前消失,
此时我们可能采不到信号的变化。这该怎么办呢?
方法三:
我们在方法二的基础上又加了flipflop,inverter,xor,在初始时CAP,DEMET,SYNC1,SYNC2输出都是低电平这样让外部时钟域信号signal
作为CAP的时钟输入,只要signal发生从0到1的变化,那么CAP的输出Q就会发生变化,由0到1,下一个上升沿变化反映到DEMET,再下
一个上升沿变化反映到SYNC1,在下一个上升沿变化反映到SYNC2,signal_CAP_sync为最后同步化的信号输出(如下图)。
如果外部时钟域进来的信号是低电平有效,那么我们只需在最前方加个反相器,让后白最后的xor变成xnor即可。
但是如果上述外部时钟域进来的信号signal在当前时钟域clock_one上升沿到来之前发生两次变化,那么此电路
只能采到一个变化,那我们需要怎么改进呢?
正在研究中......