相信大家都知道亚稳态的发生原因及表现形式,也应该知道消除亚稳态最基本的电路是两级触发器同步,如下图所示:
我们该如何利用上面这个基本电路去完成一个跨时钟域的通信?Handshaking,握手通信。
上面定义了最基本的握手通信的信号,Request以及Acknowledge(以下简称req、ack),首先,我们需要定义req和ack的时序。到底用高电平还是低电平去表示信号有效,还有就是有效信号需要维持多久,假设CircuitA(以下简称CA)发送一个req信号时,CircuitB(以下简称CB)需要同步电路同步,因此req至少需要维持两个CB的同步时钟,当CB同步时钟不确定时,则CA也无法发送有效的req信号;这个问题对CB的ack也同样存在。
为了解决上述问题,对CB的同步时钟达到最大的兼容性,req应选用跳变沿去通知CB电路,同理,ack也用跳变沿响应CA,CA才能开始下一个请求req信号。
然后,CA和CB内部利用边沿检测电路实时监测ack与req信号,如下图:
其实,req和ack的信号形式可以有多种多样,但是有一点是必须的:就是不同时钟域之间的信号传送,必须要经过同步,否则出现问题的隐蔽性很强。